定期HTML抓取

时间:2011-09-14 19:09:05

标签: php html parsing web-crawler

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

  1. 如何让服务器及时执行抓取?
  2. 你可以让它执行php或你用什么语言来执行爬行?
  3. 有没有好的API可以做到这一点?
  4. 我应该考虑建立自己的吗?如果是这样,关于如何开始的一些建议会很棒
  5. 基本上,我想要做的事情是服务器执行一个脚本(比如每小时),它会查找数据库中尚未在另一个站点上爬行的所有条目。这些条目需要一定的价值,并会使用它们抓取其他网站...它可能会请求这样的网址: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。

    更新:我将使用基于Linux的服务器,所以我想chron-scripting是我应该怎么做的?

4 个答案:

答案 0 :(得分:3)

  1. 您可以使用cron
  2. 是的,您可以运行PHP脚本
  3. 没有什么比完整的抓取API(AFAIK)更好,但有些类可以帮助您解析和遍历DOM文档。
  4. 如果您按照以下步骤
  5. ,您可以在几分钟内设置一些内容

    1。使用此

    ,您需要phpQuery才能让您的生活更轻松

    here下载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 :(得分:2)

  1. 假设你在Linux上托管,你可以使用cron。
  2. 是的,你可以用它来运行一些PHP。
  3. 我不知道,但我从未看过。
  4. 这取决于你。请参阅我认为可能对您有用的以下文档。
  5. 注意:请先检查您想要刮去的网站的T + C,看看他们是否允许。

    http://php.net/file_get_contents

    http://php.net/curl

    http://php.net/domdocument

答案 2 :(得分:2)

您可以使用cURL screenscraping )获取HTML,并使用php的DOMDocument编写HTML解析器。如果HTML很混乱,则无法直接使用DOMDocument来阅读,但您可以使用例如HTMLPurifier“清除它”,它会使用无效的HTML并将其全部有效。

要启动此过程,请使您的php脚本能够通过 CLI (命令行,与当然用于浏览器的网络服务器相反)运行。

获得此脚本后,设置 cronjob (如果您有Linux服务器),以便在您想要的任何时间内运行脚本。

谷歌用粗体字说。

答案 3 :(得分:0)

我会用cron来做这个。但是,除非您已编写脚本,否则PHP可能不是最佳选择。 Python和BeautifulSoup可能最适合刮取URL。