Как пропустить одну страницу из итераций? - PullRequest
0 голосов
/ 28 марта 2019

Как можно пропустить одну итерацию паука, если веб-страница содержит некоторые данные?

Заголовки страниц:

У нас есть несколько заголовков страниц на страницах.Я пропускаю другие данные (даты, лайки).

page 1 title: 'We like cats'  # this title is valid
page 2 title: 'This title contains WORD X...'  # this title is not valid (skip it)
page 3 title: 'Best ideas'  # this title is valid

Код:

from scrapy.spider import CrawlSpider

class Carflix(CrawlSpider):
    name = 'carflix'
    allowed_domains = ['sitex.com']
    start_urls = ['http://sitex.com/page-1.html',
                  'http://sitex.com/page-2.html',
                  'http://sitex.com/page-2.html']

    def parse(self, response):
        date = response.xpath('//div[@class="date"]/text()').extract_first()
        pagetitle = response.xpath('//div[@class="title"]/text()').extract_first()
        if 'WORD X' in pagetitle:
            # what need to do that skip adding data if page title contains 'WORD X'
        likes = response.xpath('//div[@class="likes"]/text()').extract_first()
        yield{
            'pagetitle': pagetitle,
            'date': date,
            'likes': likes,
        }

Результат должен быть:

[{
    'pagetitle': 'We like cats',
    'date': '01/01/2019',
    'likes': 200
},
{
    'pagetitle': 'Best ideas',
    'date': '02/01/2019',
    'likes': 100
}]```

1 Ответ

1 голос
/ 28 марта 2019

Просто выдайте свои результаты при указанном вами условии:


def parse(self, response):
    date = response.xpath('//div[@class="date"]/text()').extract_first()
    pagetitle = response.xpath('//div[@class="title"]/text()').extract_first()
    likes = response.xpath('//div[@class="likes"]/text()').extract_first()
    if not 'WORD X' in pagetitle:
        yield {
          'pagetitle': pagetitle,
          'date': date,
          'likes': likes,
         }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...