有没有办法在 python 中区分错误的 url(损坏、不起作用)



我有一个网址列表,我想检查其中是否有任何网址有效。我想这样做是因为我想使用谷歌 API 在每个链接中进行搜索,但是当我运行它时,我收到消息"错误请求",这似乎是因为有些链接在列表中不起作用。

我无法进入所有链接,但对于其中一些,我在谷歌浏览器上收到消息:

  1. 这是一个错误。

在此服务器上找不到请求的 URL/playMsg.html。

有没有办法做到这一点?谢谢。

这是我

代码的简化版本,我在某些项目中使用。

逻辑很简单:

  1. url发送到server_response
  2. 如果状态 == 200(url有效)->返回ok
  3. 如果状态 == 404,请尝试每 10 秒重新检查url 5 次(覆盖连接不良的情况)
  4. 如果在 5 次尝试后状态仍然是 404 ->返回bad

需要提一下,此代码不涵盖其他状态(自己实现或if status == 404:更改为if status != 200:

import requests
from time import sleep

def server_response(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
    tries = 5
    while True:
        response = requests.get(url, headers=headers, stream=True)
        status = response.status_code
        if status == 404: # u can change it to 'if status != 200:' in order to cover all status codes except 200
            print('n###################################')
            print('### THERE IS CONNECTION PROBLEM ###')
            print('Response code: %d nURI: %s' % (status, url))
            print('###################################n')
            sleep(10)
            tries -= 1
        elif status == 200:
            return 'ok'
        if tries == 0:
            return 'bad'

list_of_urls = ['www.site1.com', 'www.site2.com']
for url in list_of_urls:
    status = server_response(url)
    if status == 'ok':
        # do something
    else:
        # do something

最新更新