使用“请求”python库时分析HTTP响应时出错
我试图解析HTML页面列表中列出的IP地址。 最初,当我在parse_ip函数中调用请求参数时,我的代码运行良好。 随着功能的扩展,我决定将HTTP连接部分放入一个单独的连接函数中,然后在解析函数中调用它。 但自从我这么做之后,我的解析就不会返回任何结果, 即使我正在搜索列表中某个HTML页面中列出的IP地址 以下是我的代码片段:使用“请求”python库时分析HTTP响应时出错,python,python-requests,Python,Python Requests,我试图解析HTML页面列表中列出的IP地址。 最初,当我在parse_ip函数中调用请求参数时,我的代码运行良好。 随着功能的扩展,我决定将HTTP连接部分放入一个单独的连接函数中,然后在解析函数中调用它。 但自从我这么做之后,我的解析就不会返回任何结果, 即使我正在搜索列表中某个HTML页面中列出的IP地址 以下是我的代码片段: def connect(): for filename, source in threat.iteritems(): sessions = r
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 parseip,这里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: %s\n' % 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_ip中
打印ioc_列表,源名称错误:未定义全局名称“源”
关于修复此问题有何想法?您在发布的代码底部第二行的print语句中添加了另一个参数:
print ioc_list, source
该行中名为source的范围中没有变量,因此这就是您得到的错误。您很可能也不想在循环的每次迭代中都打印出列表的内容——您是不是打算改用
print ip
您没有从connect返回任何内容。因此,解析中的r值将始终为None。另外,while循环是多余的。如果您希望r在循环迭代之间发生变化,那么这样做才有意义。感谢您解决了这个问题,但仍然坚持另一个。。更新了我的问题:您的代码有一些问题。您如何期望函数connect的私有源变量可以被parse看到?还要考虑连接应该做什么。目前,它只连接到第一个源,然后返回requests对象。你想循环检查你的dict威胁中的所有来源吗?若是这样,您可能希望返回连接列表或使用生成器函数。最后,您可能会考虑为所有连接使用相同的请求会话,而不是为每个连接创建一个新的请求会话。我计划打印具有连续命中的HTML源的名称。因此ip_列表或ip将打印匹配的ip,并且源将是解析的页面..'source'从另一个.py文件传递到connect函数..'r=sessions.getsource,headers=create_basic_headers,PROXY={'http':http_PROXY,'https':https_PROXY}'