Ответ 1
Переменная "response", которая передается в parse(), содержит нужную вам информацию. Вам не нужно ничего переоценивать.
например. (Edited)
def parse(self, response):
print "URL: " + response.request.url
Как я могу получить URL запроса в функции анализа Scrapy? У меня много URL-адресов в start_urls, и некоторые из них перенаправляют мой паук на домашнюю страницу, и в результате у меня есть пустой элемент. Поэтому для хранения этих URL-адресов мне нужно использовать item['start_url'] = request.url
. Я использую BaseSpider.
Переменная "response", которая передается в parse(), содержит нужную вам информацию. Вам не нужно ничего переоценивать.
например. (Edited)
def parse(self, response):
print "URL: " + response.request.url
Объект запроса доступен из объекта ответа, поэтому вы можете сделать следующее:
def parse(self, response):
item['start_url'] = response.request.url
Вам нужно переопределить BaseSpider make_requests_from_url(url)
function, чтобы назначить start_url этому элементу, а затем использовать Request.meta
специальные клавиши передать этот элемент функции parse
from scrapy.http import Request
# override method
def make_requests_from_url(self, url):
item = MyItem()
# assign url
item['start_url'] = url
request = Request(url, dont_filter=True)
# set the meta['item'] to use the item in the next call back
request.meta['item'] = item
return request
def parse(self, response):
# access and do something with the item in parse
item = response.meta['item']
item['other_url'] = response.url
return item
Надеюсь, что это поможет.
Вместо того, чтобы хранить запрошенный URL-адрес где-то, а также обработанный обработкой URL-адрес, не в той же последовательности, как указано в start_urls
.
Используя ниже,
response.request.meta['redirect_urls']
предоставит вам список переадресаций, как ['http://requested_url','https://redirected_url','https://final_redirected_url']
Чтобы получить доступ к первому URL из списка выше, вы можете использовать
response.request.meta['redirect_urls'][0]
Подробнее см. doc.scrapy.org, упомянутый как:
RedirectMiddleware
This middleware handles redirection of requests based on response status.
URL-адреса, которые запрос отправляет (при перенаправлении), можно найти в redirect_urls
Request.metastrong > .
Надеюсь, это поможет вам