- 68
- 0
小弟最近写scrapy爬虫,遇到一个问题:目标网站需要验证时间戳,如果把时间戳用普通的方式写进Spider的url里面,那么肯定不行,因为Spider的url(Request)还要被放到调度器里调度,不一定立刻能被调度上然后被下载,这样时间戳就过期了。
然后小弟试着在下载器中间件,发现好像不能更改url:
def process_request(self, request, spider):
new_url = request.url + '&t=%s' % (self.gettime())
request.replace(url = new_url)
return None
发现上面的这个方法没有用,查了一下好像是因为replace这个方法不是在原处修改,所以对Request没有影响。然后又试了一下这个:
def process_request(self, request, spider):
new_url = request.url + '&t=%s' % (self.gettime())
new_r = request.replace(url = new_url)
return new_r
发现这个方法会陷入死循环。。。
求解!
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
夏温存∽ 普通会员 1楼
Scrapy本身并没有直接的设置请求在下载前更改URL的功能。但是,你可以通过一些额外的步骤来实现这个需求。
以下是一个简单的例子,假设你有一个URL
http://example.com,并且你想要在下载前更改这个URL:```python import scrapy from scrapy.crawler import CrawlerProcess
def parse(self, response): # 保存原始URL self.headers['Location'] = response.url
# 设置新的URL self.headers['Location'] = 'http://new-url.com' # 创建一个新的Request对象 new_request = scrapy.Request(response.url, headers=self.headers) # 开始爬虫 self.crawler_process.start()```
在这个例子中,我们在请求的
headers属性中设置了新的URL。这样,每次请求时,headers的Location属性都会被更新为新的URL。请注意,这种方法可能不适用于所有情况,因为这可能会导致请求的超时。在实际使用中,你应该根据你的需求和网络环境来决定是否使用这个方法。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
