PHP Web抓取Javascript生成的内容

use*_*025 1 html php web-scraping

我在项目中遇到了一个刮擦任务.

我想从$ html中的链接中获取数据,tr和td的所有表内容,这里我试图抓住链接但它只显示javascript:self.close()

<?php
include("simple_html_dom.php");

$html = file_get_html('http://www.areacodelocations.info/allcities.php?ac=201');

 foreach($html->find('a') as $element)
   echo $element->href . '<br>'; 


  ?>
Run Code Online (Sandbox Code Playgroud)

LSe*_*rni 7

通常,这种页面会加载一堆Javascript(jQuery等),然后构建接口并检索要从数据源显示的数据.

因此,您需要做的是使用Firebug等工具在Firefox或类似页面中打开该页面,以查看实际执行的请求.如果幸运的话,您可以直接在XHR请求列表中找到它.在这种情况下:

http://www.govliquidation.com/json/buyer_ux/salescalendar.js
Run Code Online (Sandbox Code Playgroud)

请注意,此行为可能会侵犯某些许可或使用条款.在继续之前,请与网站管理员/数据源/版权所有者明确这一点:检测并禁止这种抓取非常容易,并且识别您的情况可能只是略微减少.

无论如何,如果你在PHP中发出相同的调用,你可以使用非常简单的代码直接刮取数据(假设没有会话/身份验证问题,就像这里的情况一样):

<?php

    $url = "http://www.govliquidation.com/json/buyer_ux/salescalendar.js";

    $json = file_get_contents($url);

    $data = json_decode($json);

?>
Run Code Online (Sandbox Code Playgroud)

这将生成一个数据对象,您可以通过简单循环检查并转换为CSV.

stdClass Object
(
    [result] => stdClass Object
        (
            [events] => Array
                (
                    [0] => stdClass Object
                        (
                            [yahoo_dur] => 11300
                            [closing_today] => 0
                            [language_code] => en
                            [mixed_id] => 9297
                            [event_id] => 9297
                            [close_meridian] => PM
                            [commercial_sale_flag] => 0
                            [close_time] => 01/06/2014
                            [award_time_unixtime] => 1389070800
                            [category] => Tires, Parts & Components
                            [open_time_unixtime] => 1388638800
                            [yahoo_date] => 20140102T000000Z
                            [open_time] => 01/02/2014
                            [event_close_time] => 2014-01-06 17:00:00
                            [display_event_id] => 9297
                            [type_code] => X3
                            [title] => Truck Drive Axles @ Killeen, TX
                            [special_flag] => 1
                            [demil_flag] => 0
                            [google_close] => 20140106
                            [event_open_time] => 2014-01-02 00:00:00
                            [google_open] => 20140102
                            [third_party_url] =>
                            [bid_package_flag] => 0
                            [is_open] => 1
                            [fda_count] => 0
                            [close_time_unixtime] => 1389045600
Run Code Online (Sandbox Code Playgroud)

你检索$data->result->events,使用fputcsv()转换为数组形式的项目,鲍勃是你的叔叔.