domdocumentphp网页抓取

domdocumentphp网页抓取,php,web-scraping,domdocument,Php,Web Scraping,Domdocument,我想知道是否有任何方法可以使用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

我想知道是否有任何方法可以使用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>
$dom = new DOMDocument;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('///tr[starts-with(@id, "link")]');

foreach ($nodes as $node) {
    // Do whatever
}
这里有些东西。。。
这里有些东西。。。
这里有些东西。。。
这里有些东西。。。
这里有些东西。。。

我想知道是否可以获取所有带有link_u的id的tr,因为我没有特定的id,它们是随机的。

您可以使用XPath表达式来实现这一点:

//tr[starts-with(@id, "link")]
例如:

<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>
$dom = new DOMDocument;
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('///tr[starts-with(@id, "link")]');

foreach ($nodes as $node) {
    // Do whatever
}

您可以使用XPath表达式来实现这一点:

//tr[starts-with(@id, "link")]
例如:

<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>
$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; 
    }
}

使用一些字符串函数的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刮取。。我建议你看一看 它们充当包装器。也可用于单击链接或提交表单

我使用Goutte类制作了一些网页抓取教程。。请随意查看。

或者如果您希望有更灵活的方式和更容易的Web刮取。。我建议你看一看 它们充当包装器。也可用于单击链接或提交表单

我使用Goutte类制作了一些网页抓取教程。。请随意查看。

请注意:即使属性值不是以
链接开始,这也会匹配项,例如:
foo\u link\u555555
将匹配。原始版本是正确的,只是它必须使用
==0
。我编辑了答案,顺便说一句。如果您愿意,请随意回滚:P@AmalMurali,是的,我必须回滚,就像我为广义顺序编写的一样。:)抱歉:)由于OP可以根据
$tagK
相应地调整id,请注意:即使属性值不是以
链接开始,这也会匹配项,例如:
foo\u link\u555555
将匹配。原始版本是正确的,只是它必须改用
==0
。我编辑了答案,顺便说一句。如果您愿意,请随意回滚:P@AmalMurali,是的,我必须回滚,就像我为广义顺序编写的一样。:)抱歉:)由于OP可以根据
$tagK
@AmalMurali相应地调整id,如果id包含大写的
链接,则您的代码将无法工作;)@AmalMurali,如果id包含大写的
链接
,那么您的代码将无法工作;)