屏幕刮痧

时间:2010-05-17 05:33:36

标签: php screen screen-scraping

您好我正在尝试在我的网站上实施屏幕抓取方案,并且到目前为止已经设置了以下内容。我最终要做的是替换$ results变量中包含“ResultsDetails.aspx?”的所有链接。到“结果刮 - 细节/”然后再输出。有人能指出我正确的方向吗?

<?php 
$url = "http://mysite:90/Testing/label/stuff/ResultsIndex.aspx";
$raw = file_get_contents($url);
$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B");
$content = str_replace($newlines, "", html_entity_decode($raw));
$start = strpos($content,"<div id='pageBack'");
$end = strpos($content,'</body>',$start) + 6;
$results = substr($content,$start,$end-$start);
$pattern = 'ResultsDetails.aspx?';
$replacement = 'results-scrape-details/';
preg_replace($pattern, $replacement, $results);
echo $results;

2 个答案:

答案 0 :(得分:10)

使用像PHP Simple HTML DOM这样的DOM工具。有了它,您可以使用Jqueryish语法找到您正在寻找的所有链接。

// Create DOM object from HTML source
$dom = file_get_html('http://www.domain.com/path/to/page');
// Iterate all matching links
foreach ($dom->find('a[href^=ResultsDetails.aspx') as $node) {
    // Replace href attribute value
    $node->href = 'results-scrape-detail/';
}
// Output modified DOM
echo $dom->outertext;

答案 1 :(得分:0)

? char在正则表达式中具有特殊含义 - 要么转义它并使用相同的代码,要么用str_ireplace()替换preg_replace(我建议采用后一种方法,因为它也更有效)。

(并且html_entity_decode调用真的应该在吗?)

下进行。