Jea*_*ean 3 php screen-scraping
当我从某些页面抓取内容时,该脚本会提供相对URL.是否可以使用Simple HTML DOM获取绝对URL?
Gum*_*mbo 12
我不认为Simple HTML DOM Parser可以做到这一点.
但你可以自己做.首先,如果没有另外声明,则需要区分作为文档URI的基URI(请参阅BASE
元素).然后获取每个URI引用并应用算法来解析RFC 3986中描述的相对URI(已经存在可以用于PEAR包Net_URL2的类).
所以,使用这两个类,你可以这样做:
$uri = new Net_URL2('http://example.com/foo/bar'); // URI of the resource
$baseURI = $uri;
foreach ($html->find('base[href]') as $elem) {
$baseURI = $uri->resolve($elem->href);
}
foreach ($html->find('*[src]') as $elem) {
$elem->src = $baseURI->resolve($elem->src)->__toString();
}
foreach ($html->find('*[href]') as $elem) {
if (strtoupper($elem->tag) === 'BASE') continue;
$elem->href = $baseURI->resolve($elem->href)->__toString();
}
foreach ($html->find('form[action]') as $elem) {
$elem->action = $baseURI->resolve($elem->action)->__toString();
}
Run Code Online (Sandbox Code Playgroud)
重复该替代含有一个URI像任何其他属性background
,cite
,classid
,codebase
,data
,longdesc
,profile
和usemap
(参见在HTML 4.01属性的索引).