requests 爬取博客园内容AttributeError: ‘NoneType‘ object has no attribute ‘xpath‘

本文介绍了当使用requests库获取网页内容时遇到'NoneType' object has no attribute 'xpath'异常的解决方法。问题源于请求头headers未设置导致的反爬策略。解决方案是添加正确的headers,模拟浏览器请求。改造后的代码成功避免了异常,能正常解析并打印出所需内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

zhuan

本篇文章主要介绍requests获取网页内容出现 'NoneType' object has no attribute 'xpath' 异常的解决思路

下面是出错的代码:

import requests
from lxml import etree
response = requests.get('https://blog.csdn.net/it_xf?viewmode=contents')
etree_html = etree.HTML(response.text)
content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')
for each in content:
replace = each.replace(‘\n’, ‘’).replace(’ ', ‘’)
if replace == ‘\n’ or replace == ‘’:
continue
else:
print(replace) 

1、错误分析

获取到的html.text 为 空字符串;所以下面抛出异常NoneType 

原因是请求Get 需要增加 headers来解决反扒;模拟浏览器请求来获取数据;

2、解决办法

首先找到需要的headers,headers 如何寻找?看下图的标记:

然后直接把上面的headers复制出来放到代码中进行改造;

改造后的代码如下:

 1 import requests
 2 from lxml import etree
 3 headers = {
 4     'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) '
 5                  'AppleWebKit/537.36 (KHTML, like Gecko) '
 6                  'Chrome/58.0.3029.110 Safari/537.36 SE 2.X MetaSr 1.0'
 7 }
 8 response = requests.get('https://blog.csdn.net/it_xf?viewmode=contents', headers = headers)
 9 etree_html = etree.HTML(response.text)
10 content = etree_html.xpath('//*[@id="mainBox"]/main/div[2]/div[1]/h4/a/text()')
11 
12 for each in content:
13     replace = each.replace('\n', '').replace(' ', '')
14     if replace == '\n' or replace == '':
15         continue
16     else:
17         print(replace)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wcyd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值