Выход Scrapy не показывает никаких результатов - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в Scrapy & Python. Просто следуйте инструкциям по сборке скребка.

Я написал следующий код:

import scrapy


class PostsSpider(scrapy.Spider):
    name = "posts"
    allowed_domains = ['blog.scrapinghub.com']

    start_urls = [
        'https://blog.scrapinghub.com/'
    ]

    def parse(self, response):
        for post in response.css('div.post-item'):
            yield {
                'title': post.css('.post-header h2 a::text')[0].get(),
                'date': post.css('.post-header a::text')[1].get(),
                'author': post.css('.post-header a::text')[2].get()
            }
        next_page = response.css('a.next-posts-link::attr(href)').get()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)

Код просто выполняется без ошибок, но ничего не печатается. При отладке я вижу, что это не происходит внутри метода разбора. Требуется помощь.

Ответы [ 3 ]

1 голос
/ 05 апреля 2020

Контент, который вы пытаетесь получить, может быть автоматически сгенерирован с помощью javascript. Подход к этой проблеме заключается в использовании браузера без головы, такого как селен или spla sh. Их задача - загружать страницу как обычный браузер, поэтому весь контент должен быть там!

Я рекомендую использовать spla sh по двум причинам:

  • Это легче ;
  • Это сделано командой разработчиков;

Рассмотрите возможность использования проекта scrapy-spla sh, чтобы было проще интегрировать проект с НОАС sh.

0 голосов
/ 05 апреля 2020

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

0 голосов
/ 05 апреля 2020

В python, правильный отступ кода очень важен. То, как вы написали свой код, вы не сделали правильные отступы переменных и методов вашего экземпляра внутри вашего класса паука. Вам нужно добавить правильные отступы, чтобы этот код работал.

Примерно так:

import scrapy

class PostsSpider(scrapy.Spider):
    name = "posts"
    allowed_domains = ['blog.scrapinghub.com']

    start_urls = [
        'https://blog.scrapinghub.com/'
    ]

    def parse(self, response):
        for post in response.css('div.post-item'):
            yield {
                'title': post.css('.post-header h2 a::text')[0].get(),
                'date': post.css('.post-header a::text')[1].get(),
                'author': post.css('.post-header a::text')[2].get()
            }
        next_page = response.css('a.next-posts-link::attr(href)').get()
        if next_page is not None:
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...