一个网页爬虫如何抓取 ::before 中的内容?

3

伪元素中的内容,比如::before::after实际上并不存在于DOM树中。因此,无法通过选择器来定位它。

问题是,我该如何提取其中的内容呢?例如:

<div>This is <span></span>n apple.</div>
...
span::before {
    content : "a"
}

shows : This is an apple.

但是如果我提取 div 的文本,我只能得到 This is n apple. 而没有 span::before 中的内容。

我该如何处理这个问题?


浏览器是通过解析和应用CSS来实现的,你也是这样做的吗? - nnnnnn
重复?https://dev59.com/7GQo5IYBdhLWcg3wfPfK - Mr. Alien
@Mr.Alien 不,这是关于如何爬取包含伪元素的第三方网站的问题。 - Sraw
@nnnnnn 实际上,我已经尝试过但失败了。即使应用了 CSS 和 JS,伪元素中的内容仍然不存在于 DOM 树中,这仍然导致了位置错误。 - Sraw
1个回答

1

我该如何解决这个问题?

说实话,不要使用伪元素来解决这个问题。

伪元素是专门设计用于呈现文档树之外的内容。

这些“生成的内容”,由::before::after伪元素的content属性指定,通常用于添加纯粹的装饰性内容。

因此,搜索引擎没有理由索引生成的内容。

https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements


1
如果你正在爬取一个使用生成内容做这种事情的第三方网站,那么很遗憾,这样做是不被允许的。 - BoltClock
哦,我可以看到这个的用途。如果DOM树的内容实际上是“apple”(例如对于带有图片或其他东西的标识符,“apple”,“pear”等),并且您想要使用正确的文章来装饰它们。像那样的东西。但当然,在这些情况下,不需要抓取添加的单词。 - Mr Lister
@BoltClock指出了问题,我需要爬取一个第三方网站。而使用伪元素来显示正常内容,则是一种反爬技术。 - Sraw
@Mr Lister:基本上,如果内容是必要的,它不应该是生成的内容。 - BoltClock

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接