网络爬网中的'headers = headers'问题



我正在练习从网站抓取文本,但我的"headers=headers"有问题。当我运行.py时,它返回如下:

AttributeError: 'set' object has no attribute 'items'

我的代码如下:

import requests
import time
import re

headers = {'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
f = open('/Users/pgao/Desktop/doupo.rtf','a+')
def get_info(url):
res = requests.get(url, headers = headers)
if res.status_code == 200:
contents = re.findall('<p>(.*?)</p>', res.content.decode('utf-8'),re.S)
for content in contents:
f.write(content+'n')
else:
pass
if __name__ == '__main__':
urls = ['http://www.doupoxs.com/doupocangqiong/{}.html'.format(str(i)) for i in range(2,10)]
for url in urls:
get_info(url)
time.sleep(1)
f.close()

我很难找到使用"headers=headers"的原因,因为有些时候网络抓取不需要它,但有时它需要。我在谷歌上搜索的结果并没有那么大帮助。

标头需要是dict,但您创建了set。语法类似,但请注意以下内容如何具有密钥:值对

header = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}

从文档中,requests.get()headers必须是dict

如果您想向请求添加HTTP标头,只需向headers参数传递dict即可。

您已通过set。集合没有任何items()方法。这就是你得到这个AttributeError的原因。

headers = {'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36'}
print(type(headers))
# <class 'set'>

headers变量添加一个密钥。

headers = {'User-Agent': 'Mozilla/5.0 .....'}

编辑:已更新"用户代理"标头的键值。

最新更新