Maison  >  Questions et réponses  >  le corps du texte

python用requests递归查询页面 报错 ChunkedEncodingError

我想用递归的方式查询一个网页下面的所有后续页面 /index.php /index_2.php 这样。

pages = set()
def searchAllPages(url, name):
    '''获得所有页面链接'''
    global pages
    ObjUrl = BaseUrl + url
    regular_str = r"\/%s\/index_*[0-9]*\.php" % name
    
    time.sleep(1)
    try:
        r = requests.get(ObjUrl)
    except (requests.ConnectionError, requests.HTTPError) as e:
        return
    else:
        bsObj = BeautifulSoup(r.text,'lxml')
    

    links = bsObj.find_all('a', href=re.compile(regular_str))
    links = [i.attrs['href'] for i in links]
    for link in links:
        if link not in pages:
            # 新页面
            pages.add(link)
            searchAllPages(link, name)
     

运行后报错 提示

equests.exceptions.ChunkedEncodingError: ("Connection broken: ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None)", ConnectionResetError(10054, '远程主机强迫关闭了一个现有的连接。', None, 10054, None))

请问这个问题是如何引起的?
我该如何解决?

已经在多处搜索这个问题的原因。始终没找到符合我的答案。

但不是每次都失败的样子。。
找到一个比较符合我想法的答案,就是可能我的访问量和速度太频繁,被对面认为是攻击而关闭。
请问还有没 其他更合理的解释?

大家讲道理大家讲道理2741 Il y a quelques jours909

répondre à tous(4)je répondrai

  • PHPz

    PHPz2017-04-18 09:45:00

    Peut-être que le serveur de l'autre partie a effectué un anti-crawling. Essayez d'ajouter l'en-tête manuellement aux requêtes

    .

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 09:45:00

    Vous n'avez pas donné d'adresse Url spécifique, donc c'est difficile à tester~

    Vous pouvez essayer de le réécrire en multi-threading et utiliser une file d'attente pour gérer les URL qui doivent être explorées.

    répondre
    0
  • 高洛峰

    高洛峰2017-04-18 09:45:00

    Vous pouvez ajouter un en-tête et réessayer d'y accéder.

    répondre
    0
  • 阿神

    阿神2017-04-18 09:45:00

    Merci pour la réponse. Après avoir ajouté l'en-tête, je l'ai exécuté 3 ou 4 fois et aucune erreur n'a été signalée
    J'aime !

    répondre
    0
  • Annulerrépondre