php - 爬行抓取和线程?用PHP

标签 php multithreading screen-scraping web-crawler

我有一个个人网站,可以从我最喜欢的音乐博客中抓取并收集MP3,以便以后收听...

它的工作方式是CRON作业每分钟运行一次.php脚本,以爬网DB中的下一个博客。将结果放入数据库,然后第二个.php脚本对收集的链接进行爬网。

这些脚本仅向下爬到该页面的两个级别,即..主页www.url.com以及该页面上的链接www.url.com/post1 www.url.com/post2

我的问题是,随着我开始获得更多的博客集。仅在20到30分钟内扫描一次,并且当我向脚本添加新博客时,由于每分钟仅处理一次链接,因此在扫描链接时会有备份。

由于PHP的工作方式,由于脚本执行时间的原因,我似乎不能只允许脚本处理多个链接或数量有限的链接。内存限制。超时等

另外,我无法运行同一脚本的多个实例,因为它们将在数据库中相互覆盖。

我可以加快此过程的最佳方法是什么。

有没有一种方法可以让我有多个脚本影响数据库,但可以编写它们,以使它们不会彼此覆盖,而是将结果排入队列?

有没有什么方法可以在PHP中创建线程,以便脚本可以按自己的进度处理链接?

有任何想法吗?

谢谢。

最佳答案

多使用CURL!

Curl-mutli将让您并行处理页面。

http://us3.php.net/curl

大多数时候,您在网站上等待,进行数据库插入和html解析要快几个数量级。

您创建了要抓取的博客列表,将其发送出去可以 curl 多个。等待,然后依次处理所有调用的结果。然后,您可以在下一个级别进行第二次传递

http://www.developertutorials.com/blog/php/parallel-web-scraping-in-php-curl-multi-functions-375/

关于php - 爬行抓取和线程?用PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/965915/

相关文章:

php - CakePHP:FormHelper Timefield 未插入任何数据

java 多线程中的质数问题

multithreading - 如何处理 Scala/Akka 中的无限 future ?

python - 在 Eventlet 页面抓取器中维护 session ?

php - mod_rewrite 和 apache clean 超链接

php - 注册日期

google-chrome - 如何从Chrome检查器获取原始XPath?

html - 赢32。 : How to scrape HTML without regular expressions?

php - 如何查看 Linux 服务器中所有命令的控制台历史记录?

java - 需要示例程序来抛出 InterruptedException