使用 Perl 访问 50 万页
目前,我正在使用 Mechanize 和 get() 方法来获取每个站点,并使用 content() 方法检查每个主页的某些内容。 我有一台非常快的计算机+ 10Mbit 连接,但仍然花了 9 个小时来检查 11K 站点,这是不可接受的,问题是 get() 函数的速度,显然,它需要获取页面,有什么办法可以让它更快,也许可以禁用某些东西,因为我只需要检查主页 html 。
谢谢,
Currently I'm using Mechanize and the get() method to get each site, and check with content() method each mainpage for something.
I have a very fast computer + 10Mbit connection, and still, it took 9 hours to check 11K sites, which is not acceptable, the problem is, the speed of the get() function, which , obviously, needs to get the page,is there any way to make it faster,maybe to disable something,as I only need to main page html to be checked.
Thanks,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
并行查询而不是串行查询。如果我需要这样做,我会分叉一个进程来获取页面。类似于 Parallel::ForkManager、LWP::Parallel::UserAgent 或 WWW:Curl 可能会有所帮助。我倾向于 Mojo::UserAgent。
Make queries in parallel instead of serially. If I needed to do this, I'd fork off a process to grab the page. Something like Parallel::ForkManager, LWP::Parallel::UserAgent or WWW:Curl may help. I tend to favor Mojo::UserAgent.
使用
WWW::Curl
(特别是 WWW::Curl::多)。我每天用它抓取 1 亿多个页面。该模块是libcurl
之上的一个薄绑定,因此感觉有点 C 风格,但它速度很快,并且几乎可以完成 libcurl 能够完成的任何操作。我不建议使用 LWP::Parallel::UA,因为它有点慢,而且模块本身没有经过深思熟虑。当我开始编写爬虫时,我最初考虑分叉 LWP::Parallel::UA,但当我研究它的内部结构时,我决定不这样做。
免责声明:我是
WWW::Curl
模块的当前维护者。Use
WWW::Curl
(and specifically WWW::Curl::Multi). I'm using it to crawl 100M+ pages per day. The module is a thin binding on top oflibcurl
, so it feels a bit C-ish, but it's fast and does almost anything libcurl is capable of doing.I would not recommend using LWP::Parallel::UA, as it's kind of slow and the module itself is not very well thought out. When I started out writing a crawler, I originally thought about forking LWP::Parallel::UA, but I decided against that when I looked into it's internals.
Disclaimer: I'm the current maintainer of the
WWW::Curl
module.