【问题标题】:DOMDocument PHP web scrapingDOMDocument PHP 网页抓取
【发布时间】:2014-05-10 18:41:05
【问题描述】:

我想知道是否有任何方法可以使用 dom 来选择具有动态标签的元素。所有标签都以 link_(some 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,它们是随机的。

【问题讨论】:

    标签: php web-scraping domdocument


    【解决方案1】:

    您可以使用 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
    }
    

    Demo

    【讨论】:

    • @AmalMurali,如果 id 包含大写的 Link,那么您的代码将无法工作 ;)
    【解决方案2】:

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

    Demo

    【讨论】:

    • 请注意:即使属性值不以link开头也会匹配项目,例如:foo_link_555555会匹配。
    • 原来的版本是对的,只是它必须使用=== 0。我编辑了答案,顺便说一句。如果您愿意,请随时回滚。 :P
    • @AmalMurali,是的,我必须回滚,因为我为通用订单而写的。 :) 抱歉 :) 因为 OP 可以从 $tagK 相应地调整 id
    【解决方案3】:

    或者如果你想有更灵活的方式和容易的Web Scrape..我建议你看看 https://github.com/fabpot/goutte 充当包装器。也可以用于点击链接或提交表单..

    我使用 Goutte Class for Web Scraping 制作了一些教程。请随意查看。 http://iapdesign.com/webdev/laravel-4-webdev/superb-web-scraping-tutorials-using-laravel-4/

    【讨论】:

      猜你喜欢
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 2018-10-23
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多