2015-11-08 83 views
1

我一直在玩弄卷曲和XPath对一些webscraping。我终于得到我的代码运行,但在尝试另一边后停止。我唯一改变的是路径和网址。我是全新的,并且一直在为此工作一周。因此,如果这是一个明显的失败,请耐心等待。Xpath查询将行不通

我的代码是:

<?php 
 
/*----Connection to Database----*/ 
 
include('wp-config.php'); 
 
mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); 
 
mysql_select_db("db"); 
 

 
/*----US Dollar Index----*/ 
 
$url = "http://www.wsj.com/mdc/public/page/2_3023-fut_index-futures.html"; 
 
$userAgent = 'Googlebot/2.1 (http://www.googlebot.com/bot.html)'; 
 

 
// Make the cURL request 
 
$ch = curl_init(); 
 
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); 
 
curl_setopt($ch, CURLOPT_URL,$url); 
 
curl_setopt($ch, CURLOPT_FAILONERROR, true); 
 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); 
 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
 
$html= curl_exec($ch); 
 
if (!$html) { 
 
\t echo "<br />cURL error number:" .curl_errno($ch); 
 
\t echo "<br />cURL error:" . curl_error($ch); 
 
\t exit; 
 
} 
 

 
// Parse the html into a DOMDocument 
 
$dom = new DOMDocument(); 
 
@$dom->loadHTML($html); 
 

 
// Grab all the MONTH on the page 
 
$xpath = new DOMXPath($dom); 
 

 
$data = $xpath->query("/html/body/div[6]/div[3]/div/table[9]/tbody/tr[position() >= 3 and position() <=6]"); 
 

 
//[position() >= 1 and position() <=13] 
 

 
// Searching for data 
 
$values = array(); 
 
foreach($data as $row) { 
 
\t $values[] = $row->nodeValue; 
 
} 
 

 
print_r($values); 
 

 
?> 
 
</body> 
 
</html>

+1

乳清你说停止,这是否意味着超时的脚本,返回任何内容,有错误....等等? – Rasclatt

+0

抱歉没有提供该信息。该脚本没有超时或返回错误。唯一显示的是“Array()” –

+0

你是什么意思你“改变路径和网址”?你为什么改变它?你拥有的xpath只对你的代码中的url有效...... – drkthng

回答

0

我解决我的问题这是路径。萤火虫给我的路不是正确的网站。为什么我不知道。

1

有几件事情浮现在脑海中。你有没有检查传入的HTML是什么样的,它有不属于那里的东西吗?你正在寻找的xpath是否正确?至少在这个旧的答案似乎XPath的范围应在形式上给予

[position() >= 100 and not(position() > 200)]

https://stackoverflow.com/a/3355022/5526468

编辑:现在,我想起来了,有可能,如果有小于实际html中所需的项目数量,也许xpath会将范围表达式赋值为false,因此在查询中找不到任何值?

+0

我在firefox中使用firebug从浏览器直接复制xpath。所以我不知道我能否搞错?我试着用你的建议到xpath,它也不会工作。我仍然认为它说与我的一样,但不知道:)我已经尝试了不同类型的XPath,在那里我使用一个项目的直接路径而不是范围,它仍然无法正常工作。 –

+0

我试过你的代码,它似乎无法分析它正在接收的html。在$ HTML变量被充满某种HTML的(或至少是HTML的前瞻性数据),但是当你试图用$ dom-> loadHTML($ HTML)加载它,在$ DOM将无法成功解析它。我认为你的原始代码和xpath查询是正确的,但问题出现在你试图解析的网页中。也许Firefox/Firebug会即时修复html,因此使用Firefox时可以获得正确的Xpath。 – Oskari3000

+0

好吧,听起来像它可能是问题。我能做些什么来解决这个问题,所以我得到正确的HTML代码进入我的变量? –