Как использовать `yield Request ()` для управления циклом FOR в scrapy? - PullRequest
0 голосов
/ 20 октября 2019

Я создаю проект Scrapy. В моем проекте есть цикл for, который должен контролироваться результатами поиска, но ключевое слово yield Request() не будет возвращать значение. Итак, как я могу контролировать цикл в скрапе? Для получения более подробной информации см. Код ниже:

def parse_area_detail(self, response):
    for page in range(100):
        page_url = parse.urljoin(response.url, 'pg' + str(page + 1))
        yield Request(page_url, callback=self.parse_detail)
        # the pase_detail funtion will get a title list. If the title list is 
        #  empty, the for loop should be stopped.

def parse_detail(self, response):   
  title_list=response.xpath("//div[@class='title']/a/text()").extract()

Функция parse_detail получит список заголовков. Я ожидаю, что если список заголовков пуст, цикл for прекратится. Но я знаю, что мой код не работает так. Как мне изменить мой код, чтобы он работал?

1 Ответ

2 голосов
/ 20 октября 2019

Вы можете запросить следующую страницу после анализа текущей. Таким образом, вы можете продолжить, если список не пустой. Например,

start_urls = ['http://example.com/?p=1']
base_url = 'http://example.com/?p={}'

def parse(self, response):   
    title_list=response.xpath("//div[@class='title']/a/text()").extract()

    # ... do what you want to do with the list, then ...

    if title_list:
        next_page = response.meta.get('page', 1) + 1
        yield Request(
            self.base_url.format(next_page), 
            meta={'page': next_page},  
            callback=self.parse
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...