python--lxml.etree爬取html内容

转载自:悠悠博客园

前言

本篇继续lxml.etree学习,在线访问接口,通过接口返回的html,解析出想要的text文本内容
环境准备:
python 3.6
lxml
requets

定位目标

爬取我的博客首页https://www.cnblogs.com/yoyoketang/左侧栏个人基本信息
先f12抓包,找到该接口地址https://www.cnblogs.com/mvc/blog/news.aspx?blogApp=yoyoketang

# coding:utf-8
import requests
import urllib3
from lxml import etree
urllib3.disable_warnings()

url = "https://www.cnblogs.com/mvc/blog/news.aspx?blogApp=yoyoketang"
r = requests.get(url, verify=False)
# print(r.text)

dom = etree.HTML(r.content.decode("utf-8"))

block = dom.xpath("//*[@id='profile_block']")

# 打印提取到的结果
t = etree.tostring(block[0], encoding="utf-8", pretty_print=True)
print(t.decode("utf-8"))

运行结果

<div id="profile_block">昵称:
<a href="https://home.cnblogs.com/u/yoyoketang/">上海-悠悠</a><br/>园龄:
<a href="https://home.cnblogs.com/u/yoyoketang/" title="入园时间:2016-11-26">1年9个月</a><br/>粉丝:
<a href="https://home.cnblogs.com/u/yoyoketang/followers/">1123</a><br/>关注:
<a href="https://home.cnblogs.com/u/yoyoketang/followees/">72</a><div id="p_b_follow"/>
<script>getFollowStatus('95cb2f22-a6b3-e611-845c-ac853d9f53ac')</script></div>

提取内容

# coding:utf-8
import requests
import urllib3
from lxml import etree
urllib3.disable_warnings()

url = "https://www.cnblogs.com/mvc/blog/news.aspx?blogApp=yoyoketang"
r = requests.get(url, verify=False)
# print(r.text)

dom = etree.HTML(r.content.decode("utf-8"))

block = dom.xpath("//*[@id='profile_block']")

t1 = block[0].xpath('text()')    # 获取当前节点文本元素
print(t1)
t2 = block[0].xpath('a')    # 定位a标签

# 打印结果
for i, j in zip(t1, t2):
    print("%s%s" % (i, j.text))

运行结果:

['昵称:', '园龄:', '粉丝:', '关注:']
昵称:上海-悠悠
园龄:1年9个月
粉丝:1123
关注:72

总结

1.获取当前节点标签名称.tag

print(block[0].tag)

div

2.获取当前节点文本

print(block[0].text)

昵称:

3.获取当前节点元素全部属性dict

print(block[0].attrib)

{'id': 'profile_block'}

4.获取当前节点某个属性

print(block[0].get(“id”))

profile_block

5.所有子节点

for i in block[0].iter():
   print(i.text)
profile_block
昵称:
上海-悠悠
None
1年9个月
None
1123
None
72
None
getFollowStatus('95cb2f22-a6b3-e611-845c-ac853d9f53ac')

6.获取当前节点下全部文本

print(block[0].xpath(‘text()’))

['昵称:', '园龄:', '粉丝:', '关注:']

7.获取本节点和子节点所有文本信息

print(block[0].xpath(‘.//text()’))

['昵称:', '上海-悠悠', '园龄:', '1年9个月', '粉丝:', '1123', 
'关注:', '72', "getFollowStatus('95cb2f22-a6b3-e611-845c-ac853d9f53ac')"]

8.获取父节点

print(block[0].getparent().tag)

body
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您遇到的错误是因为在使用lxml库的etree模块进行爬取拉勾网时,出现了"AttributeError: 'lxml.etree._ElementUnicodeResult' object has no attribute 'text'"的错误。该错误提示说明您尝试访问一个没有'text'属性的对象。 为了解决这个问题,您可以检查以下几点: 1. 确保您所爬取内容是一个具有text属性的对象。您可以使用print语句输出内容并查看结果。 2. 检查xpath表达式是否正确。确保xpath表达式能够准确地定位到您想要爬取内容。 3. 添加"/text()"来获取正确的文本内容。根据引用中的解决代码,您可以尝试在xpath表达式的末尾添加"/text()"来提取正确的文本内容。 以下是一个示例代码,演示了如何使用xpath表达式获取正确的文本内容: ```python positionName = html.xpath("//div[@class='position-head']/div/div<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [AttributeError: module 'tensorflow.compat.v1' has no attribute '](https://download.csdn.net/download/qq_38766019/86272235)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [AttributeError: 'lxml.etree._Element' object has no attribute 'translate'](https://blog.csdn.net/work_you_will_see/article/details/84637076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值