Python 网页抓取错误 403 + urlopen 解码问题

时间:2021-01-20 15:51:59

标签: python web-scraping

我目前正在尝试第一次提取网站信息,因此我正在严格按照教程进行操作。我开始我的代码如下:

import requests
from bs4 import BeautifulSoup


url = 'https://www.unep.org/resources?f[0]=category%3A451&f[1]=category%3A452&f[2]=category%3A453&f[3]=category%3A454&f[4]=category%3A455&f[5]=type%3A55&keywords=&'

response = requests.get(url)

但是当我运行我的代码时,我遇到了错误 403(如果我理解得很好,那是因为网站安全)

然后我尝试使用以下代码作为解决方案:

req = Request('https://www.unep.org/resources?f[0]=category%3A451&f[1]=category%3A452&f[2]=category%3A453&f[3]=category%3A454&f[4]=category%3A455&f[5]=type%3A55&keywords=&', headers={'User-Agent': 'Mozilla/5.0'})
rep = urlopen(req).read()

但是当我使用以下代码继续我的教程时:

if response.ok:
print(response.text)

我有一个错误提示:AttributeError: 'bytes' object has no attribute 'ok' and AttributeError: 'bytes' object has no attribute 'text'

然后我尝试“解码”:

response = rep.decode('utf-8')

但是我得到了: AttributeError: 'str' 对象没有属性 'ok' 并且 AttributeError: 'str' 对象没有属性 'text'

我有点迷茫,有没有办法通过获得与我的教程代码提供的结果相同的结果来解决这个问题?

1 个答案:

答案 0 :(得分:0)

认为可能没有错,也许您是在要求“激进”。无法重现该行为 - 以下代码从该网址获取所有标题。

示例

import requests
from bs4 import BeautifulSoup
headers = {"user-agent": "Mozilla/5.0"}
url = 'https://www.unep.org/resources?f[0]=category%3A451&f[1]=category%3A452&f[2]=category%3A453&f[3]=category%3A454&f[4]=category%3A455&f[5]=type%3A55&keywords=&'
r = requests.get(url,headers=headers)

print(*[h.get_text() for h in BeautifulSoup(r.text).select('h5')],sep='\n')

输出

<块引用>

提供可持续食品 珊瑚礁修复能否拯救其中之一? 最易受气候变化影响的生态系统?纪念森林 在巴西:为 200,000 名 COVID-19 受害者种植 200,000 棵树 地球状态 基于自然的解决方案中的播客实施 适应 适应规划 随着气候变化的打击越来越大, 世界必须加大努力适应非洲伟大的好消息 绿墙 关于海水淡化的五件事