Я пытаюсь сканировать веб-сайт со скупой копией, где item_id вместе с некоторыми данными находится на одной странице, а дополнительная информация об этом элементе - на другой.
Проблема, с которой я сталкиваюсь, как назначитьдополнительная информация к тому же набору данных, найденному на странице 1?
item:
class GetIt(scrapy.Item):
ID = scrapy.Field()
name = scrapy.Field()
Соответствующая часть моего сканера:
rules = (
Rule( # first page
LinkExtractor(allow=['regex']),
callback='parse_1'
),
Rule( # second page
LinkExtractor(allow=['regex']),
callback='parse_2'
),
Rule( # index pages
LinkExtractor(allow=['regex']),
follow=True
),
)
def parse_1(self, response):
GetIt = GetIt()
GetIt['ID'] = response.xpath('regex').re_first('regex=(\d+)')
return item
def parse_2(self, response):
GetIt = GetIt()
GetIt['name'] = response.xpath('regex').extract()
Так что идея в том, что если правилосрабатывает, он извлекает новый элемент, если срабатывает правило 2, он находит страницу, которая содержит дополнительную информацию об элементах.Правило 3 получает все страницы с индексного сайта.
Таким образом, информация относится к типу страницы 1:
/ maininfo.html
Вторичная информация для элементов типа2:
/ search.php? Itemid = 303
На типе страницы 1 есть ссылка на тип страницы 2, поэтому я могу извлечь ссылку и идентификатор.
ТеоретическиЯ также мог бы просто вызвать страницу непосредственно в функции парсера:
url2 = response.xpath('code').extract_first() # get the link
scrapy.Request(url2, callback=self.parse_unitpage) # get the name from 2nd page
... somehow like this
Возможно ли это?А если нет, то как объединить данные страницы типа 1,2, если идентификатор принадлежит одному и тому же набору данных?