разбирать текст между тегами b (жирным шрифтом) - PullRequest
0 голосов
/ 16 марта 2011

Я пытаюсь войти в свою учетную запись hulkshare, а затем вернуть данные своей учетной записи. Вход в систему curl является рабочим, но я не думаю, что мой анализ работает, потому что когда я использую var_dump ($ tag), он возвращает array (0) {}

Я пытаюсь разобрать точки в моем аккаунте, и вот код таблицы, расположенной между жирным тегом 6302,00 загрузки

<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 голосов
/ 16 марта 2011

Если есть несколько вещей, которые вы хотите извлечь со страницы, то желательно использовать библиотеку, такую ​​как phpQuery или QueryPath, которая позволяет значительно упростить:

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

Но в вашем случае вы должны идти прямо к извлечению текста. У вас очень четкий шаблон и страница, которая вряд ли сильно изменится. Используйте регулярное выражение. HTML-тэги делают хорошие привязки, но на самом деле вам нужно было только искать десятичные дроби, прежде чем «скачать»:

preg_match('#<b>([\d.]+) downloads#i', $html, $match);
$downloads = $match[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...