我试图解析这些页面上列出的IP地址的HTML页面列表。最初我的代码工作得很好,我在parse_ip()
函数中调用requests()
参数。随着功能的扩展,我决定将HTTP连接部分置于单独的connect()
函数中,然后在解析函数中调用它。但是自从我这么做之后,我的解析没有返回任何结果,即使我正在搜索一个IP地址,它是在我的列表中的一个HTML页面中列出的。
def connect():
for filename, source in threat.iteritems():
sessions = requests.Session()
print "Now connecting with", source
r = sessions.get(source,
headers = create_basic_headers(),
proxies = {'http': HTTP_PROXY, 'https': HTTPS_PROXY})
def parse(ip):
counter = 0
ioc_list = []
r = connect()
while r != None:
for line in r:
if line.startswith("/") or line.startswith('n') or line.startswith("#"):
pass
else:
if ip in line:
ioc_list.append(ip)
print ioc_list
counter += 1
谁能指出我哪里错了?def parse(ip)
,这里ip作为参数传递。
* * * * * * * * *编辑
根据注释,我在connect()函数中添加了return。循环现在能够解析HTML页面以获取输入参数,但是我遇到了一个变量问题。下面是我修改后的代码:def connect():
for filename, source in threat.iteritems():
sessions = requests.Session()
print "Now connecting with", source
try:
r = sessions.get(source,
headers = create_basic_headers(),
proxies = {'http': HTTP_PROXY, 'https': HTTPS_PROXY})
return r
except:
sys.stdout.write('[!] Could not connect to: %sn' % source)
def parse(ip):
counter = 0
ioc_list = []
r = connect()
while r != None:
for line in r:
if line.startswith("/") or line.startswith('n') or line.startswith("#"):
pass
else:
if ip in line:
ioc_list.append(ip)
print ioc_list, source
counter += 1
这会导致以下错误:
第55行,在parse_ipprint ioc_list, source NameError:全局名称'source'没有定义
有什么办法吗?
您已经在您发布的代码的倒数第二行为print语句添加了另一个参数:
print ioc_list, source
在那一行没有名为source
的变量,所以这就是你得到的错误。您很可能也不希望在该循环的每次迭代中都打印出列表的内容—您是否打算使用
print ip