Как очистить данные с главной страницы списков, а также страницу подробностей для этого конкретного списка, используя scrapy - PullRequest
0 голосов
/ 02 мая 2019

Я сканирую веб-сайт с объявлениями о недвижимости, и «Купить / Арендовать» можно найти только на странице со списком. Я извлек другие данные со страницы сведений, проанализировав каждый URL-адрес метода parse_property из метода parse, однако я не удалось получить тип предложения с главной страницы списка.

Я пытался сделать это так же, как я анализировал отдельные URL-адреса. (Код с комментариями)


    def parse(self, response):
        properties = response.xpath('//div[@class="property-information-address"]/a')
            for property in properties:
                url= property.xpath('./@href').extract_first()
                yield Request(url, callback=self.parse_property, meta={'URL':url})
    # TODO: offering

    # offering=response.xpath('//div[@class="property-status"]')
    #     for of in offerings:
    #         offering=of.xpath('./a/text()').extract_first()
    #         yield Request(offering, callback=self.parse_property, meta={'Offering':offering})

        next_page=response.xpath('//div[@class="pagination"]/a/@href')[-2].extract()
        yield Request(next_page, callback=self.parse)

    def parse_property(self, response):
        l = ItemLoader(item=NPMItem(), response=response)
        url=response.meta.get('URL')
        #offer=response.meta.get('Offering')
        l.add_value('URL', response.url)
        #l.add_value('Offering', response.offer)

1 Ответ

1 голос
/ 02 мая 2019

Вы можете попробовать положиться на элемент, который выше в DOM-дереве, и отсканировать как тип свойства, так и ссылку оттуда. Проверьте этот пример кода, он работает:

def parse(self, response):
    properties = response.xpath('//div[@class="property-listing"]')
    for property in properties:
        url = property.xpath('.//div[@class="property-information-address"]/a/@href').get()
        ptype = property.xpath('.//div[@class="property-status"]/a/text()').get()
        yield response.follow(url, self.parse_property, meta={'ptype': ptype})

    next_page = response.xpath('//link[@rel="next"]/@href').get()
    if next_page:
        yield response.follow(next_page, callback=self.parse)

def parse_property(self, response):
    print '======'
    print response.meta['ptype']
    print '======'
    # build your item here, printing is only to show content of `ptype`
...