Scrapy 获得预重定向 url
Scrapy get pre-redirect url
我有一个抓取工具 运行 没有问题,但我需要获取 start_url 而不是重定向的抓取工具。
问题是我正在使用规则将参数传递给 URL(如 field-keywords=xxxxx)并最终得到正确的 url.
解析函数开始毫无问题地获取项目属性,但是当我想要开始时 URL(真实的)它存储重定向的...
我试过:
response.url
response.request.meta.get('redirect_urls')
returns 最后的 url(重定向的)而不是 start_url。
有人知道为什么,或者有任何线索吗?
提前致谢。
你试过response.request.url
了吗?我个人会重写 start_requests
方法,在元数据中添加原始 url,例如:
yield Request(url, meta={'original_request': url})
然后使用response.meta['original_request']
解压
使用 Spider Middleware
跟踪每个响应的开始 url:
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']
我有一个抓取工具 运行 没有问题,但我需要获取 start_url 而不是重定向的抓取工具。
问题是我正在使用规则将参数传递给 URL(如 field-keywords=xxxxx)并最终得到正确的 url.
解析函数开始毫无问题地获取项目属性,但是当我想要开始时 URL(真实的)它存储重定向的...
我试过:
response.url
response.request.meta.get('redirect_urls')
returns 最后的 url(重定向的)而不是 start_url。
有人知道为什么,或者有任何线索吗?
提前致谢。
你试过response.request.url
了吗?我个人会重写 start_requests
方法,在元数据中添加原始 url,例如:
yield Request(url, meta={'original_request': url})
然后使用response.meta['original_request']
使用 Spider Middleware
跟踪每个响应的开始 url:
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']