话不多说,直接上代码

以链家网为例,解析网页打印出来的东西居然不是想象中的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'是什么相关推荐

  1. 使用爬虫xpath解析出现“<Element p at 0x3382300>”错误

    import requests from requests.exceptions import HTTPError,ConnectionError from lxml import etree url ...

  2. python中xpath定位_xpath最新:关于python中的xpath解析定位_爱安网 LoveAn.com

    关于"xpath"的最新内容 聚合阅读 这篇文章主要介绍了关于python中的xpath解析定位,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧... 这篇文章主要 ...

  3. python爬虫xpath提取数据_python爬虫三大解析库之XPath解析库通俗易懂详讲

    @(这里写自定义目录标题) 使用XPath解析库 1.简介 ??XPath(全称XML Path Languang),即XML路径语言,是一种在XML文档中查找信息的语言.适用于XML和HTML文档的 ...

  4. Python3使用Xpath解析网易云音乐歌手页面

    Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索.通过简洁明了的路径选择表达式,它提供了强大的选择功能:同时得益于其内置的丰富的函数,它可以匹配和处理字符串.数值.时间等数据格 ...

  5. Python爬虫实战之xpath解析

    XPath 是一门在 XML 文档中查找信息的语言,最初是用来搜寻 XML 文档的,但是它同样适用于 HTML 文档的搜索. 所以在Python爬虫中,我们经常使用xpath解析这种高效便捷的方式来提 ...

  6. 数据解析之xpath解析

    目录 xpath解析概念 原理 环境的安装 如何实例化一个etree对象 实战练习 xpath解析概念 最常用且最便捷高效.最通用的一种解析方式. 原理 1.实例化一个etree的对象,且将需要被解析 ...

  7. 利用lxml的xpath解析XML

    文章目录 lxml.etree._Element方法及属性 方法 属性 lxml.etree.ElementTree方法及属性 方法 Element类 XPATH lxml是python的一个解析库, ...

  8. XPATH解析xml文件

    XPATH解析xml文件 一.什么是XPATH 访问路径有 查找本地xml文件 2.解析网上xml文件 一.什么是XPATH 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中 ...

  9. LXML(Xpath)解析库的使用

    简介 xpath是一种html和xml的查询语言,它能够在html和xml的树状结构中寻找节点 基础知识 https://mp.weixin.qq.com/s?__biz=MzAxMTkwODIyNA ...

最新文章

  1. 军队可以用oracle,使用Oracle JRockit 提高tomcat性能
  2. Java后台解析前台的get中文请求
  3. Python入门100题 | 第027题
  4. Linux加密框架 crypto RC4
  5. Nginx 简介和使用
  6. 获取另一个驱动的设备结构体_字符设备驱动的另一种写法
  7. 字节跳动的一面内容记录
  8. 【Programming Clip】点分十进制IP和长整型转换
  9. php pod模式,k8s pod的4种网络模式最佳实战(externalIPs )
  10. 配置Apache+Php+PDT(Zend Debugger)
  11. 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装
  12. 药品零售企业未建立计算机系统,新版GSP药品经营企业计算机系统要求
  13. Hexo博客搭建教程
  14. Linux—虚拟机下如何查看系统是多少位的?32 or 64
  15. matlab求解非线性0-1规划案例
  16. MySQL基础教程---创建、查询、备份数据库
  17. 标准SPI,Dual SPI和Qual SPI
  18. SpringBoot - ApplicationRunner的作用是什么?
  19. 2018ccpc吉林 C:JUSTICE 思维
  20. jmeter之请求数据参数化

热门文章

  1. 30天自制操作系统第9天harib06a
  2. Java实现窗口框架,转换金额的大小写
  3. 现代黄河三角洲的冲淤分区及地层特征(二)
  4. C语言:输入一个数,输出以该值为半径的圆面积,以该值为半径的球体表面积与体积,pi取值3.1415926536.
  5. 【FFmpeg】ffplay 源代码结构图+播放模式分析
  6. WiFi6特性,一起深入学习,OFDMA,QAM调制,BSS
  7. 微信接口返回的状态码
  8. mysql报错1593_主从复制报1593错误的处理
  9. 数据库实现计算工作日时间差--去除节假日及周末
  10. python一个月收入_我月薪5000,靠Python搞副业月入3万