在学习xpath提取数据之前,得先了解下解析HTML代码的一些方法,如果读者想更加深入学习HTML代码等相关内容,需要去查看下前端HTML相关内容,本文仅介绍网络爬虫需要用到的部分内容。
本文介绍使用lxml模块解析HTML与XML,因其支持XPath解析方式,且在解析效率方面非常优秀。
pip install lxmllxml模块
解析HTML
parse()
etree.parse(source, parser=None, *, base_url=None)
返回加载源元素的ElementTree对象。如果没有解析器作为第二个参数提供,则使用默认解析器。
source: 可以是下列任何一种:
- 文件名/路径
- 档案对象
- 一个类似文件的对象
- 使用HTTP或FTP协议的URL
注意,从文件路径或URL解析通常更快,而不是从打开的文件对象或类文件对象。支持从gzip压缩源透明解压(除非在libxml2中显式禁用)。
base_url:
关键字允许为文档设置URL从类文件对象进行解析时。这是在寻找时需要的具有相对路径的外部实体(DTD, XInclude,…)。
fromstring()
'fromstring()'
>>> some_xml_data = "data"
>>> root = etree.fromstring(some_xml_data)
>>> etree.tostring(root)
b'data'
1、解析本地的HTML文件
# 'studio.html'
from lxml import etree
parser = etree.HTMLPaser() # 创建HTMLPaser对象
html = etree.parse('studio.html', parser=parser) # 解析本地的HTML文件
html_txt = etree.tostring(html, encoding='utf-8')# 转换字符串类型,并进行编码
html_txt.decode('utf-8')
使用tostring()可以提取出xml中所含的全部文本。
HTML()
HTML函数会自动加上html和body元素(如果原字符串没有的话),同样是返回Element类。
>>> root = etree.HTML("
datadata
")
>>> etree.tostring(root)
b'
datadata
'
注意:HTML函数的返回值依然会被当成标准XML处理。