Laravel的Web爬虫

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel的Web爬虫相关的知识,希望对你有一定的参考价值。

我有一个android应用程序,允许用户搜索的东西,应用程序将句子分成单词,并爬过一个网站列表,试图找到具有这些特定单词的页面。现在我把它作为一个工作并排队,我认为可能适用于1个用户但是我担心我的应用程序增长时我有1000-50000个用户同时进行搜索,我显然不能使用队列了。

这样做的最佳方法是什么?我已经在php中对多线程进行了一些研究,但是我想要一些实际的例子,因为我对这个概念并不熟悉。

简单地说,我在这里要求的是如何在laravel上同时执行1000-50000个作业。请注意,每个作业都包含搜索相当多网站以搜索数据的代码。

答案

我不确定这是否是你想要获得的答案。这只是我的意见,我希望能够提供另一种方法来满足您的需求。

拥有1000-50000的concurent过程非常大。它还需要更多的服务器资源。假设1个用户队列(用于抓取每个单词,在网站的每个页面中)需要1MB内存。或者可能是500kB。

500kB * 500000 = 250,000,000 KB = 243,190.66 MB = 236.57 GB

相当大啊。 IMO,而不是基于用户词查询请求排队。您需要的是排队爬网站页面并将其保存到数据库/缓存。在您的情况下3-5个网站,每个网站10页。让我们说它500页。每个用户队列实际上都会做同样的抓取过程吗?

因此,每个站点每页只需执行一次爬网(可能每天一次)。在下一个用户查询请求中,您不需要重新抓取它,因为它已经完成。因此,用户查询结果将仅针对您已保存的数据库。我认为,它会削减更多的进程botteneck,也会使搜索结果更快。

以上是关于Laravel的Web爬虫的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

laravel特殊功能代码片段集合

需要一种有效的方法来避免使用 Laravel 5 重复代码片段

Laravel:如何在控制器的几种方法中重用代码片段

web代码片段

Laravel 5.8 有条件地插入 sql 片段