【问题标题】:How to apply a customized function to a list of urls?如何将自定义功能应用于 url 列表?
【发布时间】:2021-02-18 17:05:10
【问题描述】:

更新

我正在尝试为 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) 

但是,即使在 网址存在。

控制台输出:

HTTP Error 403: Forbidden
HTTP Error 403: Forbidden
HTTP Error 403: Forbidden

如果 url 存在并且应该返回,则预期的函数输出不应执行任何操作 HTTPErrorURLError 以及当 url 不存在时的 url 名称。

我怎样才能完成这项任务?

【问题讨论】:

  • 请发布完整的堆栈跟踪,我们看不到这个错误发生在哪里。
  • 您似乎无权查看这些页面

标签: python function web-scraping


【解决方案1】:

通过将 urlopen()requests 库更改为 requests.get() 并添加它 到一个空列表,代码有效。

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)

【讨论】:

  • 不过这段代码绝对可以优化。
  • urllib.request.Request()urllib.request.urlopen() 中使用标题应该可以解决您最初遇到的问题。
猜你喜欢
  • 1970-01-01
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多