Python调用feedparser读取VMware RSS被拒绝 Chrome可正常访问
问题根因
VMware官方文档站点配置了User-Agent(用户代理)请求头校验规则,feedparser内置的HTTP请求模块默认携带的UA标识会被站点反爬策略拦截,因此返回403访问拒绝错误;Chrome浏览器发起请求时会携带标准的浏览器UA标识,符合站点校验规则,因此可以正常访问。
解决方案
提前使用requests库模拟浏览器UA发起请求获取到正常的RSS源内容后,再将内容传递给feedparser做解析即可,修改后的代码如下:
from datetime import datetime import feedparser import requests def ESXi(): # 配置模拟Chrome浏览器的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } # 先请求获取RSS源原始内容 rss_resp = requests.get("https://docs.vmware.com/en/VMware-vSphere/rn_rss.xml", headers=headers) # 传入原始内容给feedparser解析 NewsFeed = feedparser.parse(rss_resp.text) print(NewsFeed) num = len(NewsFeed.entries) # 后续业务逻辑保持不变
补充说明
feedparser的parse方法支持传入URL、本地文件路径、以及已经拉取到的XML文本内容,上述方案通过提前自行发起带合规UA的请求绕开了站点的UA校验规则,不需要修改feedparser的底层配置,适配性更高。
内容的提问来源于stack exchange,提问作者KKCH
相关产品推荐
相关产品推荐

