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的Django框架上部署ORM库的教程
Apr 20 Python
python寻找list中最大值、最小值并返回其所在位置的方法
Jun 27 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
python os模块简单应用示例
May 23 Python
Python实现转换图片背景颜色代码
Apr 30 Python
Python3爬虫中Selenium的用法详解
Jul 10 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
Jul 18 Python
Python实现爬取网页中动态加载的数据
Aug 17 Python
python统计mysql数据量变化并调用接口告警的示例代码
Sep 21 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
Jun 22 Python
Python字符串的转义字符
Apr 07 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中get_object_vars()方法用法实例
2015/02/08 PHP
PDO::errorCode讲解
2019/01/28 PHP
如何在PHP中读写文件
2020/09/07 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)
2014/09/17 Javascript
js实现tab切换效果
2017/02/16 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
python使用KNN算法手写体识别
2018/02/01 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
在Pandas中给多层索引降级的方法
2018/11/16 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
flask 实现token机制的示例代码
2019/11/07 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
Python实现电视里的5毛特效实例代码详解
2020/05/15 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
python selenium 获取接口数据的实现
2020/12/07 Python
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
2016/04/26 HTML / CSS
类、抽象类、接口的差异
2016/06/13 面试题
C#里面可以避免一个类被其他类继承么?如何?
2013/09/26 面试题
2014小学植树节活动总结
2014/03/10 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
Pytorch可视化的几种实现方法
2021/06/10 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
MySQL如何使备份得数据保持一致
2022/05/02 MySQL