python爬虫系列 | 您所在的位置:网站首页 › bookstore读什么 › python爬虫系列 |
lxml:python 的HTML/XML的解析器
官网文档:https://lxml.de/ 使用前,需要安装安 lxml 包 功能:1.解析HTML:使用 etree.HTML(text) 将字符串格式的 html 片段解析成 html 文档 2.读取xml文件 3.etree和XPath 配合使用 lxml-etree的使用:加载本地中的html etree.HTML(text)使用 from lxml import etree text = ''' 01 02 03 04 05 06 07 ''' html = etree.HTML(text) # 将字符串格式的文件转化为html文档 print(html) #==> 表明这是一个html文档 str = etree.tostring(html).decode() # 将html文档转化为二进制的字符串格式 print(str) # ==> 输出上面text中的内容这里首先导入lxml库的etree模块,然后声明了一段HTML文本,调用HTML类进行初始化,这样就成功构造了一个XPath解析对象。这里需要注意的是,HTML文本中的最后一个li节点是没有闭合的,但是etree.HTML模块可以自动修正HTML文本。会补全html信息。 这里我们调用tostring()方法即可输出修正后的HTML代码,但是结果是bytes类型。这里利用decode()方法将其转成str类型,结果如下 XPath 是一门在 XML/HTML 文档中查找信息的语言。XPath 可用来在 XML /HTML文档中对元素和属性进行遍历。 lxml-etree读取文件 1.获取某个标签中的具体内容 方法一:直接写到a标签 html = etree.HTML(wb_data) html_data = html.xpath('//li/a') print(html) # html文档 也就是根节点 print(html_data) #[, , , , ] 选取的元素节点 for i in html_data: print(i.text) # 通过i.text输出具体内容 方法二:在写xpath时候直接在路径后面跟/text() html = etree.HTML(wb_data) html_data = html.xpath('//li/a/text()') print(html_data)# ['first item', 'second item', 'third item', 'fourth item', 'fifth item'] for i in html_data: print(i) 2. 打开读取html文件 psrse html = etree.parse('demo01.html',etree.HTMLParser()) # 拿到整个html文档 也就是节点树 # print(html) res = html.xpath('//li') # [, , ] # print(res[0].text) # 1 输出文本 str = etree.tostring(html) #转化为二进制 str = str.decode('utf-8') # 解码 print(str) 3. 拿到某个标签属性的值 html = etree.HTML(wb_data) # 内部 html1 = etree.parse('demo01.html',etree.HTMLParser()) # 外部引入的文件 html_data = html1.xpath('//li/div/a/@href') for i in html_data: print(i) 4.我们知道我们使用xpath拿到得都是一个个的ElementTree对象,所以如果需要查找内容的话,还需要遍历拿到数据的列表。 5.绝对路径和相对路径的使用 绝对路径 一个斜杠开头 从根开始查找(以下代码仅供示范,不保证正确性) html = etree.HTML(wb_data) abs_load = html.xpath('/html/body/p/ul/li/a[@href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ]/text()') print(abs_load) 相对路径的使用 html = etree.HTML(wb_data) html_data = html.xpath('//a') print(html_data) for i in html_data: print(i) 实例 取网站的某个具体元素的xpath的路径打开控制台,选中具体的元素,右键找到copy----->Copy Xpath 自此,爬虫的lxml模块基本了解结束了,应该是对爬虫中的文件操作有了基本的认识了,文笔不好,请多包涵。有任何问题大家可以给我留言。共同探讨和进步。 |
CopyRight 2018-2019 实验室设备网 版权所有 |