一次收集多个网站的数据

Posted

技术标签:

【中文标题】一次收集多个网站的数据【英文标题】:Colect data for multiples websites at once 【发布时间】:2021-11-26 18:52:54 【问题描述】:

有没有一种方法可以一次收集 15000 个不同 url 的信息?

例如:

我有网站https://example.com/50,我想收集信息 3 特定跨度 id(每个网站都一样) 我想要的值是 data-price

的值
<span id="lowest-1" data-price="800">800</span>
<span id="lowest-2" data-price="900">900</span>
<span id="lowest-3" data-price="700">700</span>

我想收集https://example.com/1到https://example.com/15000的数据

注意: 我无权访问数据库,只有网页

【问题讨论】:

“一次”(标准)是什么意思 php 对多线程没有任何意义,因此您必须一个接一个地发出请求。但我确定你可以使用一种允许异步调用的语言 不需要一次,而是像在 5 到 15 分钟的空间内收集 15000 个不同 url 的 15000 个值并在 3 小时后再次重复 问题是加载所有带有图像的网页,一切都会使用大量资源。我只想加载所需的信息 【参考方案1】:

好的,有两个问题:

第一:PHP不能一次建立15000个连接,必须一个一个来做 秒:从远程网站获取内容需要相同的时间,通常是半秒

粗略计算:您需要 7500 秒(2 小时)。

强制 PHP 执行这么长时间是个坏主意。

将链接数组拆分为块,例如块中的 30 个链接, 并使用 CRON 系统定期执行您的工作脚本以获取数据。 替代方法可以是对您的工作人员进行 AJAX 调用,当它收到响应时,javascript 会自动触发下一次 AJAX 调用,但您需要保持浏览器打开。

Worker 会将收集到的数据存储到数据库中,您的前端会从该表中读取数据。 Worker 独立于前端工作,因此前端不知道 Worker 在执行循环中的位置,它只显示最后已知的数据。

这是网络爬虫(蜘蛛)的工作方式。

您是这 1500 个网站的所有者吗?如果你不是,你可以在那里建立一些快速访问的端点来收集数据(RSS、REST、..)。这可以显着减少抓取时间。

【讨论】:

我不是该网站的所有者。这听起来不是最简单的方法,我无法加载整页来收集一点信息。除了 PHP 还有其他方法吗? 使用 PHP,您可以轻松检索页面的 html,无需图像和脚本。但是,是的,整页。没有办法只获取页面的一部分。 用BeautifulSoup库用python好不好?

以上是关于一次收集多个网站的数据的主要内容,如果未能解决你的问题,请参考以下文章

感谢网页使用python或pyspark抓取多个页面

网站统计中的数据收集原理及实现

006-网站统计中的数据收集原理及实现

使用nginx lua实现网站统计中的数据收集

收集和分析网站用户行为数据收集和分析方法

使用nginx lua实现网站统计中的数据收集