在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/人工智能  數(shù)據(jù)分析&挖掘  Python/ scrapy可不可以在Request下載前一刻更改url?關(guān)于時(shí)間戳

scrapy可不可以在Request下載前一刻更改url?關(guān)于時(shí)間戳

小弟最近寫(xiě)scrapy爬蟲(chóng),遇到一個(gè)問(wèn)題:目標(biāo)網(wǎng)站需要驗(yàn)證時(shí)間戳,如果把時(shí)間戳用普通的方式寫(xiě)進(jìn)Spider的url里面,那么肯定不行,因?yàn)镾pider的url(Request)還要被放到調(diào)度器里調(diào)度,不一定立刻能被調(diào)度上然后被下載,這樣時(shí)間戳就過(guò)期了。

然后小弟試著在下載器中間件,發(fā)現(xiàn)好像不能更改url:

    def process_request(self, request, spider):
            new_url = request.url + '&t=%s' % (self.gettime())
            request.replace(url = new_url)
            return None

發(fā)現(xiàn)上面的這個(gè)方法沒(méi)有用,查了一下好像是因?yàn)閞eplace這個(gè)方法不是在原處修改,所以對(duì)Request沒(méi)有影響。然后又試了一下這個(gè):

    def process_request(self, request, spider):
            new_url = request.url + '&t=%s' % (self.gettime())
            new_r = request.replace(url = new_url)
            return new_r

發(fā)現(xiàn)這個(gè)方法會(huì)陷入死循環(huán)。。。

求解!

回答
編輯回答
瘋子范

由于request.url是只讀的屬性,所以不能直接更改。
但看了一下源碼,可以嘗試在下載器中間件中這樣寫(xiě):

def process_request(self, request, spider):
    request._set_url(request.url + '&t=%s' % self.gettime())
2017年12月21日 17:42