我试试这个:
for k in keywords_list:
google_add = random.choice(google_adds_list)
url = make_up_url(google_add, k, False)
if scrape_keyword_count(k, useragent_list, url, result_dir):
keyword_count = scrape_keyword_count(k, useragent_list, url, result_dir)
all_keyword_count.append(keyword_count)
print '%s Finish. Removeing it from the list' % k
keywords_list.remove(k)
else:
print "%s may run into problem, removing it from list" % google_add
google_adds_list.remove(google_add)
with open(google_adds, 'w') as f:
f.write('\n'.join(google_adds_list))
我为谷歌设置了许多反向代理服务器。服务器列表是google_add_list 我的意思是使用add i provide搜索列表中的所有项目并获取结果 如果谷歌阻止了我,scrape_keyword_count()将返回None。然后我 我需要改为另一个添加来进行搜索。但我编写的脚本将跳过关键字,无论scrape_keyword_count()成功与否
我知道在for循环中删除一个项目很危险我将在以后改进这部分
答案 0 :(得分:2)
这里的问题是你在迭代时修改列表。
在the_list [:]"中使用"代替。这将遍历列表的副本,修复您的"跳过" (遗漏元素)问题。
答案 1 :(得分:0)
也许:
new_list = []
for i in the_list:
if do_something_with(i):
continue
do_something_else(i)
new_list.append(i)
如果do_something_with(i)
成功,则继续下一个项目do_something_else(i)
。
在迭代列表时,您不能改变列表。如果需要过滤列表,而不是从旧列表中删除元素,则生成一个新元素。
答案 2 :(得分:0)
for循环将使用每个项目一次......你的代码看起来很好......但我认为你可能没有在do_something_with中返回正确的值
试试这个:
for i in the_list:
value = do_something_with(i)
print bool(value)
if value:
the_list.remove(i)
<etc> <etc>
我认为你可能总是从do_something_with
返回True