项目场景:
本人最近刚开始学习python的网络数据采集方面的内容,但是,当本人使用Python的requests对网页的数据进行采集时,即使已经加入了user-agent作为headers,返回的HTTP状态依旧为418。
问题描述
由于现在绝大多数网站都设有一定的反**机制,因此,使用Python的requests采集网页数据时,需要加入headers,不然就很容易被网站的反**机制识别到,进而返回状态码418。
然后本人在使用Python的requests对网页的数据进行采集时,即使已经加入了user-agent作为headers,但是,依旧无法得到结果,通过打印res发现返回的状态码是<418>。下面是部分代码的展示
def get_data(n):
base_url = 'https://book.douban.com/top250'
headers = {
'User - Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
}
params = {
'start':(n-1)*25
}
res=requests.get(base_url,headers=headers,params=params)
print(res)
get_data(1)
原因分析:
通过对代码的不断检查,发现问题出现在headers里面,本人的代码是'User - Agent',这是由于本人在对network中的user-agent进行复制的过程中,为了图方便,直接选择了复制,如图所示。
解决方案:
因此,通过对中间空格的删除,最终成功实现了http的状态码返回为<Response [200]>
总结:其实在写代码的过程中,往往遇到这类由于自己偷懒,而导致的问题,这类问题比较细小,但有时候反而不容易发现。