目的
爬取某音乐网站,某歌手前三页的歌单
我的代码
import requests
url = "https://..................................."
singer_name = input("请输入歌手名字:")
for i in range(1, 4):
# 使用循环取前三页歌单
parameter = {
'以字典形式储存参数':'略'
}
#参数和url一起,就构造好了网址
header = {'origin': 'https://略',
'referer': 'http://略','user-agent': '略'}
res = requests.get(url,params=parameter,headers=header)
try:
if res.status_code == 200:
res_json = res.json()
song_list = res_json['data']['song']['list']
for music in song_list:
print(music["name"])
except Exception as error:
print(error)
报错
如题
分析
查询到的,可能的部分原因:
-
认出来是爬虫了,被限制了
加headers参数,伪装得更像一点。这里的代码中用了3个,可以更换下 user_agent
-
http的连接数超过最大限制,默认的情况下连接是Keep-alive的,所以这就导致了服务器保持了太多连接而不能再新建连接
-
请求速度过快(是本次的问题所在)
-
ip被封
解决
在循环之间加入间隔时间,这里是睡了3s
import requests
import time
url = "https://c.y.qq.com/soso/fcgi-bin/client_search_cp"
singer_name = input("请输入歌手名字:")
for i in range(1, 4):
# 使用循环取前三页歌单
parameter = {
'以字典形式储存参数':'略'
}
#参数和url一起,就构造好了网址
header = {'origin': 'https://略',
'referer': 'http://略','user-agent': '略'}
res = requests.get(url,params=parameter,headers=header)
try:
if res.status_code == 200:
res_json = res.json()
song_list = res_json['data']['song']['list']
for music in song_list:
print(music["name"])
time.sleep(3)
except Exception as error:
print(error)
网友评论