我正在抓取一个页面,但在回复我的内容之前,我想编辑该链接。
这样做的最佳方式是什么?
我目前正在使用Simple HTML DOM Parser:
// create HTML DOM
$html = file_get_html('http://myurl.com');
// remove all image
foreach($html->find('img') as $e)
$e->outertext = '';
foreach($html->find('font') as $e)
$e->outertext = '';
// find all td tags with attribite align=center
foreach($html->find('td[align=left]', 2) as $e)
echo $e->innertext;
其中一个网址中有这一位:
<a target="retailer" href="/cgi-bin/redirect.cgi?name=Storm%20Computers&linkid=2&newurl=http%3A%2F%2Fwww.stormcomputers.com.au%2Fcatalog%2Findex.php%3FcPath%3D38_364&query=sandy%20bridge&uca=208-0-0&kwi=&rpos=2" title="Storm Computers: Click to see item">$149.00</a>
我想将此更改为
<a href="http%3A%2F%2Fwww.stormcomputers.com.au%2Fcatalog%2Findex.php%3FcPath%3D38_364&query=sandy%20bridge&uca=208-0-0&kwi=&rpos=2">$149.00</a>
(即刚刚&amp; newurl =)
感谢。
答案 0 :(得分:1)
我不熟悉你正在使用的解析器,但是这样的东西可能会起作用:
foreach ($html->find('a') as $link) {
$urlparts = parse_url($link->href);
$query = parse_str($urlparts['query'], $params);
if (isset($params['newurl'])) {
$link->href = $params['newurl'];
}
}
答案 1 :(得分:0)
找到与DOM的链接。之后,只需使用explode来分割href字符串。
$split_href = explode('&newurl=', $href);
if(count($split_href) > 1) {
$newurl = $split_href[1];
}
不要以为你需要正则表达式,因为它更慢。
答案 2 :(得分:0)
您可以使用正则表达式查找所有链接,然后使用parse_url()
和parse_str()
重建链接。
例如:
if (preg_match_all('/<a href="(.+)">(.+)<\/a>/i',$html,$matches)) {
// at this point, $matches is a multidimensional array where
// index 0 is an array of all matches of the full pattern,
// and index 1 is an array of all captured links
foreach ($matches[1] as $link) {
// parse the link
if ($parsed_link = parse_url($link)) {
// see the documentation of parse_url() for the various
// array keys produced by calling it; in this case we
// are using the value of 'query' and passing it to
// parse_str() which will break a url query string
// into individual variables; pass $arguments as below
// and it will populate the result into it as an array
parse_str($parsed_link['query'],$arguments);
// now, we want the value of the 'newurl' query parameter
// from the original url
if (isset($arguments['newurl'])) {
$new_url = $arguments['newurl'];
// do whatever you want with $new_url
}
}
}
}
这当然不是唯一的方法,但使用语言功能保持一致性和可读性有一定的价值。我没有在上面的正则表达式中添加太多/任何想法来查找链接,因此它不处理任何特殊情况。如果文档中的链接格式不正确,您可能需要修改该表达式以处理额外的空格,错误的引号等。