Scrap родитель-ребенок (один ко многим) - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть паук, который получает данные с родительской страницы (коллекции), затем открывает ссылку и анализирует данные из элемента коллекции. В scrapy.Item я ожидаю получить данные как с родительской, так и с дочерней страниц (заголовок коллекции будет повторяться для каждого элемента коллекции).

class MarSpider(scrapy.Spider):
    name = 'mar'
    allowed_domains = 
    start_urls = 


    def parse(self, response):

        COLLECTION_LIST = 'div.wr_collection_list'
        collections = response.css(COLLECTION_LIST)


        for collection in collections:
            loader = ItemLoader(item=FulItem(), selector=collection)
            item = loader.load_item()
            items_url = collection.css('a ::attr(href)').get() 

            if items_url:  #

                yield response.follow(items_url, callback=self.parse_items,
                                      meta={'item': item})

    def parse_items(self, response):
        ul = response.css('ul.row')
        for li in ul.css('li'):
            if li.css('span.codice ::text'):
                item = response.meta['item']
                loader = ItemLoader(item=item, selector=li)
                loader.add_xpath('desc_text', './/div/div/text()')
                yield loader.load_item()

в этом случае после каждой дочерней записи каждой итерации:

item1 collection1 desc_text_1

item2 collection1 "desc_text_1, desc_text_2"

item3 collection1 "desc_text_1, desc_text_2, desc_text_3"

1013 * что такое проблема Вот. Не могли бы вы показать рабочий пример?

1 Ответ

0 голосов
/ 09 февраля 2020
loader.add_xpath('desc_text', './/div/div/text()')

эта строка должна быть заменена на:

loader.replace_xpath('desc_text', './/div/div/text()')

, в этом случае после каждого l oop она начинается с пустого вместо добавления нового значения в массив

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...