使用“请求”python库时分析HTTP响应时出错

使用“请求”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

我试图解析HTML页面列表中列出的IP地址。 最初,当我在parse_ip函数中调用请求参数时,我的代码运行良好。 随着功能的扩展,我决定将HTTP连接部分放入一个单独的连接函数中,然后在解析函数中调用它。 但自从我这么做之后,我的解析就不会返回任何结果, 即使我正在搜索列表中某个HTML页面中列出的IP地址

以下是我的代码片段:

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}'