使用Curl和php一次不能超过90页?

时间:2016-10-03 09:25:35

标签: php curl web-scraping

我为我的一个客户创建了一个scrapper,刮刀主要用于抓取一些合作伙伴网站并获取数据。刮刀工作效果非常好,直到90页,一旦达到90页,就会一次又一次地刮掉同一页。我真的很困惑,为什么会发生这种情况。

有人可以帮我解决这个问题吗?

function getFlightCharges() {
$requestHeaders = requestHeaderProperties ();
$sql = 'select * from F_charge where enabled = 0';
$details = DatabaseHandler::GetAll ( $sql );
foreach ( $details as $detail ) {
    $link = $detail ['product_link'];
    $id = $detail ['id'];
    $url = $link;
    $referer = 'Referer: example.com/';
    $requestHeaders [] = $referer;
    $html = getHTMLContentFromURL ( $url, $requestHeaders );
    foreach ( $html->find ( '.no-touch' ) as $e ) {
        foreach ( $e->find ( '.content-well' ) as $e1 ) {
            foreach ( $e1->find ( '.price' ) as $prices ) {
                $pricee = strip_tags ( $prices->innertext );
            }
            foreach ( $e1->find ( '.article-body' ) as $desc ) {
                $description = strip_tags ( $desc->innertext );
            }
        }
    }
    $sql = "INSERT INTO price_data(product_price) VALUES (:product_price)";
    $params = array (':product_price' => $price);
    DatabaseHandler::Execute ( $sql, $params );     
}

DatabaseHandler::Close ();
}

所以这里是获取合作伙伴网站链接的功能,获取当前价格并更新我的数据库。它在第89页或第90页之前一直很好用。但不久之后它就停留在第90页并继续在数据库中进行抓取和更新

1 个答案:

答案 0 :(得分:0)

  

但不久之后它就停留在第90页并继续在数据库中进行抓取和更新

基本上每个php脚本都是limited with a time it runs。某些服务器将其限制为30秒。因此,如果您处理90页,则可能会超出此脚本运行时限。

您的解决方案是:

  1. 限制每个脚本运行的页码访问次数。
  2. 使cron命令按计划执行脚本。
  3. 由于您在不同时间调用脚本,因此应将时间标记添加到数据库表中,以节省上次更新记录的时间标记。