我的爬虫运行没有麻烦,但我需要获取start_url而不是重定向的。
问题是我使用规则将参数传递给URL(比如field-keywords = xxxxx),最后得到正确的网址。
解析函数开始获取项目属性没有任何麻烦但是当我想要起始URL(真实的)时,它存储重定向的... ...
我试过了:
response.url
response.request.meta.get('redirect_urls')
两者都返回最终的url(重定向的url)而不是start_url。
有人知道为什么,或者有任何线索?
提前致谢。
答案 0 :(得分:1)
使用Spider Middleware
跟踪每个回复的起始网址:
from scrapy import Request
class StartRequestsMiddleware(object):
start_urls = {}
def process_start_requests(self, start_requests, spider):
for i, request in enumerate(start_requests):
request.meta.update(start_url=request.url)
yield request
def process_spider_output(self, response, result, spider):
for output in result:
if isinstance(output, Request):
output.meta.update(
start_url=response.meta['start_url'],
)
yield output
跟踪start_url
每个回复来自:
response.meta['start_url']
答案 1 :(得分:0)
你试过response.request.url
吗?我个人会覆盖在{meta}中添加原始网址的start_requests
方法,例如:
yield Request(url, meta={'original_request': url})
然后使用response.meta['original_request']