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实现测试磁盘性能的方法
Mar 12 Python
Python跨文件全局变量的实现方法示例
Dec 10 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
django框架防止XSS注入的方法分析
Jun 21 Python
利用python numpy+matplotlib绘制股票k线图的方法
Jun 26 Python
python如何将多个PDF进行合并
Aug 13 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
Python类super()及私有属性原理解析
Jun 15 Python
如何将Pycharm中调整字体大小的方式设置为"ctrl+鼠标滚轮上下滑"
Nov 17 Python
python 实现的IP 存活扫描脚本
Dec 10 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里的JS打印函数
2006/10/09 PHP
PHP修改session_id示例代码
2014/01/08 PHP
初识PHP中的Swoole
2016/04/05 PHP
js常见表单应用技巧
2008/01/09 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
JavaScript中的some()方法使用详解
2015/06/09 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
详解vue-element Tree树形控件填坑路
2019/03/26 Javascript
VUE 组件转换为微信小程序组件的方法
2019/11/06 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
python中装饰器级连的使用方法示例
2017/09/29 Python
python 多线程对post请求服务器测试并发的方法
2019/06/13 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
C#里面如何倒序排列一个数组的元素?
2013/06/21 面试题
小学生演讲稿
2014/01/12 职场文书
小班重阳节活动方案
2014/02/08 职场文书
赔偿协议书范本
2014/04/15 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
优秀毕业生求职信
2014/06/05 职场文书
2014年最新大专生职业生涯规划书范文
2014/09/13 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
琅琊山导游词
2015/02/05 职场文书
活动费用申请报告
2015/05/15 职场文书
Nginx中break与last的区别详析
2021/03/31 Servers
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL