我正在练习从网站抓取文本,但我的"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 .....'}
编辑:已更新"用户代理"标头的键值。