@naruto_hokagi

Как в scrapy осуществить переход на след страницу?

Здравствуйте пишу парсер новостей на scrapy, мне нужно что бы он начинал парсить со стартового url открывал каждую новость извлекал данные, дальше переходил на след страницу и проделывал всетоже самое. У меня парсит только первую, а дальше идти не хочет

class GuardianSpider(CrawlSpider):
	name = 'guardian'
	allowed_domains = ['theguardian.com']
	start_urls = ['https://www.theguardian.com/world/europe-news']

	rules = (
		Rule(LinkExtractor(restrict_xpaths=("//div[@class='u-cf index-page']",),
							allow=('https://www.theguardian.com/\w+/\d+/\w+/\d+/\w+',)),
		callback = 'parser_items'),
		Rule(LinkExtractor(restrict_xpaths=("//div[@class='u-cf index-page']",),
							allow=('https://www.theguardian.com/\w+/\w+?page=\d+',)),
		follow = True),
		)
  • Вопрос задан
  • 928 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Verz1Lka
Web scraping expert
Вообще, я бы использовал `BaseSpider` а не `CrawlSpider` и вручную прописал бы xpaths для next_page и news.
Что-то типа такого:
def parse(self, response):
    news_css = 'div.fc-item__container > a::attr(href)'
    for news_link in response.css(news_css).extract():
        req = scrapy.Request(response.follow(url=news_link, callback=self.parser_items)
        yield req

    next_page_css = 'div.pagination__list > a::attr(href)'
    for nextpage_link in response.css(news_css).extract():
        req = scrapy.Request(response.follow(url=nextpage_link, callback=self.parse)
        yield req


P.S. Код не тестировал, но я думаю, смысл понятен. Обычно, с такими пауками проще работать чем с BroadCrawl
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы