Я новичок, и я написал скрипт в Python Scrapy для получения информации рекурсивно.
Сначала он очищает ссылки города, включая информацию о турах, затем отслеживает все города и достигает их страниц. Далее, он получает необходимую информацию о турах, связанных с городом, прежде чем перейти к следующим страницам, и так далее. Разбивка на страницы выполняется на java-скрипте без видимой ссылки.
Команда, которую я использовал для получения результата вместе с выводом csv:
scrapy crawl pratice -o practice.csv -t csv
Ожидаемый результат - файл CSV:
title, city, price, tour_url
t1, c1, p1, url_1
t2, c2, p2, url_2
...
Проблема в том, что CSV-файл пуст. Запуск останавливается на "parse_page" и callback = "self.parse_item" не работает. Я не знаю, как это исправить. Возможно, мой рабочий процесс неверен или в моем коде есть проблемы. Спасибо за вашу помощь.
name = 'practice'
start_urls = ['https://www.klook.com/vi/search?query=VI%E1%BB%86T%20NAM%20&type=country',]
def parse(self, response): # Extract cities from country
hxs = HtmlXPathSelector(response)
urls = hxs.select("//div[@class='swiper-wrapper cityData']/a/@href").extract()
for url in urls:
url = urllib.parse.urljoin(response.url, url)
self.log('Found city url: %s' % url)
yield response.follow(url, callback=self.parse_page) # Link to city
def parse_page(self, response): # Move to next page
url_ = response.request.url
yield response.follow(url_, callback=self.parse_item)
# I will use selenium to move next page because of next button is running
# on javascript without fixed url.
def parse_item(self, response): # Extract tours
for block in response.xpath("//div[@class='m_justify_list m_radius_box act_card act_card_lg a_sd_move j_activity_item js-item ']"):
article = {}
article['title'] = block.xpath('.//h3[@class="title"]/text()').extract()
article['city'] = response.xpath(".//div[@class='g_v_c_mid t_mid']/h1/text()").extract()# fixed
article['price'] = re.sub(" +","",block.xpath(".//span[@class='latest_price']/b/text()").extract_first()).strip()
article['tour_url'] = 'www.klook.com'+block.xpath(".//a/@href").extract_first()
yield article