网络爬虫如何工作?

Pra*_*ngh 0 php timeout web-crawler

使用一些基本的网站抓取,我正在尝试准备一个数据库进行价格比较,这将减轻用户的搜索体验.现在,我有几个问题:

我应该使用file_get_contents()curl获取所需网页的内容吗?

$link = "http://xyz.com";
$res55 = curl_init($link);
curl_setopt ($res55, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($res55, CURLOPT_FOLLOWLOCATION, true); 
$result = curl_exec($res55);
Run Code Online (Sandbox Code Playgroud)

此外,每次我抓取一个网页时,我都会获取大量链接以便访问下一个网页.这可能需要很长时间(如果您抓取像Ebay这样的大型网站,则需要几天时间).在这种情况下,我的PHP代码将超时.应该采用哪种自动方式来做到这一点?有没有办法阻止PHP通过在服务器上进行更改来超时,还是有其他解决方案?

Dav*_*vid 7

因此,在这种情况下,我的PHP代码将超时,并且不会持续那么长时间.

您是否在驱动您的网页的代码中执行此操作?也就是说,当有人提出请求时,您是否正在爬行并在那里构建响应?如果是这样,那么肯定有更好的方法.

如果您有需要爬网的站点列表,则可以设置预定作业(例如,使用cron)来运行命令行应用程序(而不是网页)来爬网站点.此时,您应该解析您正在寻找的数据并将其存储在数据库中.然后,您的网站只需要指向该数据库.

这是一项改进,原因有两个:

  1. 性能
  2. 代码设计

性能:在像网站这样的请求/响应系统中,您希望最大限度地减少I/O瓶颈.响应应该尽可能少的时间.因此,您希望尽可能避免在线工作.通过将此过程卸载到网站上下文之外的某些内容并使用本地数据库,您可以将一系列外部服务调用(慢速)转换为单个本地数据库调用(更快).

代码设计: 关注点分离.这个设置会使您的代码更加模块化.您有一个负责获取数据的模块和另一个负责显示数据的模块.他们都不应该知道或关心对方如何完成任务.因此,如果您需要更换一个(例如找到更好的刮擦方法),您也不需要更换另一个.