requests.exceptions.ConnectionEr

2020-05-30  本文已影响0人  山竹山竹px

目的

爬取某音乐网站,某歌手前三页的歌单

我的代码

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)

报错

如题

分析

查询到的,可能的部分原因:

  1. 认出来是爬虫了,被限制了

    加headers参数,伪装得更像一点。这里的代码中用了3个,可以更换下 user_agent

  2. http的连接数超过最大限制,默认的情况下连接是Keep-alive的,所以这就导致了服务器保持了太多连接而不能再新建连接

    请参考: http://www.chenxm.cc/article/255.html

  3. 请求速度过快(是本次的问题所在)
  4. 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)
上一篇 下一篇

猜你喜欢

热点阅读