Home >Backend Development >PHP Tutorial >利用curl抓取网页数据,phantomjs..请神人解

利用curl抓取网页数据,phantomjs..请神人解

WBOY
WBOYOriginal
2016-06-06 20:45:231321browse

小弟昨天有发文请教,有很多的神人给我小弟很大的帮忙,目前只剩下一小块的数据未抓到。

有大大说用 phantomjs来抓取html
目前的js如
var page = require('webpage').create();
var url = 'http://www.cbssports.com/mlb/gametracker/live/MLB_20140528_CLE@CHW';

<code>page.open(url, function (status) {
var js = page.evaluate(function () {
return document;
});
console.log(js.all[0].outerHTML);
phantom.exit();
});
</code>

误错,显示不出正确的hmtl
另 phontomjs是一个执行档,我要怎么每秒让他自动执行,用 php ? 因为在php 里我目前只能用
exec("start d:\phantomjs script.js ")
让它自动产生本文档,然后针对本文档作解析,但一直没有办法执行,求神人解

2014 05 23 更新

之前在网站上有提出,有抓到几个数据。
先看一下我的程序如下:
$url ="http://www.cbssports.com/mlb/gametracker/live/MLB_20140529_SF@STL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
$data = curl_exec($ch);
preg_match_all('/(.?)/is',$data,$teamCity);
preg_match_all('/(.
?)/is',$data,$teamName);…….以下为正规化

未抓出的资料部份如下:(红字为抓不出来的)(以下只是部份)

<div class="gcTeamStats" lineup><table class="data condensed stacked" width="100%">


<p>里面会有一个 </p>
<tr class="”row1">
<p>或是</p>

<p>

</p>
<p>div class=”batter-pitcher fleft”></p>

<p>

</p>
<p>table>里面的 </p>
</tr>
<tr>的资料都抓不出来

<p>重点在于,部份的数据,不管你用什么浏览器的「另存新檔」 save as 或是 「检视原始码」,都看不到上列的这数据。 而 div class=”batter-pitcher fleft” 这部份的资料目前已知是 JS  的 batter_ingame_stats function是跑「进行比赛中的」</p>

<p>而另一个function  function() { CBSi.app.BaseRunners = function(args  则是跑 「谁在垒上」右下角那个 「球场的图标」的数据 ,目前只剩这几个部份抓不出。</p>

<p>很多神人大大说,「就抓js呀」,但是,就问不到要如何抓。</p>

<p>跪求各位大大给个方向。</p>

<p>这一个话题的 讨论在:http://segmentfault.com/q/1010000000522277</p>

<p>目前直播赛事:http://www.cbssports.com/mlb/gametracker/live/MLB_20140529_SF@STL</p>
</tr>

                            
                        


                                                                                                                        
                     <h2>回复内容:</h2>
                      
                                                            
<p>小弟昨天有发文请教,有很多的神人给我小弟很大的帮忙,目前只剩下一小块的数据未抓到。</p>

<p>有大大说用 phantomjs来抓取html<br>
目前的js如<br>
    var page = require('webpage').create();<br>
    var url = 'http://www.cbssports.com/mlb/gametracker/live/MLB_20140528_CLE@CHW';</p>

<pre class="brush:php;toolbar:false">&lt;code&gt;page.open(url, function (status) {
var js = page.evaluate(function () {
return document;
});
console.log(js.all[0].outerHTML);
phantom.exit();
});
&lt;/code&gt;</pre>

<p>误错,显示不出正确的hmtl<br>
另 phontomjs是一个执行档,我要怎么每秒让他自动执行,用 php ? 因为在php 里我目前只能用<br>
    exec("start d:\phantomjs script.js ")<br>
让它自动产生本文档,然后针对本文档作解析,但一直没有办法执行,求神人解</p>

<p>2014 05 23 更新</p>

<p>之前在网站上有提出,有抓到几个数据。<br>
先看一下我的程序如下:<br>
    $url ="http://www.cbssports.com/mlb/gametracker/live/MLB_20140529_SF@STL";<br>
    $ch = curl_init();<br>
    curl_setopt($ch, CURLOPT_HEADER, 0);<br>
    curl_setopt($ch, CURLOPT_URL, $url);<br>
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);<br>
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22");<br>
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,1);<br>
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);<br>
    $data = curl_exec($ch);<br>
    preg_match_all('/<span class="teamLocation">(.<em>?)/is',$data,$teamCity);<br>
    preg_match_all('/<span class="teamNickname">(.</span></em>?)/is',$data,$teamName);…….以下为正规化</span></p>

<p>未抓出的资料部份如下:(红字为抓不出来的)(以下只是部份)</p>

<pre class="brush:php;toolbar:false">&lt;code&gt;&lt;div class=&quot;gcTeamStats&quot; lineup&gt;&lt;table class=&quot;data condensed stacked&quot; width=&quot;100%&quot;&gt;


&lt;p&gt;里面会有一个 &lt;/p&gt;
&lt;tr class=&quot;”row1&quot;&gt;
&lt;p&gt;或是&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;div class=”batter-pitcher fleft”&gt;&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;table&gt;里面的 &lt;/p&gt;
&lt;/tr&gt;
&lt;tr&gt;的资料都抓不出来

&lt;p&gt;重点在于,部份的数据,不管你用什么浏览器的「另存新檔」 save as 或是 「检视原始码」,都看不到上列的这数据。 而 div class=”batter-pitcher fleft” 这部份的资料目前已知是 JS  的 batter_ingame_stats function是跑「进行比赛中的」&lt;/p&gt;

&lt;p&gt;而另一个function  function() { CBSi.app.BaseRunners = function(args  则是跑 「谁在垒上」右下角那个 「球场的图标」的数据 ,目前只剩这几个部份抓不出。&lt;/p&gt;

&lt;p&gt;很多神人大大说,「就抓js呀」,但是,就问不到要如何抓。&lt;/p&gt;

&lt;p&gt;跪求各位大大给个方向。&lt;/p&gt;

&lt;p&gt;这一个话题的 讨论在:http://segmentfault.com/q/1010000000522277&lt;/p&gt;

&lt;p&gt;目前直播赛事:http://www.cbssports.com/mlb/gametracker/live/MLB_20140529_SF@STL&lt;/p&gt;
&lt;/tr&gt;

                            
                        
            &lt;p class=&quot;answer fmt&quot; data-id=&quot;1020000000523721&quot;&gt;
                                    
&lt;/p&gt;
&lt;p&gt;这么写&lt;/p&gt;

&lt;pre class=&quot;brush:php;toolbar:false&quot;&gt;&lt;code&gt;var page = require('webpage').create();
page.open('http://segmentfault.com/', function(status) {
  var ua = page.evaluate(function() {
    return document.body.outerHTML;
  });
  console.log(ua);
  phantom.exit();
});
&lt;/code&gt;</pre>

                            </table></div>
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:怎么防止批量注册 批量登录。Next article:curl 分页获取十几万的数据 服务器超时,如何解决?

Related articles

See more