如何从网页中提取文本数据?

时间:2013-06-17 20:19:01

标签: php dom curl xpath web-scraping

好的,所以我有以下功能抓住我需要的网页:

function login2($url2) {
   $fp = fopen("cookie.txt", "w");
   fclose($fp);
   $login2 = curl_init();
   curl_setopt($login2, CURLOPT_COOKIEJAR, "cookies.txt");
   curl_setopt($login2, CURLOPT_COOKIEFILE, "cookies.txt");
   curl_setopt($login2, CURLOPT_TIMEOUT, 40000);
   curl_setopt($login2, CURLOPT_RETURNTRANSFER, TRUE);
   curl_setopt($login2, CURLOPT_URL, $url2);
   curl_setopt($login2, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
   curl_setopt($login2, CURLOPT_FOLLOWLOCATION, false);

   [...]

然后我发出这个来使用函数:

echo login2("https://example.com/clue/holes.aspx");

这与我请求的页面相呼应,但我只希望它回显HTML源代码中的特定数据。这是特定的标记:

<h4>
   <label id="cooling percent" for="symbol">*</label>
   4.50
</h4>

我想要的唯一信息是图,在这个具体示例中是 4.50

那么我该如何解决这个问题并让我的cURL抓住它并回显它而不是回显整个页面?

1 个答案:

答案 0 :(得分:0)

您可以使用XPath解决此问题:

$html = login2('https://example.com/clue/holes.aspx');

$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$value = $xpath->query('//label[@id="ctl00_ctl00_PageContainer_MyAccountContainer_symPound"]/following-sibling::text()')->item(0)->nodeValue;

echo $value;