url_list = ['www.scrape.com/file1', 'www.scrape.com/file2', ''www.scrape.com/file3']
category_id_list = ['12345','abcde','ABCDE']
zip_list = ['10075','10017','10028']
我有三个变量用来创建一个被请求的URL。按顺序: url_list+zip+categoryid
然后,该url被传递到一个具有抓取代码的函数中。
我使用3for循环遍历这些列表,但这是高度冗余的
for url_ in url_list:
for category_id in category_id_list:
for zip_ in zip_list:
request_url = url_+category_zip_
func(request_url)
这样就行了,但是有没有更好的方法呢?谢谢!
发布于 2019-06-05 08:55:28
您可以使用itertools.product
import itertools
for url in (str.join("",url) for url in itertools.product(url_list,category_id_list,zip_list)):
func(url)
发布于 2019-06-05 10:14:43
这可能有点晚了,但我是这样做的:
cats = ["a","b","c","d"]
zips = ["25320","53902","59607","53123"]
base = "https://example.com"
for i in range(4):
url = "{}/{}/{}".format(base, cats[i], zips[i])
print(url)
输出:
https://example.com/a/25320
https://example.com/b/53902
https://example.com/c/59607
https://example.com/d/53123
发布于 2019-12-21 03:14:08
避免编写多个for循环的一种方法是使用zip.It,它允许您一次访问每个列表中的第i个元素。所以你可以这样做:
url_list = ['www.scrape.com/file1', 'www.scrape.com/file2', 'www.scrape.com/file3']
category_id_list = ['12345','abcde','ABCDE']
zip_list = ['10075','10017','10028']
for url, id, zip in zip(url_list, category_id_list, zip_list):
request_url = url + id + zip
func(request_url)
https://stackoverflow.com/questions/56452957
复制相似问题