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

XPath解析中的 ‘Element a at 0x5308a80’是什么话不多说,直接上代码以链家网为例,解析网页打印出来的东西居然不是想象中的html文件,而是“<Elementhtmlat0x52e5c10>”这么个东西。这个东西其实是一个元素,后面会介绍到。现在还是说说怎么把这个东西变成我们能看懂的html内容吧。fromlxmlimportetreeimportrequestsfromlxml.htmlimport…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

话不多说,直接上代码

以链家网为例,解析网页打印出来的东西居然不是想象中的html文件,而是“<Element html at 0x52e5c10>”这么个东西。这个东西其实是一个元素,后面会介绍到。现在还是说说怎么把这个东西变成我们能看懂的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)

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

 要将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+) 

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

什么是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解析中的 'Element a at 0x5308a80'是什么

一个例子

在实际应用中,我们会在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)

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196462.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sqljdbc41.jar(Sqljdbc)

    官网下载:windows版本http://go.microsoft.com/fwlink/?LinkId=144633&amp;clcid=0x804UNIX版本http://go.microsoft.com/fwlink/?LinkId=144635&amp;clcid=0x804  推荐几个网站:http://maven.ibiblio.org/maven/http…

    2022年4月12日
    188
  • C语言函数不可以单独编译_fcntl函数

    C语言函数不可以单独编译_fcntl函数函数原型:externvoidbzero(void*s,intn);函数功能:将字节字符串s的前n个字节置为0(包括‘\0’);头文件:#include说明:bzero函数是将s的前n个字符置为零,听起来是不是跟memset函数的功能有些类似呢。事实上,bzero函数包含在string,h头文件中,而string.h曾经是POSIX标准的一部分,但是在posix.1

    2022年10月13日
    1
  • pycharm 激活码(破解版激活)

    pycharm 激活码(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    48
  • 搜索类似图_智能搜索相似图片

    搜索类似图_智能搜索相似图片—————–转载自yclzh0522的博客————————–你想凭着一张现有图片找出它的原始图片,或者是凭着一张小的缩略图找出原始大图吗?下面的十一款搜索引擎可以帮你实现,以图找图,以图搜图,以图片搜索相似的图片。1.http://tineye.com/Tineye是典型的以图找图搜索引擎,输入本地硬盘上的图片或者输入图片网址

    2022年9月11日
    3
  • jmeter性能测试实例(常用性能测试工具有哪些)

    一、测试需求:测试20个用户访问网站在负载达到30QPS时的平均响应时间二、QPS:QueryPerSecond每秒查询率。(一台查询服务器每秒能够处理的查询次数,作为域名服务器的性能经常用每秒查询率来衡量)三、测试步骤1、添加线程组(线程数+准备时长+循环次数)1)线程数:虚拟用户数,一个虚拟用户占用一个进程或线程(设置多少个虚拟用户=设置多少个线程)2)准备时长(s)…

    2022年4月10日
    84
  • android studio下gradle与Git错误解决方法

    android studio下gradle与Git错误解决方法

    2022年1月17日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号