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

    你可能感兴趣的文章
    [Mac]Mac 操作系统 常见技巧
    查看>>
    苹果Swift编程语言入门教程【中文版】
    查看>>
    捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
    查看>>
    iphone开发基础之objective-c学习
    查看>>
    iphone开发之SDK研究(待续)
    查看>>
    计算机网络复习要点
    查看>>
    Variable property attributes or Modifiers in iOS
    查看>>
    NSNotificationCenter 用法总结
    查看>>
    C primer plus 基础总结(一)
    查看>>
    剑指offer算法题分析与整理(一)
    查看>>
    剑指offer算法题分析与整理(三)
    查看>>
    部分笔试算法题整理
    查看>>
    Ubuntu 13.10使用fcitx输入法
    查看>>
    pidgin-lwqq 安装
    查看>>
    mint/ubuntu安装搜狗输入法
    查看>>
    C++动态申请数组和参数传递问题
    查看>>
    opencv学习——在MFC中读取和显示图像
    查看>>
    retext出现Could not parse file contents, check if you have the necessary module installed解决方案
    查看>>
    pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
    查看>>
    linux mint下使用外部SMTP(如网易yeah.net)发邮件
    查看>>