网络抓取中 'headers = headers' 的问题
problem with 'headers = headers' in web crawling
我正在练习我的网络爬行以从网站获取文本,但我的 'headers = headers' 有问题。当我是 运行 .py 时,它 returns 像这样:
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' 的原因而苦苦思索,因为有时候网络抓取不需要它,但有时它需要。我用谷歌搜索的结果没有多大帮助。
header 需要是 dict
,但您创建了 set
。语法相似,但请注意以下内容如何有一个 key:value 对
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'}
来自 docs,headers
对于 requests.get()
必须是 dict
。
If you’d like to add HTTP headers to a request, simply pass in a dict
to the headers parameter.
您已经通过了 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 .....'}
编辑:更新了 "User-Agent" header.
的键值
我正在练习我的网络爬行以从网站获取文本,但我的 'headers = headers' 有问题。当我是 运行 .py 时,它 returns 像这样:
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' 的原因而苦苦思索,因为有时候网络抓取不需要它,但有时它需要。我用谷歌搜索的结果没有多大帮助。
header 需要是 dict
,但您创建了 set
。语法相似,但请注意以下内容如何有一个 key:value 对
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'}
来自 docs,headers
对于 requests.get()
必须是 dict
。
If you’d like to add HTTP headers to a request, simply pass in a
dict
to the headers parameter.
您已经通过了 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 .....'}
编辑:更新了 "User-Agent" header.
的键值