xpath
动态加载:使用json串转换
静态页面:使用正则,xpath.......
结构化数据:先有结构,在有数据 json path
非结构化数据:先有数据,再有结构 正则,xpath,beautifusoup4
什么是xpath: 是一门在 XML 文档中提取信息数据的语言,可以用来在xml文档中对元素(标签)的属性进行遍历
我们在使用xpath之前首先需要将html文档转换为xml文档
什么是xml:是传输数据而并非显示数据
xpath 语法的目的,找到节点,提取信息
xpath 语法
使用xpath 语法提取数据
xml:是一个可扩展的标记语言,语法和 html 相像,里面的节点可以自己定义,被设计的目的用来进行数据的传输和保存
xpath的使用:
安装lxml pip3 install lxml
1.from lxml import etree
html_lement = etree.HTML("response.text")
html_lement = etree.HTML("html内容")
常用的语法:
notename:节点:查找出html中标签名为notname的节点(包括节点本身)
/ 表示从根节点的地方开始获取,(相对性的)
// 表示从任意位置匹配出你想要的节点
. 表示选取当前节点
.. 表示选取当前节点的父节点
@ 属性名:表示选择属性 /a/@href 语法规则
text() 表示取标签文本内容 例如:获取a节点的中文 a/text()
notename[@class=" "] 根据class获取节点
notename[@id=" "] 根据id 获取节点
notename[1]:表示标签名为第一个的节点 (从1开始,而不是从0开始)
notename[last()]:表示取最后一个
notename[last()-1]:表示取倒数第二个
notename[post() > 3] 表示选取前三个
beautifulsoup4
bs4:bs4解析器,设计的目的同样是在html中寻找节点,但是效率比xpath要低
使用bs4
安装 pip3 install beautifulsoup4
from bs4 import BeautifulSoup
html_soup = BeautifulSoup('html文档','解析器')
文档解析器常用的两种
- lxml:索命使用的是lxml.html(解析器)
- html.parser:python自带的html解析器
#beautifulsoup 和 tag 类型的对象可以使用find_all 属性
find_all:查找符合条件的全部节点
name=None,:节点名称:可以是一个字符串,可以是一个列表,可以是一个正则表达式,(标签的名称)
attrs={}, recursive=True,:节点的属性 是一个字典(标签的属性)
text=None,:字符串,列表,正则表达式,(查找出所有跟text文本一致的内容)
html_soup.find()
css 选择器: . 表示 类 选择器
# 表示 id 选择器
获取文本内容
.string 表示获取标签的文本内容
.get_text() 表示获取标签的文本内容(使用的多)
attrs() 获取标签的所有属性值
attrs['属性名'] 获取标签的某个属性的属性值
pyquery
pyquery:相当于jQuery的python版本实现,它同样可以提取HTML页面中节点,
pyquery 的使用:
安装 pip3 install pyjquery
from pyquery import PyQuery as pyq
”“”
第一步构建一个PyQuery对象
#传入字符串
html_pq = pq('html文本')
#传入lxml
html_pq = pq(etree.fromstring('html文本'))
#可以直接传入一个url
html_pq = pq(url='url地址')
“”“
#传入文件
html_pq = pq(filename='文件名称')
pyquert 常用的语法:
.html():获取某个html代码块
.text():获取标签的文本内容
.(selector): 根据css选择器获取目标节点
.eq(index):根据索引获取指定标签(节点)
.find():查找子节点
.filter():根据class,id过滤节点
.attr('属性名'):获取节点的属性值
网友评论