解析库的使用(XPath,BeautifulSoup, pyquery)
### 解析库的使用(XPath,BeautifulSoup, pyquery) #### XPath XPath 是一种用于查找 XML 文档中信息的语言,也可以被广泛应用于 HTML 文档的解析。它通过提供一种简洁有效的路径表达法来定位和提取数据。 - **安装与导入**: ```python from lxml import etree ``` - **初始化**: - 直接从字符串初始化: ```python html = etree.HTML(text) ``` - 从文件中读取并解析: ```python html = etree.parse(file, etree.HTMLParser()) ``` - **基本用法**: - 输出修正后的 HTML 文本: ```python result = etree.tostring(html).decode('utf-8') ``` - 使用 XPath 表达式匹配元素: ```python result = html.xpath('匹配模式') ``` - 具体例子: - `html.xpath('title')`:选取 title 元素的所有子节点。 - `html.xpath('/title')`:选取根元素 title。 - `html.xpath('title/book')`:选取属于 title 的子元素的所有 book 元素。 - `html.xpath('//book')`:选取所有 book 子元素,无论它们的位置如何。 - `html.xpath('title//book')`:选择属于 title 元素的后代的所有 book 元素,无论它们位于何处。 - `html.xpath('//@lang')`:选取名为 lang 的所有属性。 - **高级用法**: - 多个 XPath 表达式可以用 `|` 分隔。 - 属性匹配可以使用 `and` 或 `or` 运算符。 - 轴可用于定义相对于当前节点的节点集,格式为 `轴名称::`。 - **常用方法**: - `text()`:获取节点中的文本。 - `contains()`:用于属性匹配,例如 `contains(@class, 'example')` 匹配任何 class 属性中包含 'example' 的元素。 #### BeautifulSoup BeautifulSoup 是 Python 库中最流行的网页解析工具之一,主要用于从 HTML 和 XML 文件中抓取数据。 - **安装与导入**: ```python from bs4 import BeautifulSoup ``` - **初始化**: ```python soup = BeautifulSoup(html, 'lxml') ``` - **基本操作**: - `soup.prettify()`:以标准的缩进形式输出 HTML 内容。 - `soup.节点`:输出匹配到的第一个节点。 - `soup.节点.string`:获取节点的文本。 - `soup.节点.name`:获取节点的名称。 - `soup.节点.attrs`:获取节点的所有属性,以字典形式返回 `{属性名:属性值}`。 - `soup.节点.contents`:获得直接子节点的列表。 - `soup.节点.children`:返回子节点的生成器。 - `soup.节点.descendants`:返回递归所有子节点的生成器。 - `soup.节点.parent`:父节点及其内部的全部内容。 - `soup.节点.parents`:所有祖先节点及其内容,以生成器形式返回。 - `soup.节点.next_sibling`:节点的下一个兄弟节点内容。 - `soup.节点.previous_sibling`:节点的上一个兄弟节点内容。 - `soup.节点.next_siblings`:节点的下一个兄弟节点内容,以生成器形式返回。 - `soup.节点.previous_siblings`:节点的上一个兄弟节点内容,以生成器形式返回。 - **查找节点**: - `find_all(name, attrs, recursive, text, **kwargs)`:返回所有符合条件的节点列表。 - `find()`:返回第一个匹配的节点内容。 - `find_parent()`:返回直接父节点。 - `find_parents()`:返回所有祖先节点。 - `find_next_sibling()`:返回后面第一个兄弟节点。 - `find_next_siblings()`:返回后面的所有兄弟节点。 - `find_previous_sibling()`:返回前面第一个兄弟节点。 - `find_previous_siblings()`:返回前面的所有兄弟节点。 - `find_next()`:返回节点后第一个符合条件的节点。 - `find_all_next()`:返回节点后所有符合条件的节点。 - `find_previous()`:返回节点前第一个符合条件的节点。 - `find_all_previous()`:返回节点前所有符合条件的节点。 #### PyQuery PyQuery 是一个基于 jQuery API 的 Python 库,可以轻松地从 HTML 或 XML 文档中提取信息。 - **安装与导入**: ```python from pyquery import PyQuery as pq ``` - **初始化**: - 从字符串初始化: ```python doc = pq(html) ``` - 从 URL 初始化: ```python doc = pq(url=url) ``` - 从文件名初始化: ```python doc = pq(filename=filename) ``` - **基本用法**: - `doc(#container .list li)`:选取 id 为 container 的节点,在选取内部 class 为 list 的节点内部的所有 li 节点。 - **查找节点**: - `result.find(CSS选择器)`:返回所有子孙节点中符合 CSS 选择器的节点。 - `result.children(CSS选择器)`:返回直接子节点中符合 CSS 选择器的节点。 - `result.parent(CSS选择器)`:返回直接父节点中符合 CSS 选择器的节点。 这些解析库提供了丰富的功能,可以帮助开发者高效地处理和解析网页数据。通过结合使用这些库的不同方法和特性,可以实现对网页结构的深入分析和数据提取。无论是对于数据抓取、网站自动化还是其他 Web 开发任务,掌握这些库的使用都是非常有益的。

























- 粉丝: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- Aestate-Python资源
- 网络营销和策划.pptx
- YKSwiftNetworking-Swift资源
- 三星中小企业网络安全解决方案.doc
- 通信原理教学.pptx
- 网络程序员工作计划样本.doc
- 我爱我家(主题网络)(20220208022735).pdf
- 公司通信调度系统技术规范及技术方案书.docx
- 网络营销与策划实践环节考核.doc
- 物联网简介幻灯片.ppt
- 华为网络认证工程师.docx
- 基于ARM的Buck-Boost双向DC-DC电源变换器:同步BUCK与BOOST电路级联的数字稳压技术
- 计算机科学与技术专业的知识体系与课程体系.pptx
- 网络推广协议范本最新.doc
- 2023年电子商务基础测试题库.doc
- 酒店住宿及消费管理系统数据库.doc


