【前情回顾】如何灵活的解析网页,提取我们想要的数据,是猿人们写爬虫时非常关心和需要解决的问题。从Python众多的可利用工具中,我们选择了lxml,它的好我们知道,它的妙待我们探讨。前面我们已经从html字符串转换成HtmlElement对象,接下来我们就探讨该如何操作这个HtmlElement对象。

lxml.html 的 HtmlElement 对象的各种属性和方法

这个HtmlElement对象有各种方法,我们重点讨论跟解析网页相关的函数,而修改这个对象的方法若与提取内容相关也一并介绍,介绍过程结合下面这段html代码以便更好说明问题:

abclink

.attrib 属性和 .get()方法

前者是html tag的属性集合,以字典表示;后者是取得某个属性的值,相当于字典的.get()方法。看示例:

In [35]: doc = lxml.html.fromstring('

abclink

')In [37]: doc.attribOut[37]: {'class': 'post', 'id': '123'}In [38]: doc.get('class')Out[38]: 'post'

.drop_tag()方法

移除该html tag,但保留它的子节点和文本并合并到该tag的父节点。

In [46]: doc = lxml.html.fromstring('

abclink

')In [47]: doc.find('.//p').drop_tag()In [48]: lxml.html.tostring(doc)Out[48]: b'

abclink

'

.drop_tree()方法

移除该节及其子节点和文本,而它后面的文本(tail text)合并到前面一个节点或父节点。

In [50]: doc = lxml.html.fromstring('

abclink

')In [51]: doc.find('.//p').drop_tree()In [52]: lxml.html.tostring(doc)Out[52]: b'

.find(path), .findall(path), .findtext(path)方法

通过path(Xpath)或tag查找特定节点,前者返回找到的第一个,第二个返回找到的全部HTMLElement,第三个返回找到的第一个的节点的文本(.text)

In [55]: doc = lxml.html.fromstring('

abclink

')In [56]: doc.find('p')Out[56]: In [57]: doc.find('.//a')Out[57]: In [58]: doc.findall('p')Out[58]: []In [76]: doc.findtext('.//a')Out[76]: 'link'

.find_class(class_name)方法

通过class名称查找所有含有class_name的元素,返回HtmlElement的列表

In [70]: doc = lxml.html.fromstring('

abclink

')In [71]: doc.find_class('para')Out[71]: [, ]

.get_element_by_id(id) 方法

得到第一个id为输入id的节点。如果有多个相同id的节点(按道理讲,一个HTML文档里面的id是唯一的)只返回第一个。

In [79]: doc = lxml.html.fromstring('

abclink

')In [80]: doc.get_element_by_id('123')Out[80]:

.getchildren()、getparent() 方法

顾名思义,获取 孩子节点和父节点。需要注意的是,还是可以有多个(返回list),父亲只有一个。

In [83]: doc = lxml.html.fromstring('

abclink

')In [84]: doc.getchildren()Out[84]: []In [85]: doc.getparent()Out[85]: # 注意:输入的本没有body,div已经是最上层节点,它的父节点就是body了

.getnext() .getprevious() 方法

获取后一个或前一个节点,如果没有则返回None。

In [109]: doc = lxml.html.fromstring('

abc

xyz

')In [110]: doc.getnext()In [111]: doc.find('p').getnext()Out[111]: In [112]: doc.find('p').getprevious()

.getiterator()、.iter() 方法

从该节点开始,按文档顺序(深度优先)遍历所有子节点。可以指定只遍历某些tag。

In [127]: doc = lxml.html.fromstring('

abclink

')In [128]: for itr in doc.getiterator(): ...: print(itr.tag) ...: divpaIn [129]: for itr in doc.iter(): ...: print(itr.tag) ...: divpa

.iterchildren() 方法

只遍历子节点。

.iterancestors() .iterdescendants()方法

前者遍历前辈(从父亲节点开始),后者遍历后辈(从子辈开始),都跳过该节点。

In [134]: doc = lxml.html.fromstring('

abclink

')In [135]: a = doc.find('.//a')In [136]: for itr in doc.iterancestors(): ...: print(itr.tag) ...: bodyhtmlIn [137]: for itr in a.iterancestors(): ...: print(itr.tag) ...: pdivbodyhtmlIn [138]: for itr in doc.iterdescendants(): ...: print(itr.tag) ...: pa

.iterfind(path) 方法

遍历所有符合path的子节点,类似于findall()

.make_links_absolute(base_url)

很多网页的链接都是类似href=”/path/a.html”没有写全网址,这个方法的作用就是补全网址。

.tag 属性

该节点的html tag 名称

.text .tail 属性

都是该节点的文本内容,不同的是一个在tag内,一个在尾部:

text

tail

再看下面的代码

In [173]: doc = lxml.html.fromstring('

abclinkworod

apple

')In [174]: p = doc.find('p')In [175]: p.textOut[175]: 'abc'In [176]: p.tailOut[176]: 'apple'

.text_content() 方法

返回给节点及其子节点包含的所有文本

In [178]: doc.text_content()Out[178]: 'abclinkworodapple'

以上就是我们从网页提取内容时用到的主要属性和方法。下一节,我们将以实例讲解具体提取数据的过程。

angularjs post返回html_Python 爬虫网页解析工具lxml.html(二)相关推荐

  1. modelandview 可以返回html么_Python: 爬虫网页解析工具lxml.html(一)

    狭义上讲,爬虫只负责抓取,也就是下载网页.而实际上,爬虫还要负责从下载的网页中提取我们想要的数据,即对非结构化的数据(网页)进行解析提取出结构化的数据(有用数据). 所以说,网页下载下来只是第一步,还 ...

  2. python 把xml中含有特殊字段的部分提取出来_Python: 爬虫网页解析工具lxml.html(一)...

    狭义上讲,爬虫只负责抓取,也就是下载网页.而实际上,爬虫还要负责从下载的网页中提取我们想要的数据,即对非结构化的数据(网页)进行解析提取出结构化的数据(有用数据). 所以说,网页下载下来只是第一步,还 ...

  3. python自带网页解析器_Python爬虫Chrome网页解析工具-XPath Helper

    之前就说过Python爬虫中Xpath的用法,相信每一个写爬虫.或者是做网页分析的人,都会因为在定位.获取XPath路径上花费大量的时间,在没有这些辅助工具的日子里,我们只能通过搜索HTML源代码,定 ...

  4. 硬核来袭!!!一篇文章教你入门Python爬虫网页解析神器——BeautifulSoup详细讲解

    文章目录 一.BeautifulSoup介绍 二.安装 三.bs4数据解析的原理 四.bs4 常用的方法和属性 1.BeautifulSoup构建 1.1 通过字符串构建 1.2 从文件加载 2.Be ...

  5. 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup...

    http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子,主要是单单写 lxml 与 bs4 这两个 py 模块名可 ...

  6. 爬虫学习笔记(五)——网页解析工具(bs4、xpath)

    一.BS4 1.1.前沿 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库,它的使用方式相对于正则来说更加的简单方便,常常能够节省我们大量的时间.(我这里只是简单 ...

  7. WOS_Crawler: Web of Science图形界面爬虫、解析工具

    文章目录 太长不看 0. 写在前面 1. WOS_Cralwer的使用方法 1.1 图形界面使用方法 1.2 Python API使用方法 2. 注意事项 3. Web of Science爬取逻辑 ...

  8. 爬虫网页解析之css用法及实战爬取中国校花网

    前言 我们都知道,爬虫获取页面的响应之后,最关键的就是如何从繁杂的网页中把我们需要的数据提取出来, python从网页中提取数据的包很多,常用的解析模块有下面的几个: BeautifulSoup AP ...

  9. [转]Python爬虫html解析工具beautifulSoup在pycharm中安装及失败的解决办法

    原文地址:https://www.cnblogs.com/yysbolg/p/9040649.html 刚开始学习一门技术最麻烦的问题就是搞定IDE环境,直接在PyCharm里安装BeautifulS ...

最新文章

  1. joomla源代码探析(五) framework.php
  2. 人物访谈:松本行弘谈Ruby
  3. win2012活动目录介绍
  4. 华为p20Android怎么解开,华为P20如何获得root权限来解决自启动手机应用程序的问题...
  5. python 选择题 多线程_python多线程练习题
  6. java.lang.NoClassDefFoundError: com.mobclick.android.MobclickAgent
  7. urb分析,usb_fill_bulk_urb函数理解
  8. 地图比例尺与空间分辨率之间的关系_地图比例尺与分辨率
  9. Linux进程创建fork、进程退出exit()、进程等待waitpid()
  10. JavaScript怎么获取当前时间的年月日?
  11. 不用函数,如何提取身份证出生日期?
  12. pat1121 Damn Single
  13. 线性函数,C语言方式实现
  14. 专家:闽新增11家A级物流企业多受益“信息快车”
  15. iis 发生意外错误0x8ffe2740.
  16. 知识管理:新时代企业竞争力核心
  17. 【系统分析与设计】Homework1
  18. 如何在vscode配置php开发环境
  19. 【MySQL基本学习】
  20. 项目管理故事(收集)

热门文章

  1. DOM事件流三个阶段
  2. 关于Mysql8.0.26版本与IDEA连接的配置
  3. 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
  4. 验1-8 输出倒三角图案 (5 分)
  5. JS根据分数,计算名次(分数相同名次相同)
  6. opencv显示中文
  7. 解决只能滑动弹框内容不能滑动弹框底层内容
  8. Macro版Property Generator辅助工具
  9. 【视频专访】他用3年时间,从0开始打造专属大学生的IT教育品牌,只为将他们送入国内最顶尖IT名企。...
  10. 201509-2-日期计算