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之入门(三)序列
May 25 Python
python网络编程学习笔记(三):socket网络服务器
Jun 09 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
python 获取键盘输入,同时有超时的功能示例
Nov 13 Python
python安装numpy和pandas的方法步骤
May 27 Python
Python封装成可带参数的EXE安装包实例
Aug 24 Python
python爬虫之遍历单个域名
Nov 20 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
使用Tkinter制作信息提示框
Feb 18 Python
在python image 中实现安装中文字体
May 16 Python
详解python中的异常捕获
Dec 15 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 时间转换Unix时间戳代码
2010/01/22 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP实现随机生成水印图片功能
2017/03/22 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
javascript类继承机制的原理分析
2009/09/12 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
webpack+vue.js实现组件化详解
2016/10/12 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
python改变日志(logging)存放位置的示例
2014/03/27 Python
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
详解python中的文件与目录操作
2017/07/11 Python
python数据结构之链表详解
2017/09/12 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python matplotlib如何给图中的点加标签
2019/11/14 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
招聘与培训专员岗位职责
2014/01/30 职场文书
财务会计毕业生个人求职信
2014/02/03 职场文书
发展部经理职责规定
2014/02/22 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
中学生励志演讲稿
2014/04/26 职场文书
行政管理专业求职信
2014/07/06 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
2019年冬至:天冷暖人心的问候祝福语大全
2019/12/20 职场文书
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫