2017-06-16 56 views
0

所以我想放弃这个页面重定向到本身: http://www.asx.com.au/asx/statistics/todayAnns.do废料HTML页面,使用PHP卷曲

看来,我的代码不能得到整个页面的html代码,它的行为非常奇怪。

我试过简单的HTML DOM,但没有任何作品。

$base = "http://www.asx.com.au/asx/statistics/todayAnns.do"; 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); 
    curl_setopt($curl, CURLOPT_HEADER, false); 
    curl_setopt($curl, CURLOPT_URL, $base); 
    curl_setopt($curl, CURLOPT_REFERER, $base); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
    $str = curl_exec($curl); 
    curl_close($curl); 
    echo htmlspecialchars($str); 

这显示了主要是JavaScript和我无法获得页面。我的目标是在网址上取消该中间表。

回答

1

如果您不需要最新的数据,那么您可以使用谷歌网页的缓存版本。

<?php 

use Scraper\Scrape\Crawler\Types\GeneralCrawler; 
use Scraper\Scrape\Extractor\Types\MultipleRowExtractor; 

require_once(__DIR__ . '/../vendor/autoload.php'); 
date_default_timezone_set('UTC'); 

// Create crawler 
$crawler = new GeneralCrawler(
    'http://webcache.googleusercontent.com/search?q=cache:http://www.asx.com.au/asx/statistics/todayAnns.do&num=1&strip=0&vwsrc=0' 
); 

// Setup configuration 
$configuration = new \Scraper\Structure\Configuration(); 
$configuration->setTargetXPath('//div[@class="page"]//table'); 
$configuration->setRowXPath('.//tr'); 
$configuration->setFields(
    [ 
     new \Scraper\Structure\TextField(
      [ 
       'name' => 'Headline', 
       'xpath' => './/td[3]', 
      ] 
     ), 
     new \Scraper\Structure\TextField(
      [ 
       'name' => 'Published', 
       'xpath' => './/td[1]', 
      ] 
     ), 
     new \Scraper\Structure\TextField(
      [ 
       'name' => 'Pages', 
       'xpath' => './/td[4]', 
      ] 
     ), 
     new \Scraper\Structure\AnchorField(
      [ 
       'name'    => 'Link', 
       'xpath'    => './/td[5]/a', 
       'convertRelativeUrl' => false, 
      ] 
     ), 
     new \Scraper\Structure\TextField(
      [ 
       'name' => 'Code', 
       'xpath' => './/text()', 
      ] 
     ), 
    ] 
); 

// Extract data 
$extractor = new MultipleRowExtractor($crawler, $configuration); 
$data = $extractor->extract(); 
print_r($data); 

我能够使用上述代码获得以下数据。

Array 
(
    [0] => Array 
     (
      [Code] => ASX 
      [hash] => 6e16c02b10a10baf739c2613bc87f906 
     ) 

    [1] => Array 
     (
      [Headline] => Initial Director's Interest Notice 
      [Published] => 10:57 AM 
      [Pages] => 1 
      [Link] => /asx/statistics/displayAnnouncement.do?display=pdf&idsId=01868833 
      [Code] => STO 
      [hash] => aa2ea9b1b9b0bc843a4ac41e647319b4 
     ) 

    [2] => Array 
     (
      [Headline] => Becoming a substantial holder 
      [Published] => 10:53 AM 
      [Pages] => 2 
      [Link] => /asx/statistics/displayAnnouncement.do?display=pdf&idsId=01868832 
      [Code] => AKG 
      [hash] => f8ff8dfde597a0fc68284b8957f38758 
     ) 

    [3] => Array 
     (
      [Headline] => LBT Investor Conference Call Business Update 
      [Published] => 10:53 AM 
      [Pages] => 9 
      [Link] => /asx/statistics/displayAnnouncement.do?display=pdf&idsId=01868831 
      [Code] => LBT 
      [hash] => cc78f327f2b421f46036de0fce270a6d 
     ) 

... 

免责声明:我以前https://github.com/rajanrx/php-scrape框架和 我该库的作者。你可以抓住使用简单的卷曲以及使用 的XPath上市above.I数据希望这会有所帮助:)

+0

令人惊叹!这正是我期待的! – SilverSkin

0

CURL只能加载页面的标记。上面的页面使用JavaScript来加载页面后加载数据。您可能需要使用PhantomJS或Splash。

此链接可能帮助:https://stackoverflow.com/a/20554152/3086531

有关读取数据,在服务器端,我们可以使用phantomjs作为内部PHP库。在phantomjs中执行页面,然后使用exec命令将数据转储到php中。

这篇文章有一步一步的过程来做到这一点。 http://shout.setfive.com/2015/03/30/7817/

+0

我希望的是PHP库...我需要这个由服务器采取实时。 – SilverSkin

+0

@SilverSkin您可以在PHP中使用phantomJS库。 本文可能有所帮助:http://shout.setfive.com/2015/03/30/7817/ – bhar1red

+0

我无法在我工作的服务器上安装phantomJS。有没有其他的选择? – SilverSkin