本文共 2506 字,大约阅读时间需要 8 分钟。
lxml是python的一个解析库,支持HTML 和XML的解析,支持XPath解析方式而且解析效率非常高
XPath是一门在xml文档中查找信息的语言,最初适用于搜索XML的文档,但也适用于HTML文档的搜索from lxml import etree #导入lxmltext=''' ''' #定义字符串html=etree.HTML(text) #初始化生成一个XPath解析对象result=etree.tostring(html,encoding='utf-8') #解析对象输出代码print(type(html))print(type(result))print(result.decode('utf-8'))以上代码调用etree对象的HTML()方法将定义的字符串转化为一个XPath解析对象,之后调用etree对象的tostring()方法解析对象并输出代码 print(type(html)): <class ‘lxml.etree._Element’>
先保存一份text.xml文件:
使用lxml来解析文件:
htmlEmt = etree.parse('text.xml') #用etree的parse()方法解析xml文件result = etree.tostring(htmlEmt,pretty_print=True) #设置优化输出print(result)如果不设置pretty_print则输出的结果:
from lxml import etreehtmlEmt = etree.parse('text.xml') # 获取文件元素result = htmlEmt.xpath('//li') # 获取所有的
htmlEmt = etree.parse('text.xml') #用etree的parse()方法解析xml文件result = htmlEmt.xpath('//li/@class') #//li/@class表示获取li标签下所有class属性print(result)‘//li/a//@class’ 表示获取不包括<li 标签本身的class ‘//li[last()]/a/@href’ 表示获取最后一个<li标签的< a>标签的href
代码:
import requests #导入requests模块from lxml import etree #导入lxmlheaders = { "User-Agentv": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36", "Referer": "https://movie.douban.com/",} # 请求头设置url = "https://movie.douban.com/cinema/nowplaying/chongqing/" #定义请求URLrep = requests.get(url, headers=headers) #发起请求text = rep.text #返回Unicode型数据html = etree.HTML(text) # 转换成html格式ul = html.xpath("//ul[@class='lists']")[0] # 找到子孙节点ul标签lis = ul.xpath("./li") # 当前ul下的所有li标签movies = [] #空列表for li in lis: # 循环每个li标签 title = li.xpath("@data-title")[0] # 直接@li标签的属性获取值 score = li.xpath("@data-score")[0] region = li.xpath("@data-region")[0] actors = li.xpath("@data-actors")[0] director = li.xpath("@data-director")[0] liimg = li.xpath(".//img/@src") movie = { "title": title, "score": score, "region": region, "actors": actors, "director": director, "liimg": liimg, } #字典数据 movies.append(movie) #添加到列表print(movies) #输出结果
ps:以上的代码运行会报错,暂时没找出解决方法
转载地址:http://utten.baihongyu.com/