Как применить настроенную функцию к списку URL-адресов?

#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() должно устранить проблему, с которой вы столкнулись в первую очередь.