XPath解析中的 'Element a at 0x5308a80'是什么
话不多说,直接上代码
以链家网为例,解析网页打印出来的东西居然不是想象中的html文件,而是“<Element html at 0x52e5c10>”这么个东西。这个东西其实是一个元素,后面会介绍到。现在还是说说怎么把这个东西变成我们能看懂的html内容吧。
from lxml import etree
import requests
from lxml.html import fromstring, tostringurl = '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, tostringurl = '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, tostringurl = '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)
XPath解析中的 'Element a at 0x5308a80'是什么相关推荐
- 使用爬虫xpath解析出现“<Element p at 0x3382300>”错误
import requests from requests.exceptions import HTTPError,ConnectionError from lxml import etree url ...
- python中xpath定位_xpath最新:关于python中的xpath解析定位_爱安网 LoveAn.com
关于"xpath"的最新内容 聚合阅读 这篇文章主要介绍了关于python中的xpath解析定位,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章主要 ...
- python爬虫xpath提取数据_python爬虫三大解析库之XPath解析库通俗易懂详讲
@(这里写自定义目录标题) 使用XPath解析库 1.简介 ??XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言.适用于XML和HTML文档的 ...
- Python3使用Xpath解析网易云音乐歌手页面
Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索.通过简洁明了的路径选择表达式,它提供了强大的选择功能:同时得益于其内置的丰富的函数,它可以匹配和处理字符串.数值.时间等数据格 ...
- Python爬虫实战之xpath解析
XPath 是一门在 XML 文档中查找信息的语言,最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索. 所以在Python爬虫中,我们经常使用xpath解析这种高效便捷的方式来提 ...
- 数据解析之xpath解析
目录 xpath解析概念 原理 环境的安装 如何实例化一个etree对象 实战练习 xpath解析概念 最常用且最便捷高效.最通用的一种解析方式. 原理 1.实例化一个etree的对象,且将需要被解析 ...
- 利用lxml的xpath解析XML
文章目录 lxml.etree._Element方法及属性 方法 属性 lxml.etree.ElementTree方法及属性 方法 Element类 XPATH lxml是python的一个解析库, ...
- XPATH解析xml文件
XPATH解析xml文件 一.什么是XPATH 访问路径有 查找本地xml文件 2.解析网上xml文件 一.什么是XPATH 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中 ...
- LXML(Xpath)解析库的使用
简介 xpath是一种html和xml的查询语言,它能够在html和xml的树状结构中寻找节点 基础知识 https://mp.weixin.qq.com/s?__biz=MzAxMTkwODIyNA ...
最新文章
- 军队可以用oracle,使用Oracle JRockit 提高tomcat性能
- Java后台解析前台的get中文请求
- Python入门100题 | 第027题
- Linux加密框架 crypto RC4
- Nginx 简介和使用
- 获取另一个驱动的设备结构体_字符设备驱动的另一种写法
- 字节跳动的一面内容记录
- 【Programming Clip】点分十进制IP和长整型转换
- php pod模式,k8s pod的4种网络模式最佳实战(externalIPs )
- 配置Apache+Php+PDT(Zend Debugger)
- 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装
- 药品零售企业未建立计算机系统,新版GSP药品经营企业计算机系统要求
- Hexo博客搭建教程
- Linux—虚拟机下如何查看系统是多少位的?32 or 64
- matlab求解非线性0-1规划案例
- MySQL基础教程---创建、查询、备份数据库
- 标准SPI,Dual SPI和Qual SPI
- SpringBoot - ApplicationRunner的作用是什么?
- 2018ccpc吉林 C:JUSTICE 思维
- jmeter之请求数据参数化
热门文章
- 30天自制操作系统第9天harib06a
- Java实现窗口框架,转换金额的大小写
- 现代黄河三角洲的冲淤分区及地层特征(二)
- C语言:输入一个数,输出以该值为半径的圆面积,以该值为半径的球体表面积与体积,pi取值3.1415926536.
- 【FFmpeg】ffplay 源代码结构图+播放模式分析
- WiFi6特性,一起深入学习,OFDMA,QAM调制,BSS
- 微信接口返回的状态码
- mysql报错1593_主从复制报1593错误的处理
- 数据库实现计算工作日时间差--去除节假日及周末
- python一个月收入_我月薪5000,靠Python搞副业月入3万