当前位置: 首页 > 知识库问答 >
问题:

从蟒蛇中的 dns 查找失败中恢复

葛昕
2023-03-14

我正在尝试检查 22,800 年数据库中的 2012 个 url,以找出哪些仍然有效。我在 PyCharm 的 Python 3.8 中使用 urllib。它通过我读入的文本文件中的前 47 个 url。然后,当找不到主机时,它会崩溃。

这是错误输出:

回溯(最近一次调用):文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”,第1350行,位于do_open h.request(req.get_method(),req。选择器,要求。数据,标题,文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第1255行,请求自身_send_request(method,url,body,headers,encode_chunked)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第1301行,位于_send_request自身。endheaders(body,encode_chunked=encode_chonked)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第1250行,位于endheaders_send_output(message_body,encode_chunked=encode_chonked)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第1010行,位于_send_output自身。send(msg)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第950行,在send self中。connect()文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\http\client.py”,第921行,位于connect self中。袜子=自身_create_connection(文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\socket.py”,第787行,在getaddrinfo(主机,端口,0,SOCK_STREAM)中res的create_cconnection中):文件“C:\ Users\rmcape\AppData \Local\ Programs\Python38-32\\lib\soccket.py”,第918行,在_socket中res在getaddrinfo中。getaddrinfo(主机、端口、系列、类型、原型、标志):套接字。gaierror:[Errno 11002]getaddrinfo失败

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用):

文件“C:/Users/rmcape/PycharmProjects/first/venv/validateURL.py”,第19行,resp=urllib.request。urlopen(req)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”,第222行,位于urlopen-return opener中。打开(url,data,timeout)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”,第525行,打开响应=self_打开(req,data)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”,第542行,in_open result=self.call_chain(self.handle_open,协议,协议文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”,第502行,in_call_chainresult=func(*args)文件“C:\ Users\rmcape\AppData \Local\ Programs\Cython\Python38-32\\lib\urllib\request.py”第1379行,在http_open return self.do_open(http.client.HTTPConnection,req)文件“C:\Users\rmcape\AppData\Local\Programs\Python\Python38-32\lib\urllib\request.py”的第1353行中,在do_open中引发URLError(err)urllib.error.URLError:

如何检测DNS查找失败并从中恢复并继续到文件中的下一个URL?还有我应该使用的其他图书馆吗?我在谷歌上搜索了我能想到的一切。谢谢你的帮助。

代码如下:

#!/bin/python
#
#validateURLs.py
import urllib
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
import responses
import socket

f = open("updatedURLs.txt", "r")
site=f.readline()
siteCount=1
errorCount=0
while site:
    site=site.strip()
    req = urllib.request.Request(site)
    try:
        resp=urllib.request.urlopen(req)
        respo=str(resp.getcode())
        result = "("+str(siteCount)+") "+respo+" ==> "+site
        print(result)
            #print(siteCount, site, resp.getcode())
    except urllib.error.HTTPError as e:
        errorCount=errorCount+1
        result="("+str(siteCount)+") "+str(e.code)+" ==> "+site
        print(result)
        print("errorCount = "+str(errorCount))
    site=f.readline()
    siteCount=siteCount+1
print(errorCount)
print("Done")

共有1个答案

陆洛城
2023-03-14

这对你有用吗?:

#!/bin/python
#
#validateURLs.py
import urllib
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
import responses
import socket

f = open("updatedURLs.txt", "r")
site=f.readline()
siteCount=1
errorCount=0
while site:
    site=site.strip()
    req = urllib.request.Request(site)
    try:
        resp=urllib.request.urlopen(req)
        respo=str(resp.getcode())
        result = "("+str(siteCount)+") "+respo+" ==> "+site
        print(result)
            #print(siteCount, site, resp.getcode())
    except Exception as e:
        errorCount=errorCount+1
        result="("+str(siteCount)+") "+str(e)+" ==> "+site
        print(result)
        print("errorCount = "+str(errorCount))
    else:
        site=f.readline()
        siteCount=siteCount+1
print(errorCount)
print("Done")
 类似资料:
  • 我正在尝试使用本教程从一个使用selenium and beautiful soup的站点提取房地产列表信息:https://medium.com/@ben.sturm/scraping-house-listing-data-using-Selenium-and-Beautiful Soup-1CBB94BA9492 目的是在找到“下一页”按钮之前收集第一页的所有href链接,导航到下一页并收集该

  • 我试图在列表中找到中位数。找到中位数的等式是 N 项/2。我尝试的代码是查找并索引该数字,但是当我索引时,我得到0或错误,为什么会这样? 这就是我所做的我还尝试了索引 这让我得到0 我怎样做才能得到中位数?我知道已经存在这样一个问题,但我想尝试一种不同的方法。

  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现