【问题标题】:Python Lists - How do I use a list of domains with dns.resolver.query for loopPython 列表 - 如何使用带有 dns.resolver.query 的域列表进行循环
【发布时间】:2016-01-07 19:18:51
【问题描述】:
print (data[1])
ymcacanada.ca

answers = dns.resolver.query(data[1]), 'MX')
traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "dns\resolver.py", line 981, in query
File "dns\resolver.py", line 912, in query
File "dns\resolver.py", line 143, in __init__
dns.resolver.NoAnswer

我希望 data[1] 等于“ymcacanada”,因此我可以在 for 循环中调用整个数据列表,并使用 dns.resolver 查找 MX 记录。

我得到的是这个错误,当我使用 url 手动运行代码时不会发生这个错误。

接下来我要做的是将这些查找写入 .CSV

这是我目前的代码(不起作用!)

import dns
import dns.resolver
import os
import csv
import dns.resolver

file = "domains.txt"
f = open(file)
data = f.read()
f.close
list = []

for url in data:
    answers = dns.resolver.query(url, 'MX')
    for rdata in answers:
        x = [rdata.exchange, rdata.preference]
        print(x)
        list.append([x])

编辑

嘿,这里是我的全部工作代码。我确信它可以改进,但我仍在学习!

import dns
import dns.resolver
import os
import csv

##tested on python 2.7 only

errcountA = 0
errcountMX = 0
listoflists = []

with open("domains.txt") as f:
    for url in f:
        A = []
        MX = []
        url = url.strip()
        try: 
            answers = dns.resolver.query(url, 'A') ##Get the A record
            for rdata in answers:
                A.append(rdata.address) ## Add A Records to list
        except: ## Incase the URL doesnt resolve
            A = "Error resolving"
            errcountA += 1

        try: ##Get the MX record
            answers = dns.resolver.query(url, 'MX')
            for rdata in answers:
                MX.append([rdata.preference, rdata.exchange])

        except: ##incase url doesnt resolver
            MX = "Error resolving"
            errcountMX += 1

        list = [url, MX, A]
        print(list)
        listoflists.append(list)

with open('output.csv', 'wb') as csvfile: ##write the csv file
    writer = csv.writer(csvfile)
    for r in listoflists:
        writer.writerow(r)

print listoflists
print ("There were %e A record errors") %errcountA
print ("There were %f MX record errors") %errcountMX
print ("Done!")

【问题讨论】:

  • 请附上错误信息的全文。
  • 我正在尝试:(这里是愚蠢的新手。
  • 知道了 ;-) 我不得不将代码缩进 4 个空格

标签: python list python-2.7 dns resolver


【解决方案1】:

您的url 数据包括尾随换行符。使用 .strip() 从数据中删除任何前导或尾随空格。试试这个:

with open("domaints.txt") as f:
    for url in f:
        url = url.strip()
        answers = dns.resolver.query(url, 'MX')
        # Continue as before

【讨论】:

  • Rob 原谅我,但是当我运行该代码时,我仍然得到同样的错误:dns.resolver.NoAnswer
  • 哦,我想我把它剥离了 2X... 待命
  • Rob,我有一条新的错误消息:对于数据中的 url:url = url.strip() dns.resolver.query(url, "MX") 对于答案中的 rdata:x = [rdata .exchange, rdata.preference] print(x) list.append([x]) Traceback(最近一次调用最后):文件“”, 中的第 5 行AttributeError: GenericRData' 对象没有属性 'exchange'
  • 嘿 Rob 我认为某些 URL 无法解析然后程序结束。感谢您的帮助,我编写了以下(成功的)脚本! import dns import dns.resolver import os import csv list = [] with open("domains.txt") as f: for url in f: url = url.strip() print url try: answers = dns.resolver.query( url, 'A') for rdata in answers: print rdata.address list.append(rdata.address) except: print ("err") list.append("err") continue print list
猜你喜欢
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 2021-04-19
  • 2021-09-26
相关资源
最近更新 更多