码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PHP——爬虫DOM解析


    背景

    php在爬取网页信息的时候,有一些函数可以使用。
    这里介绍两个

    • DOMDocument
    • DOMXPath
    代码解析
    
    
      
      
        Example
      
      
        

    Hello World!

    this is a test 中文

    Link

    Link

    Link Link

    Another paragraph

    Another link
    second empty div

    second div paragraph

    '; function printDomNode($paragraph){ echo "----\nNode: ".$paragraph->nodeValue . "\n"; echo "all attr: \n"; for ($i = 0; $i < $paragraph->attributes->length; $i++) { $attr = $paragraph->attributes->item($i); echo "\t".$attr->nodeName . ': ' . $attr->nodeValue . "\n"; } } // 创建DOMDocument实例并加载HTML $dom = new DOMDocument(); @$dom->loadHTML($html); // 创建DOMXPath实例 $xpath = new DOMXPath($dom); echo "----------------------------\n"; // 示例1:查找所有

    元素 $paragraphs = $xpath->query('//p'); foreach ($paragraphs as $paragraph) { echo "----\nNode----------: ".$paragraph->nodeValue . "\n"; echo "id attr: ".$paragraph->getAttribute('id') . "\n"; echo "all attr: \n"; for ($i = 0; $i < $paragraph->attributes->length; $i++) { $attr = $paragraph->attributes->item($i); echo "\t".$attr->nodeName . ': ' . $attr->nodeValue . "\n"; } echo "=foreach=\n"; foreach ($paragraph->attributes as $attr) { echo "\t".$attr->name . ': ' . $attr->value . "\n"; echo "\t".$attr->nodeName . ': ' . $attr->nodeValue . "\n"; } } echo "----------------------------\n"; $paragraphs = $xpath->query('//p[@xx="test_custom_key"]'); foreach ($paragraphs as $paragraph) { printDomNode($paragraph); } echo "----------------------------\n"; // 示例2:查找包含特定文本的元素 $links = $xpath->query('//a[text()="Link"]'); //$links = $xpath->query('//*[text()="Link"]'); //不限制a标签,会找到所有值是Link的节点 foreach ($links as $link) { $herf = $link->getAttribute('href'); echo "origin: ".$herf . "\n"; echo "decode: ".urldecode($herf) . "\n"; } //如果找到指定路径下面的节点 echo "----------------------------指定路径下的p节点\n"; $paragraphs = $xpath->query('//div[@id="custom_div_id"]//p[@id="xxx"]'); foreach ($paragraphs as $paragraph) { printDomNode($paragraph); } echo "----------------------------\n"; // 示例3:查找

    元素内的所有节点(这个会找到所有子节点,包括节点里面的节点) $divChildren = $xpath->query('//div/*'); foreach ($divChildren as $child) { // echo $child->nodeName . ": " . $child->nodeValue . "\n"; printDomNode($paragraph); } ?>

    示例:比如获取一个html文档中的p标签

    • 步骤
      • 获取网页html
        • 这里省略了请求url。如果需要从url获取html:$html = file_get_contents($url);
      • 将html文件构建成DOM树结构
      • 使用DOMXPath类来查找指定的元素节点
        • 构建DOMXPath类实例
        • 使用query函数查询
          • 如果找所有p标签,那么会遍历整个树,把所有的p标签找出来
          • 如何找指定属性的p标签:p[@xx="test_custom_key"]
            • 这里的xx是自定义的属性
            • 这里的@表示选择节点的属性
          • 如何找到指定路径下的节点
            • //div[@id="custom_div_id"]//p[@id="xxx"]
  • 相关阅读:
    CADEditorX ActiveX 14.1.X
    Cocos Creator 3.x 原生 TS 交互
    Nacos 配置中心底层原理(1.X版本)
    NAT穿越技术详细介绍
    [附源码]java毕业设计ssm新冠疫苗预约接种信息管理
    源码构建LAMP环境-2
    Linux vim 报错 E437
    CyberSploit:1
    如果线上遇到了OOM,该如何解决?
    【CocoaPods安装环境和流程以及各种情况】
  • 原文地址:https://blog.csdn.net/u014704998/article/details/139880082
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号