定期抓取HTML


Periodic HTML crawl

我正在考虑开发一个网站,服务器将定期抓取另一个网站,以便收集数据库中某些条目的内容。我的问题如下……

  1. 如何让服务器及时执行抓取?
  2. 你能让它执行php或者你用什么语言来执行爬行吗?
  3. 有什么好的api来做到这一点吗?
  4. 我应该考虑建立自己的吗?如果是这样,一些关于如何开始的建议将是伟大的

基本上,我想做的事情,是让服务器执行一个脚本(假设每小时),它查找数据库中尚未在另一个站点上抓取的所有条目。它将从这些条目中获取一定的值,并使用它们来抓取另一个站点……它可能会请求这样一个url: www.anothersite.com/images?q=entryindb .

我想让它做的是抓取HTML,返回一个数组,并记录数据库中的值。这是我想让爬虫查找的

Find all instances of 
<img> inside <a> inside <td> inside <tr> inside <tbody> inside <table> inside <div id='content'>
Return array of the img.src from all instances.

这样的事情可能吗?-如果是的话,我该怎么做呢?-请记住,web开发智慧,我迄今为止唯一的经验(服务器端)是与PHP。

UPDATE:我将使用基于linux的服务器,所以我想时间脚本是我应该怎么做?

  1. 可以使用cron
  2. 是的,你可以运行PHP脚本
  3. 没有一个完整的爬行API (AFAIK),但是有一些类可以帮助你解析和遍历DOM文档。
  4. 如果你遵循以下步骤,你可以在几分钟内设置一些东西

1。你需要phpQuery使你的生活更容易使用这个

从这里下载phpQuery-0.9.5.386-onefile.zip

2。PHP文件应该是这样的

require_once 'phpQuery-onefile.php';
$html = file_get_contents('http://www.othersite.com');
phpQuery::newDocumentXHTML($html);
$elements = pq('#content table tbody tr td a img');
$images = array();
foreach($elements as $img){
    $images[] = pq($img)->attr('src');
}

$images数组将包含所有图像源的列表。

3。将上述代码保存到一个文件中,输入crawler.php

然后在cron选项卡中,如果您希望爬虫每小时运行一次,您可以这样做:

0 * * * * php /path/to/your/crawler.php 
  1. 你可以使用cron假设你的主机在Linux上。
  2. 没有,我知道,但我从来没有看过。
  3. 这取决于你。请看下面的文档,我觉得可能对你有用。

注意:事先与你想要抓取的站点的T+ c联系,看看他们是否允许。

http://php.net/file_get_contents

http://php.net/curl

http://php.net/domdocument

您可以使用cURL (屏幕抓取)获取HTML,并使用php的 DOMDocument 编写HTML解析器。如果HTML是混乱的,你不能用DOMDocument直接读取它,但你可以"清洗它",例如HTMLPurifier,它接受无效的HTML并吐出所有有效的。

要启动该进程,让您的php脚本能够通过CLI(命令行,与用于浏览器的web服务器相反)运行。

在有了这个脚本之后,设置一个cronjob(如果您有Linux服务器),以便在您想要的任何时间段运行脚本。

用Google搜索黑体字

我将使用cron。然而,PHP可能不是最好的选择,除非您已经编写了脚本。Python和BeautifulSoup可能最适合抓取url。