xpath解析
from lxml import etree
xpath解析原理
-
实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中
-
调用etree对象中的xpath方法结合xpath表达式实现标签定位和内容的捕获
-
与BeautifulSoup极为相像
环境的安装
-
pip install lxml
如何实例化一个etree对象
-
将本地的html文档中的源码数据加载到etree对象中:
etree.parse(filePath)
-
可以将互联网上获取的源代码数据加载到该对象中:
etree.HTML("page_text")
-
xpath("xpath表达式")
xpath表达式
-
/ :表示的是从根节点开始定位;表示的是一个层级
tree.xpath("/html/body/div")
-
// : 表示的是多个层级;可以从任意位置开始定位
tree.xpath("/html//div")
tree.xpath("//div")
-
属性定位:tag[@attrName="attrValue"]
tree.xpath("//div[@class="song"]")
-
索引定位:tag[索引];索引从一开始
tree.xpath("//div[@class="song"]/p[3]")
-
取文本:
-
/text() 获取的是标签中直系的文本内容
tree.xpath("//div[@class="song"]/p[3]/text()")
-
//text() 获取的是标签中非直系的文本内容(所有的文本内容)
tree.xpath("//div[@class="song"]//text()")
-
-
取属性:tag/@attrName
tree.xpath("//div[@class="song"]/img/@src
补充
乱码问题
方案1
对象名1=对象名2.encode("iso-8859-1").decode("gbk")
//对象1是乱码(对症下药)
方案2
response = requests.get(url=url, headers=headers) response.encoding="utf-8"
自动创建文件夹
import os //创建一个文件夹 if not os.path.exists('./piclibs')//判断是否以存在该文件夹 os.mkdir("./piclibs")
xpath多项匹配
例如
list1 = tree.xpath('//div[@class="all"]//li') list2 = tree.xpath('//div[@class="hot"]//li') //list1和list2可以一起被匹配 list3 = tree.xpath('//div[@class="hot"]//li|//div[@class="all"]//li')