python爬虫之路——初识lxml库和xpath语法
lxml库:是xml解析库,也支持html文档解析功能,实用功能:自动修正补全html代码。
使用流程:①导入lxml中的etree库,②利用etree.HTML(文件名)或etree.parse(本地打开,路径)进行初始化,③etree库把HTML文档解析为Element对象。
from lxml import etree
text="""
<div >
<div class="sidebarContent">sdssdds
</div>
"""
html=etree.HTML(text)
result=etree.HTML(html)
print(result)
xpath语法:是一门在xml文档中查找信息的语言,对html文档也有很好的支持。
节点分类
先辈节点
父节点
同胞节点《=本节点
子节点
后代节点
xpath 的语法
分三部分:/ div [1]
①/或//或.或.. 只有/表示确定剩下都表示不确定要根据节点谓语确定。
②div 表示标签
③[1]第一个节点
做模糊查询
表达式中有非(/)符号就是。
分叉路径的内容寻找。思路:先抓大后抓小,寻找循环点。
①有共同先辈节点
import requests
from lxml import etree
header={
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
}
url='https://www.baidu.com/?tn=90278658_hao_pg'
res=requests.get(url,heads=heads)
selector=etree.HTML(res.test)
#运用两次xpath方法
url_infos=selector.xpath('//div[@class="asd asdf"]')
for url_info in url_infos:
id=url_info.xpath('div[2]/a[1]/text()')[0]
print (id)
②互为同胞节点(标签名相同,属性不同)
from lxml import etree
html1="""
<li class="tag-1">内容1</li>
<li class="tag-1">内容2</li>
<li class="tag-1">内容3</li>
<li class="tag-1">内容4</li>
"""
selector=etree.HTML(html1)
contents=elector.xpath('//li[starts-with(@class,"tag")]/text()')
for content in contents:
print(content)
③为父子关系
from lxml import etree
html1="""
<li class="red">内容1
<h1>内容2</h1>
</li>
"""
selector=etree.HTML(html1)
content1=selector.xpath('//div[@class="red"]')[0]
#string(.)方法可用于标签套标签情况
content2=content1.xpath('string(.)')
print(content2)