0

此脚本确定可能数量的网站中哪些网站拥有我想要的数据。z通过 运行所有潜在网站data_grabber(item),它返回所有有效 URL 的索引列表。它还包括None无效网站的值。

import requests

a = range(0, 10)
b = 'http://www.grandexchangecentral.com/include/gecgraphjson.php?jsid=%r'

websites = []
for i in a:
    result = b % a[i]
    websites.append(result)

def data_grabber(item): 
    url = item
    r = requests.get(url, headers={'Referer': 'www.grandexchangecentral.com'})
    data = r.json
    if data != None:
        return websites.index(item)

z = [data_grabber(x) for x in websites]
z1 =  filter(None, z) 

这将返回[None, None, 2, None, None, None, 6, None, 8, None]z1缩短为[2, 6, 8]。唯一的问题是可能的网站列表可能会变得很长,因此可能需要几分钟才能Nonez. 是否可以防止z生成None项目?提前感谢您的帮助。

编辑:现在我意识到它实际上data_grabber花费了大部分时间。不过还是很高兴知道这一点。

4

1 回答 1

3

我同意@DSM 的观点,这似乎不太可能花费您太多时间。但这将避免:

filter(None, (data_grabber(x) for x in websites))

使用括号而不是括号将生成data_grabber结果生成器,filter然后生成结果列表,然后生成结果列表,而无需在其中创建包含Nones 的中间列表。


只是测试您对时间的要求:

>>> %timeit filter(None, [None for x in range(100000)])
100 loops, best of 3: 9.22 ms per loop

不完全相同,但这会列出 100,000None秒,然后在我的计算机上在 9 毫秒内将它们全部过滤掉。

于 2012-11-03T02:17:03.247 回答