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)
上一篇 2025年9月26日 下午2:43
下一篇 2025年9月26日 下午3:15


相关推荐

  • 服务熔断治理

    服务熔断治理一 基础概念二 SpringCloudH 是基于 Netflix 的开源框架 Hystrix 实现 该框架实现了服务熔断 线程隔离等一系列服务保护功能 对于熔断机制的实现 Hystrix 设计了三种状态 1 熔断关闭状态 Closed 服务没有故障时 熔断器所处的状态 对调用方的调用不做任何限制 2 熔断开启状态 Open 在固定时间窗口内 Hystrix 默认是 10 秒 接口调用出错比率达到一个阈值 Hystrix 默认为 50

    2026年3月26日
    2
  • linux修改smb端口_sftp默认端口号是多少

    linux修改smb端口_sftp默认端口号是多少本文介绍如何在Linux操作系统中更改默认的SFTP端口,支持Ubuntu、CentOS等发行版,同时还将向您展示如何配置防火墙以允许在新端口上使用。先声明的一点是不要将SFTP与FTPS混淆,因为两种协议具有相同的目的,FTPS代表FTPSecure,它是对标准FTP协议的扩展,支持TLS。简介SFTP(SSH文件传输协议)是一种安全文件协议,用于通过加密连接在两个主机之间传输文件,它还允许您…

    2025年11月18日
    6
  • JAVA设计模式初探之适配器模式

    1. 概述  将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。2. 解决的问题  即Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。      下面是两个非常形象的例子             3. 模式中的角色  3.1 目标接口(Target):客户所期待的接

    2022年3月11日
    49
  • php发起options请求_如何避免options请求?

    php发起options请求_如何避免options请求?我用 vue cli 做一个后台 要跨域访问微信服务器 获取统计数据我用 axios 发送 post 请求 然后浏览器先发了一个 options 请求然后报错 然后 我看阮一峰的跨域资源共享 CORS 详解 如果请求字段超出如下内容 就是非简单请求 浏览器就先发 option 试探服务器是否允许跨域 1 请求方法是以下三种方法之一 HEADGETPOST 2 HTTP 的头信息不超出以下几种字段 AcceptAc

    2026年3月19日
    2
  • Coze Studio 文档处理实战(一)– 从分段策略到向量化检索的完整链路解析

    Coze Studio 文档处理实战(一)– 从分段策略到向量化检索的完整链路解析

    2026年3月12日
    2
  • java中的getClass()方法的用法

    java中的getClass()方法的用法getClass的定义以及使用方法getClass()的作用getClass()使用方式简单代码演示其他相关用法1.getName()和getCanonicalName()2.getDeclaredMethod()3.还有很多对class对象进行操作的方法getClass()的作用getClass()返回此Object的运行时该对象的类.该方法返回一个Class对象,可以通过该对象可…

    2022年6月16日
    37

发表回复

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

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