博客
关于我
强烈建议你试试无所不能的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/

    你可能感兴趣的文章
    linux 驱动开发 头文件
    查看>>
    /etc/resolv.conf
    查看>>
    container_of()传入结构体中的成员,返回该结构体的首地址
    查看>>
    linux sfdisk partition
    查看>>
    ipconfig,ifconfig,iwconfig
    查看>>
    opensuse12.2 PL2303 minicom
    查看>>
    电平触发方式和边沿触发的区别
    查看>>
    网络视频服务器移植
    查看>>
    Encoding Schemes
    查看>>
    移植QT
    查看>>
    如此调用
    查看>>
    计算机的发展史
    查看>>
    带WiringPi库的交叉编译如何处理一
    查看>>
    带WiringPi库的交叉笔译如何处理二之软链接概念
    查看>>
    Spring事务的七种传播行为
    查看>>
    ES写入找不到主节点问题排查
    查看>>
    Java8 HashMap集合解析
    查看>>
    ArrayList集合解析
    查看>>
    欢迎使用CSDN-markdown编辑器
    查看>>
    Android计算器实现源码分析
    查看>>