Scrapy не может очистить следующую страницу

Я хотел очистить информацию для следующих страниц, однако код позволяет мне очищать информацию только с первой страницы.

Мой код выглядит следующим образом:

# -*- coding: utf-8 -*-
import scrapy
from ..items import PropertyItem

class Starprop(scrapy.Spider):
name = 'starprop'
allowed_domains = ['starproperty.com']
start_urls = ['https://www.starproperty.my/to-buy/search?max_price=1000000%2B&new_launch_checkbox=on&sub_sales_checkbox=on&auction_checkbox=on&listing=For%20Sale&sort=latest&page=1']


def parse(self, response):
    item = PropertyItem ()
    property_list = response.css('.mb-4 div')

    for property in property_list:
        property_name = property.css ('.property__name::text').extract()
        property_price = property.css('.property__price::text').extract()
        property_location = property.css ('.property__location::text').extract()
        property_agent = property.css('.property__agentdetails .property__agentdetails span:nth-child(1)::text').extract()
        property_phone = property.css ('.property__agentcontacts a span::text').extract()

        item['property_name']= property_name
        item['property_price']= property_price
        item['property_location'] = property_location
        item['property_agent'] = property_agent
        item['property_phone'] = property_phone

        yield item

        next_page = response.css('.page-item:nth-child(10) .page-link::attr(href)').get()

    if next_page is not None:
        yield response.follow(next_page, callback = self.parse)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
118
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

может из-за отступа? попробуйте изменить:

    yield item

    next_page = response.css('.page-item:nth-child(10) .page-link::attr(href)').get()

if next_page is not None:
    yield response.follow(next_page, callback = self.parse)

к

    yield item

    next_page = response.css('.page-item:nth-child(10) .page-link::attr(href)').get()

    if next_page is not None:
        yield response.follow(next_page, callback = self.parse)

Привет, я попробовал ваше предложение, но до сих пор не смог очистить вторую страницу. Является ли селектор для моей второй страницы неправильным или я пропустил какие-либо другие коды?

KY Lee 13.12.2020 10:53

Пожалуйста, распечатайте все и посмотрите, что такое next_page

Yu Jiaao 13.12.2020 14:44
Ответ принят как подходящий

Это все о вашем allowed_domains (но вам также нужно исправить отступ). Также я уверен, что вы хотите определить свой элемент внутри своего цикла:

class Starprop(scrapy.Spider):
    name = 'starprop'
    allowed_domains = ['starproperty.my']
    start_urls = ['https://www.starproperty.my/to-buy/search?max_price=1000000%2B&new_launch_checkbox=on&sub_sales_checkbox=on&auction_checkbox=on&listing=For%20Sale&sort=latest&page=1']


    def parse(self, response):

        property_list = response.css('.mb-4 div')

        for property in property_list:
            property_name = property.css ('.property__name::text').extract()
            property_price = property.css('.property__price::text').extract()
            property_location = property.css ('.property__location::text').extract()
            property_agent = property.css('.property__agentdetails .property__agentdetails span:nth-child(1)::text').extract()
            property_phone = property.css ('.property__agentcontacts a span::text').extract()
            item = PropertyItem ()
            item['property_name']= property_name
            item['property_price']= property_price
            item['property_location'] = property_location
            item['property_agent'] = property_agent
            item['property_phone'] = property_phone

            yield item

        next_page = response.css('.page-item:nth-child(10) .page-link::attr(href)').get()

        if next_page:
            yield response.follow(next_page, callback = self.parse)

Другие вопросы по теме