Вы должны сделать запрос к этому целевому URL, чтобы увидеть, к чему он ведет
. В вашем случае вы можете просто выполнить запрос HEAD
, который не будет загружать тело целевого URL, так это сохранит пропускную способность и увеличит скорость вашего скрипта
def parse_houses(self, response):
link = response.request.meta['Links']
firm_name = response.xpath('//div[@class="hz-profile-header__title"]/h1/text()').get()
name = response.xpath('//div[@class="profile-meta__val"]/text()').get()
phone = response.xpath('//div[@class="hz-profile-header__contact-info text-right mrm"]/a/span/text()').get()
website = response.xpath('(//div[@class="hz-profile-header__contact-info text-right mrm"]/a)[2]/@href').get()
yield Request(url=website,
method="HEAD",
callback=self.get_final_link,
meta={'data':
{
'Links': link,
'Firm_name': firm_name,
'Name': name,
'Phone': phone,
'Website': website
}
}
)
def get_final_link(self, response):
data = response.meta['data']
data['website'] = response.headers['Location']
yield data
Если ваша цель - получить сайт, эта фактическая ссылка на сайт также доступна в исходном коде каждого списка, вы можете получить его по регулярному выражению, нет необходимости посещать зашифрованный URL
def parse_houses(self, response):
link = response.request.meta['Links']
firm_name = response.xpath('//div[@class="hz-profile-header__title"]/h1/text()').get()
name = response.xpath('//div[@class="profile-meta__val"]/text()').get()
phone = response.xpath('//div[@class="hz-profile-header__contact-info text-right mrm"]/a/span/text()').get()
website = re.findall(r"\"url\"\: \"(.*?)\"", response.text)[0]