Срабатывание ошибки при парсинге сайта requests.exceptions.ConnectionError
Написал парсер который сохраняет в файлы, страницы с сайта. Проблема заключается в следующем на 31 из 95 страниц срабатывает ошибка (представленная ниже). Настроил исключение (try/except для отлавливания исключений). Пробовал:
- задать
timeout=1000000.1страницы не парсятся проблемные - указать
verify=Falseдля ssl - указать
time.sleep(60) - принудительно повторять парсинг в случае срабатывания ошибки 5 раз для одной страницы Проблемные страницы не парсятся
Ошибка
requests.exceptions.ConnectionError: HTTPConnectionPool(host='*******', port=80): Max retries exceeded with url: //*******/?user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F85.0.4183.121+Safari%2F537.36&accept=%2A%2F%2A (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000018680FCAD60>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed'))
Часть логов
TaskNumber1.py[LINE:65]# INFO [2020-10-26 16:22:59,877] Парсится страница Курсы и языковые школы 90
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:22:59,879] Starting new HTTP connection (1): ********:80
<module 'ntpath' from 'C:\\Users\\Danil\\AppData\\Local\\Programs\\Python\\Python38\\lib\\ntpath.py'>
connectionpool.py[LINE:433]# DEBUG [2020-10-26 16:22:59,898] ****** "GET /inter/test.aspx?user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F85.0.4183.121+Safari%2F537.36&accept=%2A%2F%2A HTTP/1.1" 200 22135
<module 'ntpath' from 'C:\\Users\\Danil\\AppData\\Local\\Programs\\Python\\Python38\\lib\\ntpath.py'>
TaskNumber1.py[LINE:65]# INFO [2020-10-26 16:22:59,982] Парсится страница Центры тестирования 91
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:22:59,985] Starting new HTTP connection (1): ****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:24:11,058] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:24:11,059] Starting new HTTP connection (1): *****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:25:22,129] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:25:22,131] Starting new HTTP connection (1): *****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:26:33,214] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:26:33,215] Starting new HTTP connection (1): *****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:27:44,297] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:27:44,298] Starting new HTTP connection (1): *****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:28:55,364] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:28:55,365] Starting new HTTP connection (1): ****.ruhttp:80
TaskNumber1.py[LINE:78]# ERROR [2020-10-26 16:30:06,448] Неудачный парсинг повтор Библиотека 92
connectionpool.py[LINE:226]# DEBUG [2020-10-26 16:30:06,448] Starting new HTTP connection (1): *****.ru:80
connectionpool.py[LINE:433]# DEBUG [2020-10-26 16:30:06,668] http://******:80 "GET /help/phonebook.aspx?user-agent=Mozilla%2F5.0+%28Windows+NT+10.0%3B+Win64%3B+x64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F85.0.4183.121+Safari%2F537.36&accept=%2A%2F%2A HTTP/1.1" 200 None
TaskNumber1.py[LINE:65]# INFO [2020-10-26 16:30:06,794] Парсится страница Телефонная книга 93
TaskNumber1.py[LINE:85]# DEBUG [2020-10-26 16:30:06,796] [33, 38, 43, 48, 54, 56, 58, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 83, 92]
Код
class ParserSiteBGU ():
def __init__(self, URL, HEADERS):
self.URL=URL
self.HEADERS=HEADERS
def getSiteTopMenu1(self):
requests.packages.urllib3.disable_warnings()
result=requests.get(self.URL, self.HEADERS)
if result.status_code==200:
soup=BeautifulSoup(result.text, 'html.parser')
listmenu=soup.find_all('div', 'menutop')
listmenu1=listmenu[0].find_all('a')
nameList=[]
for item in listmenu1:
nameList.append({
'title': item.get_text(),
'link': "{}{}".format(self.URL, item.get('href')),
})
obj=WriteFile(nameList, self.HEADERS)
obj.functionWriteFile()
else: logging.error("Ошибка парсинга")
class WriteFile :
def __init__(self, dictionary, HEADERS):
self.dictionary=dictionary
self.HEADERS=HEADERS
def functionWriteFile (self) :
try :
path = os.getcwd()
path=str(path)+"\\"+"exercise1"
os.mkdir(path)
except FileExistsError: logging.warning("Каталог не создан")
count=len(self.dictionary)
index=0
parsing=[]
ind=0
while (count!=0):
title=str(self.dictionary[index]['title'])
link=str(self.dictionary[index]['link'])
try:
result=requests.get(link, self.HEADERS, timeout=1000000.1, verify=False)
if result.status_code==200:
soup=BeautifulSoup(result.text, 'html.parser')
listmenu=soup.find_all()
writeTextInFile=""
for item in listmenu:
writeTextInFile=writeTextInFile+item.get_text()
while writeTextInFile.find("\n\n")!=-1:
writeTextInFile=writeTextInFile.replace("\n\n", "\n")
logging.info("Парсится страница "+title + " "+str(index))
print (os.path)
while (os.path.isfile(path+"\\"+title+".txt"))==True:
logging.error("Файл существует "+title)
title=title+" "+str(index)
file = open('exercise1/'+title+".txt", 'a', encoding='utf-8')
file.write(writeTextInFile)
file.close()
index=index+1
count=count-1
else: logging.warning("Каталог не создан")
except requests.exceptions.ConnectionError:
time.sleep(60)
logging.error("Неудачный парсинг повтор "+title +" "+str(index))
if ind==5:
parsing.append(index)
index=index+1
count=count-1
ind=0
else: ind=ind+1
logging.debug(parsing)