解析b(粗体)标记之间的文本

时间:2011-03-16 04:32:45

标签: php parsing

我正在尝试登录我的hulkshare帐户,然后返回我的帐户信息。 curl登录是workfine,但我认为我的解析工作正常,因为当我使用var_dump($ tag)时它返回数组(0){}

我正在尝试解析帐户中的点数,这是表格中位于粗体标记<之间的代码。 b> 6302.00下载< / B个

<div id="content-wrap">
<div id="wrap-in">
<br>
<table>
<tbody><tr><td>Username:</td><td><b></b></td><td></td></tr>
<tr><td>You have collected:</td><td><b>6302.00 downloads</b></td><td><input type="button" class="btn2" value="Convert downloads" onclick="document.location='?op=convert_points'"></td></tr>
<tr><td>Used space:</td><td><b>354.0 of 200000 Mb</b></td></tr>
<tr><td>My published files link:</td><td colspan="2"><a href="" target="_blank"></a></td></tr>
<tr><td>My affiliate link:</td><td colspan="2"><a href=""></a><br><small>New user will get 10 downloads</small></td></tr>
</tbody></table>

$cookiefile = '/temp/cookies.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.hulkshare.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'op=login&redirect=&login=XXXXXX&password=XXXXX');
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, 'http://hulkshare.com/?op=my_account');
$contents = curl_exec($ch);
curl_close($ch);

//parse
libxml_use_internal_errors(TRUE);
$dom = new DOMDocument();
$dom->loadHTML($contents);
$xml = simplexml_import_dom($dom);
libxml_use_internal_errors(FALSE);
$tag = $xml->xpath("/table/tbody/tr/tb/b");

var_dump($tag);

1 个答案:

答案 0 :(得分:0)

如果您想从页面中提取多个内容,那么建议使用像phpQuery或QueryPath这样的库,这样可以简化:

foreach (qp($html)->find("b") as $b)  print $b->text();

但在你的情况下,你应该直接进行文本提取。你有一个非常清晰的模式和一个不太可能改变很多的页面。使用正则表达式。 HTML标签是很好的锚点,但实际上你只需要在“下载”之前查找小数:

preg_match('#<b>([\d.]+) downloads#i', $html, $match);
$downloads = $match[1];