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

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

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

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

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

不知道各位怎么看?
7799 次点击
所在节点    Python
45 条回复
chengxiao
2020-05-13 06:56:55 +08:00
主要就是 xpath 写的快啊,看两眼结构,就能取出数据
另外推荐个 Chrome 插件 Xpath Helper 用了 2 年了,很爽
https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl
whusnoopy
2020-05-13 10:04:58 +08:00
我自己的经历(从大概 07 年开始用 Python 写爬虫)

先用 BeautifulSoup,发现对很多不严格按规范写的 HTML 无法解析或解析出错,且性能似乎有点堪忧(那时候好像还是 2 还是 3 )
然后用 pyquery,类似 jQuery 的选择器,在对不按规范写的 HTML 似乎会好一点
后面发现这几个都会依赖 lxml,然后这个东西在 Windows 下有时候会安装不成功,为了保证代码四处可用,尽可能减少依赖,能用原生 re 就用 re 了
codeli
2020-05-13 20:30:15 +08:00
太消耗资源
llsquaer
2020-05-14 11:40:22 +08:00
前段时间刚好将 xpath 改为 re....发现效率突然提升不少呢...原来不用 re 就是写不好啊..后来熟练点了.发现原来是没理解到 re 所以没用..现在发现普通的就直接 re,速度又快..混合使用提高效率
ZoeYn
2020-05-15 11:59:28 +08:00
我到现在还只会(.*?)
不过我现在爬虫都是请求接口返回 json 数据就很舒服(虽然找接口和参数也很头疼)

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

https://ex.noerr.eu.org/t/670680

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

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

© 2021 V2EX