2 回答
TA贡献1801条经验 获得超8个赞
首先,请参阅此主题-我想您会在这里找到所有答案。
下载器使用的URL的顺序?仅在使用所有start_url之后,下载程序才会使用just_test1,just_test2发出的请求吗?(我进行了一些测试,答案似乎是否定的)
您说得对,答案是No
。该行为是完全异步的:启动蜘蛛程序后,start_requests
将调用(source)方法:
def start_requests(self):
for url in self.start_urls:
yield self.make_requests_from_url(url)
def make_requests_from_url(self, url):
return Request(url, dont_filter=True)
决定订单的是什么?为什么和如何执行此命令?我们如何控制它?
默认情况下,没有预先定义的顺序-你可以不知道什么时候Requests
从make_requests_from_url
抵达的-它是异步的。
有关如何控制订单的信息,请参见此答案。长话短说,您可以使用键覆盖start_requests
并标记“ yield” (如)。例如,的值可以是找到该网址的行号。Requests
priority
yield Request(url, meta={'priority': 0})
priority
这是处理文件中已包含许多URL的好方法吗?还有什么?
我认为您应该直接在start_requests
method中读取文件并产生url :请参阅此答案。
因此,您应该这样做:
def start_requests(self):
with codecs.open(self.file_path, u"r", encoding=u"GB18030") as f:
for index, line in enumerate(f):
try:
url = line.strip()
yield Request(url, meta={'priority': index})
except:
continue
添加回答
举报