我有一个IP地址的文本文件,每个地址都在自己的行中。下面的脚本将遍历列表并查询站点以查找与IP匹配的域并将其打印到文件中。如果每个IP都有一个结果,那么这个工作正常,但是当站点不返回域时,我会得到以下错误,即BeautifulSoup
与属性不匹配,并且脚本失败。
AttributeError:“NoneType”对象没有“contents”属性
我试着在里面加一个if语句,但没能成功。
如果在该属性中找不到域,如何使脚本打印“no result”并继续通过其余IP?
import urllib2
from BeautifulSoup import BeautifulSoup
import StringIO
ipfile = open("test.txt", "r")
for line in ipfile:
line = line.strip()
site = 'http://bgp.he.net/ip/' + line + '#_dns'
#print site
s = StringIO.StringIO(site)
for line2 in s:
req = urllib2.Request(line2)
req.add_header('User-agent', 'Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0')
html = urllib2.urlopen(req)
soup = BeautifulSoup(html.read())
#print soup.prettify()
results = soup.find("div", {"id": "dns"}).a.contents
results = '\n'.join(results)
print results
f = open('out.txt', 'a')
print >>f, results
f.close
最佳答案
使用try
/except
表示error handling。
try:
soup = BeautifulSoup(html.read())
#print soup.prettify()
results = soup.find("div", {"id": "dns"}).a.contents
results = '\n'.join(results)
print results
f = open('out.txt', 'a')
print >>f, results
f.close
except:
print 'No result'
如果
try
块中发生任何错误,则它将立即停止,并转到except
块。这会让你的代码继续运行,而不会让一切停止。如果您想获得真正的特定信息,可以告诉python只处理特定类型的异常,在这种情况下,您可以执行以下操作:
except AttributeError:
而不是except:
关于python - BeautifulSoup找不到属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32020773/