我想知道是否有任何方法使用dom来选择具有动态标签的元素。所有标签都以link_(某个id)开头。
的例子:
<tr id="link_111111">something in here...</tr>
<tr id="link_222222">something in here...</tr>
<tr id="link_333333">something in here...</tr>
<tr id="link_444444">something in here...</tr>
<tr id="link_555555">something in here...</tr>
我想知道我是否可以抓取所有具有link_ id的tr,因为我没有特定的id,它们是随机的
您可以使用XPath表达式来实现这一点:
//tr[starts-with(@id, "link")]
的例子:
$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('///tr[starts-with(@id, "link")]');
foreach ($nodes as $node) {
// Do whatever
}
使用一些字符串函数的DOM方式…
$dom = new DOMDocument;
$dom->loadHTML($html); $tagK = 'link_';
foreach ($dom->getElementsByTagName('tr') as $tag) {
if (substr(strtolower($tag->getAttribute('id')),0,strlen($tagK))===$tagK) {
echo $tag->getAttribute('id').PHP_EOL;
}
}
或者如果你想有更灵活的方式和容易的Web抓取…我建议你看一下https://github.com/fabpot/goutte作为包装器。也可以用来点击链接或提交表单。
我做了一些教程使用Goutte类网络抓取。请随意查看。http://iapdesign.com/webdev/laravel-4-webdev/superb-web-scraping-tutorials-using-laravel-4/