lxml库和BeautifulSoup库常用点小结
算是本人的学习笔记吧,仅供个人学习使用。
以下内容摘自《Python3网络爬虫开发实战--崔庆才著》
1.lxml库
XPath 常用规则:
| 表达式 | 描述 |
|---|---|
| nodename | 选取此节点的所有子节点 |
| / | 从当前节点选取直接子节点 |
| // | 从当前节点选取子孙节点 |
| . | 选取当前节点 |
| .. | 选取当前节点的父节点 |
| @ | 选取属性 |
具体阐述:
| 目的 | 示例 | 含义 |
|---|---|---|
| 所有节点 | //li | 以//开头,表示获取所有li节点 |
| 子节点选取 | //li | 获取所有li节点 |
| //li/a | 获取所有li节点的所有直接a子节点 | |
| //li//a | 获取li节点下的所有子孙a节点 | |
| //a[@href="link4.html"] | 获取href属性为link4.html的a节点 | |
| 父节点选取 | //a[@href="link4.html"]/.. | 获取href属性为link4.html的a节点的父节点 |
| 文本获取 | text() | 获取节点内部的文本 |
| //li[@class="item-0"]/text() | 选取class属性为item-0的li节点的直接子节点内部的文本 | |
| //li[@class="item-0"]//text() | 选取class属性为item-0的li节点的子孙节点内部的文本 | |
| 属性获取 | @ | 获取节点的属性 |
| //li/a/@href | 获取所有li节点的直接子节点a的href属性,返回内容可能为"link4.html" | |
| 属性多值匹配 | contains(classname,classvalue)方法 | 第一个参数传入属性名称,第二个参数传入属性值 |
| //li[contains(@class,"li")]/a/text() | 获取class属性值包含"li"的li节点的直接子节点a内部的文本 | |
| 多属性匹配 | and运算符 | 根据多个属性确定一个节点 |
| //li[contains(@class,"li") and @name="item"]/a/text() | 需要同时根据class和name属性的值来确定li节点 |
2.BeautifulSoup库的方法选择器
载入库
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,"lxml") #进行BeautifulSoup对象的初始化
find_all(name,attrs,recursive,text,**kwargs):查询所有符合条件的元素;find()返回的是第一个匹配的元素
| 参数 | 作用 | 示例 |
|---|---|---|
| name | 根据节点名查询元素 | soup.fina_all(name="ul") #查询所有的ul节点 |
| attrs | 根据属性查询 | soup.find_all(attrs={'id':'list-1'})) #查询id属性值为list-1的节点 |
| text | 匹配节点的文本 | soup.find_all(text=re.compile('link')) #返回所有匹配正则表达式的节点的文本组成的列表 |
浙公网安备 33010602011771号