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框架中显示对象子集的方法
Jul 21 Python
Python按行读取文件的简单实现方法
Jun 22 Python
python 获取指定文件夹下所有文件名称并写入列表的实例
Apr 23 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
想学python 这5本书籍你必看!
Dec 11 Python
Python删除n行后的其他行方法
Jan 28 Python
python日期相关操作实例小结
Jun 24 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
深入浅析Python 命令行模块 Click
Mar 11 Python
Python中requests做接口测试的方法
May 30 Python
Python中的socket网络模块介绍
Jul 23 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
收音机指标测试方法及仪器
2021/03/01 无线电
PHP编写daemon process详解及实例代码
2016/09/30 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
php实现websocket实时消息推送
2018/03/30 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
jquery 查找新建元素代码
2010/07/06 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
Vue.js动态添加、删除选题的实例代码
2016/09/30 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
win与linux系统中python requests 安装
2016/12/04 Python
遗传算法之Python实现代码
2017/10/10 Python
对numpy中布尔型数组的处理方法详解
2018/04/17 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
python实现简单加密解密机制
2019/03/19 Python
python 模拟银行转账功能过程详解
2019/08/06 Python
Python超越函数积分运算以及绘图实现代码
2019/11/20 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
Django choices下拉列表绑定实例
2020/03/13 Python
软件测试有哪些?什么是配置项?
2012/02/12 面试题
数控技术应届生求职信
2013/11/13 职场文书
2014年自我评价
2014/01/04 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
自我推荐信怎么写
2015/03/24 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
python画条形图的具体代码
2022/04/20 Python
python实现双链表
2022/05/25 Python