urllib.request.urlopen ошибка соединения макс достигнута повторных попыток URL: как очистить сайт в обход этого? - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь очистить все страницы на этом сайте.Я написал этот код:

from bs4 import BeautifulSoup
import requests
import pandas as pd
import urllib
from urllib.request import urlopen

output = open('signalpeptide.txt', 'a')
for each_page in range(1,220000):
    if each_page%1000 == 0: #this is because of download limit
            time.sleep(5) #this is because of download limit

    url = 'http://www.signalpeptide.de/index.php?sess=&m=listspdb_bacteria&s=details&id=' + str(each_page) + '&listname='    
    page = urllib.request.urlopen(url)
    soup = BeautifulSoup(page, 'html.parser')
    tabs = soup.find_all('table')
    pd_list = pd.read_html(str(tabs[0]))
    temp_list = []
    for i in range(22):
        temp_list.append(str(pd_list[0][2][i]).strip())

    output.write(str(temp_list[1]).strip() + '\t' + str(temp_list[3]).strip() + '\t' + str(temp_list[7]).strip() + '\t' + str(temp_list[15]).strip() + '\t')
    pd_list2 =  pd.read_html(str(tabs[1]))
    output.write(str(pd_list2[0][0][1]) + '\t' + str(pd_list2[0][2][1]) + '\n')

Моему соединению отказывают в том, что я слишком много раз пробую URL (я знаю это, потому что, когда я запускаю код с запросами или url.request.urlopen, ошибка говорит'Максимальное количество повторных попыток превышено с помощью URL:':

requests.exceptions.ConnectionError: HTTPConnectionPool(host='www.signalpeptide.de', port=80): Max retries exceeded with url: /index.php?sess=&m=listspdb_bacteria&s=details&id=1000&listname= (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x11ebc0e48>: Failed to establish a new connection: [Errno 61] Connection refused'))

Другие методы, предложенные здесь также не работали, один из пользователей форума из этого поста предлагает мне сделать другое сообщение специально дляЭта проблема.

Я изучил scrapy, но я не совсем понимаю, как связать его с приведенным выше сценарием. Может кто-нибудь показать мне, как редактировать вышеуказанный сценарий, чтобы избежать ошибок, таких как:

urllib3.exceptions.NewConnectionError: <urllib3.connection.VerifiedHTTPSConnection object at 0x1114f0898>: Failed to establish a new connection: [Errno 61] Connection refused

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.signalpeptide.de', port=443): Max retries exceeded with url: /index.php?sess=&m=listspdb_bacteria&s=details&id=2&listname= (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x1114f0898>: Failed to establish a new connection: [Errno 61] Connection refused'

ConnectionRefusedError: [Errno 61] Connection refused

Я также пытался использовать urllib3:

from bs4 import BeautifulSoup
import requests
import pandas as pd
#import urllib
#from urllib.request import urlopen
import urllib3

http = urllib3.PoolManager()
output = open('signalpeptide.txt', 'a')
for each_page in range(1,220000):
    if each_page%1000 == 0: #this is because of download limit
            time.sleep(5) #this is because of download limit

    url = 'http://www.signalpeptide.de/index.php?sess=&m=listspdb_bacteria&s=details&id=' + str(each_page) + '&listname='    
    page = http.request('GET',url)
    soup = BeautifulSoup(page, 'html.parser')

с ошибкой:

    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='www.signalpeptide.de', port=80): Max retries exceeded with url: /index.php?sess=&m=listspdb_bacteria&s=details&id=1&listname= (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x11ce6f5f8>: Failed to establish a new connection: [Errno 61] Connection refused'))

Обратите внимание, что я думаю, что при первом запуске этого скриптабудет работать, это было как раз, когда я запускал его несколько раз, когда я тестировал / писал его, теперь у меня есть его, и я знаю, что он работает. Затем он запустился для первых 400 записей, а затем я получил ошибки вышеи теперь это не позволит мнеЗапустите его вообще.

Если у кого-то есть идея, как отредактировать этот скрипт, чтобы обойти максимальное количество повторений URL-адресов, особенно помните, что я уже получаю сообщение об ошибке «Отказано в соединении», я был бы признателен.

...