博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【笔记】python爬虫实战1 lxml模块 xPath语法 实例:爬取豆瓣网站
阅读量:3904 次
发布时间:2019-05-23

本文共 2506 字,大约阅读时间需要 8 分钟。

语法

lxml是python的一个解析库,支持HTML 和XML的解析,支持XPath解析方式而且解析效率非常高

XPath是一门在xml文档中查找信息的语言,最初适用于搜索XML的文档,但也适用于HTML文档的搜索

4-1使用xpath解析字符串

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’>

使用lxml解析html文件

先保存一份text.xml文件:

使用lxml来解析文件:

htmlEmt = etree.parse('text.xml') #用etree的parse()方法解析xml文件result = etree.tostring(htmlEmt,pretty_print=True) #设置优化输出print(result)

在这里插入图片描述

如果不设置pretty_print则输出的结果:
在这里插入图片描述

获取所有的 <\li> 标签 /倒数第x个li标签

from lxml import etreehtmlEmt = etree.parse('text.xml')			# 获取文件元素result = htmlEmt.xpath('//li')				# 获取所有的 
  • 标签 print(result) #输出所有内容print(len(result)) # 获取标签数量print(result[0]) # 取出第一个 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/

    你可能感兴趣的文章
    ES写入找不到主节点问题排查
    查看>>
    Java8 HashMap集合解析
    查看>>
    ArrayList集合解析
    查看>>
    欢迎使用CSDN-markdown编辑器
    查看>>
    Android计算器实现源码分析
    查看>>
    Android系统构架
    查看>>
    Android 跨应用程序访问窗口知识点总结
    查看>>
    各种排序算法的分析及java实现
    查看>>
    SSH框架总结(框架分析+环境搭建+实例源码下载)
    查看>>
    js弹窗插件
    查看>>
    自定义 select 下拉框 多选插件
    查看>>
    js判断数组内是否有重复值
    查看>>
    js获取url链接携带的参数值
    查看>>
    gdb 调试core dump
    查看>>
    gdb debug tips
    查看>>
    arm linux 生成火焰图
    查看>>
    jtag dump内存数据
    查看>>
    linux和windows内存布局验证
    查看>>
    linux config
    查看>>
    linux insmod error -1 required key invalid
    查看>>