我想编写一个脚本来预取我的缓存DNS服务器的域名列表。我正在使用来自Alexa的前1,000,000个访问过的网站,可在此处获取:
http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
如何编写Python脚本来读取此CSV文件并对列出的每个域名执行“nslookup”(或更有效的方式),可能每次查询之间有一点延迟?或者有更好的方法吗?
我猜测逐行处理CSV而不是一次性读取它以最大限度地减少内存使用量是最有效的。
具体来说,我正在寻找解决此问题的策略(库,工具等......)。示例代码表示赞赏,但不是必需的。
答案 0 :(得分:3)
你可以完全坚持使用python标准模块,因为它们提供了你需要的一切。
由于open
返回一个可迭代的文件对象(不将整个文件加载到内存中),你可以使用这样的代码:
from socket import gethostbyaddr
with open('top-1m.csv') as input:
for line in input:
index, host = line.strip().split(',')
try:
output = gethostbyaddr(host)
print "%s %s is %s/%s" % (index, host, output[0], output[2])
except:
print host, "not found"
<强>结果:强>
1 facebook.com是www-slb-10-08-prn1.facebook.com/['69.171.234.21']
2 google.com是fra07s07-in-f100.1e100.net/['209.85.148.100']
3 youtube.com是fra07s07-in-f93.1e100.net/['209.85.148.93']
4 yahoo.com是ir2.fp.vip.bf1.yahoo.com/['98.139.183.24']
找不到baidu.com
我不建议使用csv
,因为每行只有两个值。如果你需要处理引用字符之类的东西,或者如果你需要编写csv文件等,请使用它。
答案 1 :(得分:0)
csv
模块,是的,你当然只是逐行阅读。为了进行DNS查找,我建议使用twisted.names.client。