0

我试图忽略从我的搜索中列入黑名单的网址。'ltp_block' 包含包含不同 url 的数据。

p = re.compile('href="(.*?)" rel="nofollow"')
url = "http://www.****.**" + p.findall(current)[0]

r = requests.get(url)

上面的代码用于从 'ltp_block' 获取不同的 url。r.url 在调用时定义循环中的 url。

for each_row in blacklist:
    if(re.findall('\\b'+each_row[0]+'\\b', r.url, flags=re.IGNORECASE) != []):
        print "found"

问题- 上面的“for”循环只工作一次。当 'check' 变为 1 或主循环选择另一个 url 时,第二个 'for' 循环就像它不存在一样被简单地跳过。为什么 ?

conn = sqlite3.connect('test.db')
c = conn.cursor()
blacklist = c.execute("SELECT `name` FROM `blacklist`")
check = 0
for row in ltp_block:

        p = re.compile('versan')
        current = ltp_block[check]
        if(p.findall(current) != []):
            p = re.compile('price=(.*?)&')
            ltp = p.findall(current)[0]
            del p
        else:
            p = re.compile('Gesa: (.*?) &')
            ltp = p.findall(current)[0]
            del p

        p = re.compile('href="(.*?)" rel="nofollow"')
        url = "http://www.****.**" + p.findall(current)[0]

        r = requests.get(url)

        for each_row in blacklist:
            if(re.findall('\\b'+each_row[0]+'\\b', r.url, flags=re.IGNORECASE) != []):
                print "found"

        check = check + 1

回答 -

我不得不重新编译 blacklist = c.execute("SELECT nameFROM blacklist") 每次

我把它放在主'for'循环中,现在一切正常

4

2 回答 2

3

c.execute正在返回一个迭代器。迭代器只能迭代一次。作为一个更简单的例子,试试这个:

numbers = (x for x in xrange(10))  # a simple iterator

for number in numbers:
     print number

print "Repeat"

for number in numbers:
     print number

只有第一个循环提供任何输出,因为迭代器在第二个循环开始时已耗尽并为空。将其与以下内容进行比较:

numbers = (x for x in xrange(10))
numbers = list(numbers)  # turn the iterator into a list

for number in numbers:
     print number

print "Repeat"

for number in numbers:
     print number

哪个按预期工作。在你的情况下,你想要:

blacklist = list(c.execute("SELECT `name` FROM `blacklist`"))
于 2012-11-25T15:29:34.150 回答
1

for 循环被“简单地跳过,就像它不存在一样”的唯一方法是没有任何东西可以迭代。如果真是这样,唯一的解释就是blacklist空洞的。如果您报告的内容属实,则根本没有其他解释。

这样的事情很容易证明。在循环之前添加一个 print 语句,并打印出 的值blacklist

print "blacklist:", blacklist
for each_row in blacklist:
    ...
于 2012-11-25T14:06:55.147 回答