Python大数据之使用lxml库解析html网页文件示例


Posted in Python onNovember 16, 2019

本文实例讲述了Python大数据之使用lxml库解析html网页文件。分享给大家供大家参考,具体如下:

lxml是Python的一个html/xml解析并建立dom的库,lxml的特点是功能强大,性能也不错,xml包含了ElementTree ,html5lib ,beautfulsoup 等库。

使用lxml前注意事项:先确保html经过了utf-8解码,即code =html.decode('utf-8', 'ignore'),否则会出现解析出错情况。因为中文被编码成utf-8之后变成 '/u2541' 之类的形式,lxml一遇到 "/"就会认为其标签结束。

具体用法:元素节点操作

1、  解析HTMl建立DOM

from lxml import etree
dom = etree.HTML(html)

2、  查看dom中子元素的个数 len(dom)

3、  查看某节点的内容:etree.tostring(dom[0])

4、  获取节点的标签名称:dom[0].tag

5、  获取某节点的父节点:dom[0].getparent()

6、  获取某节点的属性节点的内容:dom[0].get("属性名称")

对xpath路径的支持:

XPath即为XML路径语言,是用一种类似目录树的方法来描述在XML文档中的路径。比如用"/"来作为上下层级间的分隔。第一个"/"表示文档的根节点(注意,不是指文档最外层的tag节点,而是指文档本身)。比如对于一个HTML文件来说,最外层的节点应该是"/html"。

xpath选取元素的方式:

1、  绝对路径,如page.xpath("/html/body/p"),它会找到body这个节点下所有的p标签

2、  相对路径,page.xpath("//p"),它会找到整个html代码里的所有p标签。

Python大数据之使用lxml库解析html网页文件示例

xpath筛选方式:

1、  选取元素时一个列表,可通过索引查找[n]

2、  通过属性值筛选元素p =page.xpath("//p[@style='font-size:200%']")

3、  如果没有属性可以通过text()(获取元素中文本)、position()(获取元素位置)、last()等进行筛选

Python大数据之使用lxml库解析html网页文件示例

获取属性值

dom.xpath(.//a/@href)

获取文本

dom.xpath(".//a/text()")

示例代码:

#!/usr/bin/python
# -*- coding:utf-8 -*-
from scrapy.spiders import Spider
from lxml import etree
from jredu.items import JreduItem
class JreduSpider(Spider):
  name = 'tt' #爬虫的名字,必须的,唯一的
  allowed_domains = ['sohu.com']
  start_urls = [
    'http://www.sohu.com'
  ]
  def parse(self, response):
    content = response.body.decode('utf-8')
    dom = etree.HTML(content)
    for ul in dom.xpath("//div[@class='focus-news-box']/div[@class='list16']/ul"):
      lis = ul.xpath("./li")
      for li in lis:
        item = JreduItem() #定义对象
        if ul.index(li) == 0:
          strong = li.xpath("./a/strong/text()")
          li.xpath("./a/@href")
          item['title']= strong[0]
          item['href'] = li.xpath("./a/@href")[0]
        else:
          la = li.xpath("./a[last()]/text()")
          item['title'] = la[0]
          item['href'] = li.xpath("./a[last()]/href")[0]
        yield item

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中多线程及程序锁浅析
Jan 21 Python
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
在Django的视图中使用form对象的方法
Jul 18 Python
python 网络编程常用代码段
Aug 28 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
Python列表list排列组合操作示例
Dec 18 Python
Python学习笔记之字符串和字符串方法实例详解
Aug 22 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
python模块如何查看
Jun 16 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
Python大数据之从网页上爬取数据的方法详解
Nov 16 #Python
简单了解Pandas缺失值处理方法
Nov 16 #Python
python selenium 执行完毕关闭chromedriver进程示例
Nov 15 #Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 #Python
Django 实现xadmin后台菜单改为中文
Nov 15 #Python
django使用xadmin的全局配置详解
Nov 15 #Python
在django-xadmin中APScheduler的启动初始化实例
Nov 15 #Python
You might like
php上传文件并显示上传进度的方法
2015/03/24 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
nicejforms——美化表单不用愁
2007/02/20 Javascript
js textarea自动增高并隐藏滚动条
2009/12/16 Javascript
javascript 动态调整图片尺寸实现代码
2009/12/28 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
jquery原理以及学习技巧介绍
2015/11/11 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
JavaScript中日期函数的相关操作知识
2016/08/03 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
jQuery绑定事件的四种方式介绍
2016/10/31 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
浅谈Vuex的this.$store.commit和在Vue项目中引用公共方法
2020/07/24 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
如何让python的运行速度得到提升
2020/07/08 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
python excel多行合并的方法
2020/12/09 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
毕业典礼演讲稿
2014/05/13 职场文书
英语专业求职信
2014/07/08 职场文书
2016年安康杯竞赛活动总结
2016/04/05 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书
python blinker 信号库
2022/05/04 Python