XPath解析中的 'Element a at 0x5308a80'是什么 您所在的位置:网站首页 为什么打印出来的是行程信息 XPath解析中的 'Element a at 0x5308a80'是什么

XPath解析中的 'Element a at 0x5308a80'是什么

2024-07-07 11:02| 来源: 网络整理| 查看: 265

话不多说,直接上代码

以链家网为例,解析网页打印出来的东西居然不是想象中的html文件,而是“”这么个东西。这个东西其实是一个元素,后面会介绍到。现在还是说说怎么把这个东西变成我们能看懂的html内容吧。

from lxml import etree import requests from lxml.html import fromstring, tostring url = 'http://sh.lianjia.com/ershoufang/pudong' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'} res = requests.get(url,headers=headers) tree = etree.HTML(res.text) print(tree)

 要将element转成能看懂的html内容,需要进行先tostring,然后decode编码,代码如下:

from lxml import html from html.parser import HTMLParser #转为string tree1 = html.tostring(tree[0]) #编码'utf-8' tree2 = HTMLParser().unescape(tree1.decode('utf-8')) print(tree2)

上面的代码等价于:

tree3 = html.tostring(tree[0],encoding='utf-8').decode('utf-8') print(tree3)

结果如下图,看起来舒服多了(至少有汉字能看懂了,不至于一脸懵A+) 

什么是element?

element上面说到,这个东西其实是一个元素,它的类型是'lxml.etree._Element'。

如下面的例子,element的tag值取到的是标签名,attrib获取到的是节点标签的属性,text获取到的是标签文本(例子里的标签文本为空,所以取None)

from lxml import etree import requests from lxml.html import fromstring, tostring url = 'http://sh.lianjia.com/ershoufang/pudong' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'} res = requests.get(url,headers=headers) dom_tree = etree.HTML(res.text) res = dom_tree.xpath('//li')[5] res1 = html.tostring(res) res2 = HTMLParser().unescape(res1.decode('utf-8')) print(res) print(res2) print(res.tag) print(res.attrib) print(res.text)

一个例子

在实际应用中,我们会在xpath后面加上方法取出文本值或者属性值,如下面的例子,加上“/text()”可以取出文本值,加上“/@href'”可以取出href值(节点属性其实还是用@符号就可以获取,在例子中,如果要取“data-housecode="107101428480"”中的号码,加上“/@data-housecode”即可)

from lxml import etree import requests from lxml.html import fromstring, tostring url = 'http://sh.lianjia.com/ershoufang/pudong' headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.63 Safari/537.36'} resl = requests.get(url,headers=headers) tree = etree.HTML(resl.text) res = tree.xpath('//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="title"]//a')[0] res1 = html.tostring(res) res2 = HTMLParser().unescape(res1.decode('utf-8')) #用“/text()”取出文本值 text = tree.xpath('//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="title"]//a/text()')[0] #用“/@href'”取出href值 href = tree.xpath('//ul[@class="sellListContent"]//div[@class="info clear"]//div[@class="title"]//a/@href')[0] print(res) print('===============================') print(res2) print('===============================') print(text) print('===============================') print(href)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有