为什么爬虫大佬多用 re 而少用 soup、xml 来提取元素?

2020-05-11 19:44:29 +08:00
 crella
我也知道:先问是不是,再问为什么。

最近找了几个 python 爬虫来看,它们都是单文件解决从抓取到存储、生成结果的整个流程的。我发现一些大佬经常用 re 等正则表达式匹配元素,而我如果要提取那些元素,只想慢慢地用 xml 或者 json 相关的解析库。

我个人感觉正则表达式的匹配命令相对较长,而且感觉不好调试的样子。有时候网页上部分标签内的内容为空,不知道正则表达式是怎么处理这些异常的。

而使用 xml 或 json 配套库的缺点是如果由于网站服务器设置问题或者网络不好,导致下载的页面文本不完整,丢了部分标签,整个 xml 或 json 就解析不了了。而正则表达式则能避免这种问题。

不知道各位怎么看?
7498 次点击
所在节点    Python
45 条回复
ruby0906
2020-05-11 19:49:15 +08:00
自从我知道了 Xpath 以后,其它方式都渣渣。。
ClericPy
2020-05-11 19:52:05 +08:00
1. 正则熟练以后更灵活, 零宽断言什么的, 如果是 css 选择器之类的, 就没法用 Xpath 里那种 contain text 的语法

2. 没有三方依赖

3. 性能领先太多了

PS: lxml 会自动修复不完整的标签, 这点实际比正则还准确点
zhustec
2020-05-11 21:53:25 +08:00
xpath 好用 +1
用正则一般只在比较简单的时候,复杂的时候还用正则可能纯粹只是为了炫技
ChulianCheng
2020-05-11 22:19:24 +08:00
我用 xpath+jsoup,对了,我用 java 写爬虫
coloz
2020-05-11 22:25:41 +08:00
直接选择器就行了,哪里不会点哪里,无脑写爬虫,效果很好
dsg001
2020-05-11 22:43:15 +08:00
能用简单正则搞定的何必麻烦,稍微复杂的 css,最后才是 xpath
LZSZ
2020-05-11 22:49:58 +08:00
可能是性能 猜的
python30
2020-05-11 23:03:14 +08:00
习惯了 xpath + re 一起用
ruimz
2020-05-11 23:04:27 +08:00
我说一个反例,我之前爬豆瓣遇到的。
在详情页面,发现了只有少数电源,比如妇联,才会有 [官方网站] 这一条信息
而其他的电影都没有
之前用 xpath 爬出来几个错位就是这么出来的
Les1ie
2020-05-11 23:13:34 +08:00
只用 xpath 基本能解决遇到的问题,如果有不能搞定的地方就加上 re
malone6
2020-05-11 23:17:06 +08:00
我之前写爬虫经历
1. 最开始是 re,后来发现 re 写着比较累,过段时间回去看就看不懂这段正则,也容易写错。
2. 后来用 beautifulsoup,比较语义化,简单,但是代码会写的比较长。
3. bs 之后对 html 理解变熟练了,就都是用 lxml+xpath 取,包括用 scrapy 的解析器也选择 lxml,当然也会掺和一点简单正则。
anexplore
2020-05-11 23:19:45 +08:00
简单的用 re 还行,复杂的抽取还是 xpath 好用且易维护。。。说性能,正则表达式写不好性能就是渣渣;
hakono
2020-05-12 00:57:38 +08:00
在需求稍微复杂点的情况下,爬虫里依旧用正则的,大部分都是新手
alexkkaa
2020-05-12 06:04:03 +08:00
re 更有通用性,很多情况 dom xpath 无法匹配。
XIVN1987
2020-05-12 07:38:32 +08:00
看来 xpath 比较流行啊,,了解下去,,
以前只用过 pyquery
gleymonkey
2020-05-12 07:48:58 +08:00
我倒是觉得 bs4 更简单
clague
2020-05-12 07:58:56 +08:00
正则通用而且性能高
koebehshian
2020-05-12 08:19:07 +08:00
用 jquery 那样的匹配语法不是蛮好的
DelayNoMay
2020-05-12 08:23:46 +08:00
谷歌浏览器的 xpath helper 真的很香,对了,我是用 golang 爬虫的
392039757
2020-05-12 08:46:12 +08:00
java,python 爬虫都写过,xpath,css 在提取方式上更接近 html 的结构,只有在 xpath,css 不好处理的时候才会选择使用正则提取,一般情况下是使用 xpath,css 提取到 Element 之后再使用正则

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

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

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

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

© 2021 V2EX