请问最佳的爬虫语言是什么

2022-09-15 02:27:22 +08:00
 dfgddgf

如果需要多线程(多端口)下载网页,保证下载速度和网页解析速度和开发速度的在合理的范围之内,哪一款语言是最优的。

golang 并发使用最强的,在正则匹配速度,爬虫软件包的丰富程度上和 perl 、python 还有不小差距。

pyhon 的异步下载引擎貌似使用不是特别方便(个人对 pyhon 不熟,勿喷)

php 有 https://github.com/walkor/Workerman 这样的高性能网页服务器框架,有没有易用的爬虫框架?

node.js 异步下载貌似很强大,有没有大型爬虫项目使用 node.js 做爬虫,同时网页解析,文件处理,unicode 转码全部使用这个语言的爬虫案例?

perl 有一个 mojo::useragent 配合 libEV ,并发能力很强大。perl 在文本正则处理、文本编码转换,网页 dom 解析都有成熟的处理方案和软件包,这个是目前作者最喜欢的平台。

c# 据说是最强大爬虫平台,没接触多少。

java 平台性能很强劲,软件包也丰富,笔者知之甚少。

rust 貌似爬虫全套组件都有,而且比较新。貌似可以做出极致压榨硬件性能的方案。

11576 次点击
所在节点    程序员
67 条回复
zzzkkk
2022-09-15 14:25:16 +08:00
@815979670
用 puppeteer 写了个爬虫 美区 3000 个 lambda 用 php guzzlehttp 根本起不来 3000 个链接
最后用 aws go client 解决了
php 真的步 per 后尘了
dfgddgf
2022-09-15 14:39:20 +08:00
@zzzkkk guzzle 看了一些源代码,底层貌似没有依赖 c 或者 c++

应该是底层没有设计成高度可靠的组件。

perl 的爬虫模块 mojo::useragent 配合 libEV ,确实很强大。

cygwin 平台并发 50 轻轻松松,而且还保持 http 连接可以复用
sunnysab
2022-09-15 14:54:45 +08:00
还真用 rust 写过爬虫,是先拿 Python 做原形,然后用 rust 重写。rust 的网页解析性能和浏览器相当,但是 python 明显慢多了(数秒,不可接受)。
不过 rust 里解析 HTML 的代码不好看,也不排除是我思想没转过弯用了太多 unwrap()。😂😂
Cbdy
2022-09-15 14:56:02 +08:00
我只知道 Google 搜索引擎的爬虫主要是 C++和 Java 写的
zzzkkk
2022-09-15 15:02:20 +08:00
@dfgddgf
perl 已死 倒闭了活该 there is more than one way to do it , 不要说控制结构 连变量在不同 context 都取不同的值 增加码农的大脑 负担
zzzkkk
2022-09-15 15:04:15 +08:00
@sunnysab
rust 写解析代码生成 dom 树?
私以为单纯的 html 选择器还不够 一定要生成 dom 树 那样才能获取节点的 parent 节点
wxf666
2022-09-15 15:13:35 +08:00
@sunnysab 你 python 用啥做 html 的 parser ? lxml 的速度也不够吗?
yekern
2022-09-15 15:28:29 +08:00
php querylist 可以写好规则就可以了. 同时可以支持插件扩展, 支持无头浏览器
laravel
2022-09-15 15:35:03 +08:00
我在用 nodejs 写爬虫,用 puppeteer cheerio axios 这些库,都是针对特定网站写爬虫。
buyan3303
2022-09-15 16:05:43 +08:00
熟悉哪种编程语言,就用哪种语言的爬虫框架。

多数学 python 的人,使用的是 scrapy 。python 以及 scrapy 有较为丰富的教程,我曾经就一边看着某课网的爬虫实战教程,一边自己学着爬虾米音乐,即使有些内容不适配,但是那个实战教程,从采集到入库一成套都教了,还教了 xpath lxml 匹配失败的原因之类的东西。
shyling
2022-09-15 16:07:45 +08:00
爬虫种类多啊。。

爬量的和爬有保护的内容的不一样
fuxkcsdn
2022-09-15 16:13:58 +08:00
反正不是 python 就对了,python 除了 bs 库比较好用外,并没看出有啥特别的优势
加上现在 cdp 协议的普及,很多反爬还是得靠 cdp 来实现,cdp 就是 nodejs 的地盘了
ljtnine
2022-09-15 16:18:27 +08:00
aiohttp
www5070504
2022-09-15 16:29:40 +08:00
肯定是库多 省事的那个 爬虫性能大多数浪费在 io 上 啥语言性能也不会有明显优势
zzl22100048
2022-09-15 16:47:13 +08:00
@ljtnine aiohttp 这个库 bug 太多了
xieren58
2022-09-15 18:01:16 +08:00
nodejs + playwright + cheerio, 谁使用谁知道. (刑
ljtnine
2022-09-15 18:21:55 +08:00
@zzl22100048 啊?我用这个库写过一个简单的爬虫,还没遇到过问题
wxf666
2022-09-15 18:32:52 +08:00
@zzl22100048 有啥 bug 吗?我用这个库爬了好多小说了

@dfgddgf 我提供一个 Python 异步 + 多线程 的数据:

环境:Redmi Note 5 (高通骁龙 636 )的 Linux Deploy 里,Debian 11 arm64 ,Python 3.10 ,百兆 WIFI ,电池供电

流程:sqlite3 读取网址,aiohttp 并发下载多个章节,json 解析,每本书所有章节合并成一个 json ,编码成 UTF-16 ,多线程 lzma 压缩,每一千本保存一个 tar

速度:峰值 700 章节 /秒(每个章节需下载一个页面,大约在凌晨 3 点 ~ 7 点)
ox180
2022-09-15 19:22:20 +08:00
js
Aloento
2022-09-15 19:40:19 +08:00
看需求吧,我个人用的是 C#,自带的那个 driver 是真的强大

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

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

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

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

© 2021 V2EX