Laravel 中的网络爬虫

Posted

技术标签:

【中文标题】Laravel 中的网络爬虫【英文标题】:Web Crawler in Laravel 【发布时间】:2018-08-08 22:56:09 【问题描述】:

我有一个 android 应用程序,允许用户搜索某些内容,该应用程序将句子分解为单词并爬取网站列表,试图找到包含这些特定单词的页面。现在我将它作为一项工作并对其进行排队,我认为这可能适用于 1 个用户,但是我担心我的应用程序何时增长并且我有 1000-50000 个用户同时进行搜索,我显然不能为此使用队列没有了。

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

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

【问题讨论】:

您要搜索的列表中有多少个网站?而在每个网站中你只是抓取主页或里面的一些页面? 3-5 个网站,我每个网站最多抓取 10 个页面。 【参考方案1】:

我不太确定这是否是您想要得到的答案。这只是我的看法,希望可以提供另一种方法来满足您的需求。

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

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

好大啊。 IMO,而不是根据用户词查询请求排队。您需要排队以抓取网站页面并将其保存到数据库/缓存中。在您的情况下,有 3-5 个网站,每个网站有 10 个页面。可以说它有 500 页。每个用户队列实际上都会执行相同的爬取过程对吗?

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

【讨论】:

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

01-网络爬虫的Headers须知

网络爬虫

网络爬虫的基本原理

Python中的分布式计算 - 网络爬虫

Python爬虫编程思想(14):网络爬虫中的异常处理

网络爬虫到底违法吗?转行做爬虫可行吗?