爬虫选 xpath 还是 css selector?

2019-04-14 01:35:59 +08:00
 51300520

解析 html 元素用哪个更好?我不要什么性能,爬虫最重要的是稳定,如果考虑网页改变这种可能性,哪个选择器的适应性更强? 我意思是网页如果改变了,但是不是那种大改,哪个更容易在不改爬虫代码的情况下更可能适应?

4368 次点击
所在节点    问与答
21 条回复
herozzm
2019-04-14 01:37:28 +08:00
都要
jquery
正则
json

必须好的
51300520
2019-04-14 01:38:35 +08:00
我只想知道几率大小而已,虽然没有哪种可以百分之百不改代码,因为我以前一直是用 css 没用过 xpath,想找大家了解下,如果 xpath 适应性更强我就换成 xpath 的
51300520
2019-04-14 01:39:54 +08:00
@herozzm
很多时候只要一样就可以,我以前没用 xpath,一直用 css,基本没有定位不到的,既然如此我要选一个更健壮的
herozzm
2019-04-14 01:42:08 +08:00
@51300520 需要多样性 不然适配部分网站
binux
2019-04-14 01:43:14 +08:00
是否健壮和用什么工具无关
51300520
2019-04-14 01:48:38 +08:00
@binux
是吗?假如我现在页面里面有一个 class 叫 test, 那我用 css 选就是 css(.test),但是它的路径是页面第三个元素,那我用 xpath 就可以用路径来选 html[3], 这两种情况健壮性怎么可能不一样呢,假如人家网页维护,test 类变成 demo 类,css 就选不到了,假如他路径没变,xpath 依然可以选到
herozzm
2019-04-14 01:52:12 +08:00
jquery 方式可以
binux
2019-04-14 02:04:13 +08:00
@51300520 那你不会在 CSS selector 中用 nth-child 吗?
loginbygoogle
2019-04-14 02:07:54 +08:00
无论什么 html 爬虫框架,如果网站本身的结构变了,都得改,没有一劳永逸的。
51300520
2019-04-14 02:13:33 +08:00
刚看了下 xpath,发现这个问题提得多余了,这玩意和 css 功能绝大部分是重叠的,一个不行的话那另一个也不行
crab
2019-04-14 04:05:50 +08:00
直接正则也是可以。
Leigg
2019-04-14 08:11:04 +08:00
当然是都用。
Leigg
2019-04-14 08:11:21 +08:00
也并不复杂,一两天就学会了。
Leigg
2019-04-14 08:12:11 +08:00
大部分情况下用 css 的表达式很简单。
wedoub
2019-04-14 08:43:56 +08:00
正则表达式更好用我觉得
iyaozhen
2019-04-14 08:47:46 +08:00
页面变了,用啥都得改

我一般自动化测试用 css selector,方便和前端沟通
charlie21
2019-04-14 09:01:52 +08:00
用 CSS 选择器,当遇到 CSS 做不到的东西 的时候 再考虑 XPath
dsg001
2019-04-14 09:40:16 +08:00
混用,哪个方便用哪个
baitei
2019-04-14 15:20:57 +08:00
我是首先 css selector,简单。
页面变了大概率得改程序,做不到想一劳永逸。
程序代码适应性很差的,以后要是爬虫用上了深度学习,会智能很多哈。
hakono
2019-04-14 16:50:40 +08:00
正则就算了吧。。。。写出来过段时间都不知道写的表达式是什么玩意。。。加注释也没用

老老实实 css 选择器就行,稳定性这个无解。因为你不知道对方网站前端下次会把网页结构改成什么样子

解决办法其实挺简单的,把 css 选择器的字符串从代码中剥离,塞入单独的文件里,txt 啊,json 啊,数据库啊都行,从这些地方读取提取规则再匹配

实现起来是比直接写死在代码里复杂了那么点,但之后维护起来那就很爽了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/554930

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX