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的Bottle框架中获取制定cookie的教程
Apr 24 Python
Python实现对PPT文件进行截图操作的方法
Apr 28 Python
Python中if __name__ == '__main__'作用解析
Jun 29 Python
Python读取MRI并显示为灰度图像实例代码
Jan 03 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
django最快程序开发流程详解
Jul 19 Python
对python中各个response的使用说明
Mar 28 Python
Pytorch十九种损失函数的使用详解
Apr 29 Python
vscode调试django项目的方法
Aug 06 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 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 Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
PHP关联数组的10个操作技巧
2013/01/21 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php命令行写shell实例详解
2018/07/19 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
vue中$refs的用法及作用详解
2018/04/24 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
python处理图片之PIL模块简单使用方法
2015/05/11 Python
深入理解python多进程编程
2016/06/12 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
python正则中最短匹配实现代码
2018/01/16 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
机器学习实战之knn算法pandas
2019/06/22 Python
python实现知乎高颜值图片爬取
2019/08/12 Python
Python填充任意颜色,不同算法时间差异分析说明
2020/05/16 Python
利用python对mysql表做全局模糊搜索并分页实例
2020/07/12 Python
css3 矩阵的使用详解
2018/03/20 HTML / CSS
给男朋友的道歉信
2014/01/12 职场文书
初中生自我鉴定
2014/02/04 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
干部下基层实施方案
2014/03/14 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
专家推荐信范文
2015/03/26 职场文书
详解使用内网穿透工具Ngrok代理本地服务
2022/03/31 Servers