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脚本
Apr 05 Python
Python版的文曲星猜数字游戏代码
Sep 02 Python
python网络编程学习笔记(五):socket的一些补充
Jun 09 Python
python中pass语句用法实例分析
Apr 30 Python
Python编程之黑板上排列组合,你舍得解开吗
Oct 30 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
python跳出双层for循环的解决方法
Jun 24 Python
python读取并定位excel数据坐标系详解
Jun 26 Python
Python 经典算法100及解析(小结)
Sep 13 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
Dec 09 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 eval函数一句话木马代码
2015/05/21 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
js异步加载的三种解决方案
2013/03/04 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
jquery实现邮箱自动补全功能示例分享
2014/02/17 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
2015/11/30 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
python实现的简单文本类游戏实例
2015/04/28 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Python处理Excel文件实例代码
2017/06/20 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
Python多进程写入同一文件的方法
2019/01/14 Python
python下载微信公众号相关文章
2019/02/26 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
美丽的现代设计家具:2Modern
2018/07/26 全球购物
开普敦通行证:Cape Town Pass
2019/07/18 全球购物
中式面点餐厅创业计划书
2014/01/29 职场文书
总经理司机岗位职责
2014/02/06 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
教师个人自我剖析材料
2014/09/29 职场文书
2015年副班长工作总结
2015/05/15 职场文书
工作建议书范文
2019/07/08 职场文书
nginx限制并发连接请求数的方法
2021/04/01 Servers
Python基础之条件语句详解
2021/06/16 Python
详解 TypeScript 枚举类型
2021/11/02 Javascript
尝试使用Python爬取城市租房信息
2022/04/12 Python