使用 python 库时解析 HTTP 回复时出错"requests"



我试图解析这些页面上列出的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

最新更新