Scrapy: изо всех сил пытаться внедрить паука-обходчика - PullRequest
0 голосов
/ 16 марта 2020

Я пытался внедрить веб-сканер, чтобы отбирать заголовки и указывать на хакерский новостной сайт. Я успешно разбирал его, используя обычный класс scrapy.spider. Однако я хотел бы иметь надежный способ обхода ссылок с помощью экстрактора ссылок. Вот мои текущие настройки:

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class QuotesSpider(CrawlSpider):
    name = "crawl"
    allowed_domains = ['news.ycombinator.com']

    start_urls = [
        'https://news.ycombinator.com/news?p=2',
    ]


    rules = [
    Rule(LinkExtractor(allow=r'news?p=[3-9]'), callback='parse_news', follow=True)
]

    def parse_news(self, response):

        data = {}
        title = response.xpath("//td/a[@class='storylink']/text()").getall()
        point = response.xpath("//td[@class='subtext']/span/text()").getall()
        length = len(title)

        for each in range(length):
            data["title"] = title[each]
            data["point"] = point[each]
            yield data

Я не могу получить какую-либо информацию, сохраненную в json после выполнения этого.

1 Ответ

0 голосов
/ 29 марта 2020

В вашем коде много ошибок, но для первого шага вы должны исправить LinkExtractor:

Rule(LinkExtractor(allow=r'news\?p=[3-9]'), callback='parse_news', follow=True)

Знак вопроса является особенным символом в регулярных выражениях, поэтому вы должны поставить \ до этого. Далее вам необходимо исправить процесс извлечения данных в вашем for l oop.

...