不确定这是否可能,花一些时间看看类似的问题,但仍不清楚。对于网站 url 列表,我需要以 html 为起点。
我有一个包含这些 url 列表的类,并且该类返回一个自定义迭代器,帮助我遍历这些以获取 html(下面简化)
class Url:
def __init__(self, url)
self.url = url
def fetchhtml(self)
import urllib2
response = urllib2.urlopen(self.url)
return response.read()
class MyIterator:
def __init__(self, obj):
self.obj=obj
self.cnt=0
def __iter__(self):
return self
def next(self):
try:
result=self.obj.get(self.cnt)
self.cnt+=1
return result
except IndexError:
raise StopIteration
class Urls:
def __init__(self, url_list = []):
self.list = url_list
def __iter__(self):
return MyIterator(self)
def get(self, index):
return self.list[index]
2 - 我希望能够使用 like
url_list = [url1, url2, url3]
urls = Urls(url_list)
html_image_list = {url.url: re.search('@src="([^"]+)"', url.fetchhtml()) for url in urls}
3 - 我的问题是我想批量处理所有请求,而不是让 fetchhtml 在我的列表上按顺序操作,一旦完成,然后提取图像列表。
有没有办法实现这一点,也许使用线程和队列?如果不按顺序运行,我看不到如何使我的对象的列表理解像这样工作。也许这是错误的方式,但我只想批处理由列表或字典理解中的操作发起的长时间运行的请求。先感谢您