网络爬虫

lxml模块

2019-08-23  本文已影响0人  lvyz0207

lxml 模块

简介

# 安装
pip install lxml
# google浏览器插件
xpath helper

xpath定位

详见xpath定位

lxml模块中使用xpath语法定位元素提取属性值或文本内容

from lxml import etree
html = etree.HTML(text) 
ret_list = html.xpath("xpath语法规则字符串")

三种返回结果
返回空列表:根据xpath语法规则字符串,没有定位到任何元素
返回由字符串构成的列表:xpath字符串规则匹配的一定是文本内容或某属性的值
返回由Element对象构成的列表:xpath规则字符串匹配的是标签,列表中的Element对象可以继续进行xpath

from lxml import etree
text = ''' <div> <ul> 
        <li class="item-1"><a>first item</a></li> 
        <li class="item-1"><a href="link2.html">second item</a></li> 
        <li class="item-inactive"><a href="link3.html">third item</a></li> 
        <li class="item-1"><a href="link4.html">fourth item</a></li> 
        <li class="item-0"><a href="link5.html">fifth item</a> 
        </ul> </div> '''

#根据li标签进行分组
html = etree.HTML(text)
li_list = html.xpath("//li[@class='item-1']")

#在每一组中继续进行数据的提取
for li in li_list:
    item = {}
    item["href"] = li.xpath("./a/@href")[0] if len(li.xpath("./a/@href"))>0 else None
    item["title"] = li.xpath("./a/text()")[0] if len(li.xpath("./a/text()"))>0 else None
    print(item)

lxml模块中etree.tostring

html = etree.HTML(html_str)

handeled_html_str = etree.tostring(html).decode()
print(handeled_html_str)

作用:

lxml.etree.HTML(html_str)可以自动补全标签
lxml.etree.tostring函数可以将转换为Element对象再转换回html字符串
爬虫如果使用lxml来提取数据,应该以lxml.etree.tostring的返回结果作为提取数据的依据

上一篇下一篇

猜你喜欢

热点阅读