我想从几百个HTML页面中“抓取”几百个网址。
模式:
<h2><a href="http://www.the.url.might.be.long/urls.asp?urlid=1" target="_blank">The Website</a></h2>
答案 0 :(得分:3)
以下是如何使用原生DOM扩展正确完成
// GET file
$doc = new DOMDocument;
$doc->loadHtmlFile('http://example.com/');
// Run XPath to fetch all href attributes from a elements
$xpath = new DOMXPath($doc);
$links = $xpath->query('//a/@href');
// collect href attribute values from all DomAttr in array
$urls = array();
foreach($links as $link) {
$urls[] = $link->value;
}
print_r($urls);
请注意,上面也会找到相关链接。如果您不希望那些将Xpath调整为
'//a/@href[starts-with(., "http")]'
请注意,使用正则表达式匹配HTML是疯狂之路。正则表达式匹配字符串模式,对HTML元素和属性一无所知。 DOM确实如此,这就是为什么你应该更喜欢它而不是匹配来自Markup的超级字符串模式的每种情况。
答案 1 :(得分:1)
'/http:\/\/[^\/]+/[^.]+\.asp\?urlid=\d+/'
但最好使用HTML Parser,这是PHP Simple HTML DOM
的示例$html = file_get_html('http://www.google.com/');
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';