#python #function #web-scraping
#python #функция #веб-очистка
Вопрос:
Обновить
Я пытаюсь определить функцию для списка URL-адресов, функция предназначена для печати, если определенная ссылка или сервер не найдены из исходного списка ( job_title_links
):
Это то, что у меня есть до сих пор:
from urllib.error import URLError
from urllib.error import HTTPError
from urllib.request import urlopen
job_title_links =['https://www.salario.com.br/profissao/abacaxicultor-cbo-612510/',
'https://www.salario.com.br/profissao/abade-cbo-263105/',
'https://www.salario.com.br/profissao/abanador-na-agricultura-cbo-622020/']
def try_url_exist(links):
for link in job_title_links:
try:
html=urlopen(link)
except HTTPError as e:
print(e) # not found url
except URLError as e:
print(e) # server not found
try_url_exist(job_title_links)
Однако функция возвращает мне список HTTPError 403
, даже если
URL-адрес существует.
Вывод на консоль:
HTTP Error 403: Forbidden
HTTP Error 403: Forbidden
HTTP Error 403: Forbidden
Ожидаемый вывод функции ничего не должен делать, если URL-адрес существует, и должен возвращать
либо HTTPError
или URLError
, либо имя URL-адреса, если URL-адрес не существует.
Как я мог выполнить эту задачу?
Комментарии:
1. Пожалуйста, опубликуйте полную трассировку стека, мы не видим, где происходит эта ошибка.
2. Похоже, у вас нет прав на просмотр этих страниц
Ответ №1:
Изменив urlopen()
на requests.get()
из requests
библиотеки и добавив его в пустой список, код заработал.
import requests
from urllib.error import URLError
from urllib.error import HTTPError
from urllib.request import urlopen
def try_url_exist(links):
for link in job_title_links:
try:
html=requests.get(link)
except HTTPError as e:
print(e)
except URLError as e:
print(e)
else:
print(link)
functional_links = []
functional_links = try_url_exist(job_title_links)
Комментарии:
1. Однако, безусловно, этот код можно было бы оптимизировать.
2. Использование заголовков внутри
urllib.request.Request()
и затемurllib.request.urlopen()
должно устранить проблему, с которой вы столкнулись в первую очередь.