Синтаксис правил запрета Scrapy - PullRequest
0 голосов
/ 13 июля 2020

Я совершенно новичок в scrapy и python, однако мой проект и мои знания успешно развиваются благодаря замечательным людям здесь! Чтобы завершить sh моего паука, мне просто нужно настроить некоторые части URL (например, все URL, содержащие bottom.htm , панель действий или такие как ? ? *), который scrapy следует использовать для фильтрации. Но мне кажется, что я борюсь с синтаксисом регулярных выражений, так что поисковый робот хотя бы бегает по странице, но не фильтрует. Кто-нибудь здесь, чтобы объяснить мне, что я делаю не так?

Вот паук:

import scrapy

from scrapy.loader import ItemLoader

from ..items import NorisbankItem

from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule

class NorisbankSpider(CrawlSpider):

    name = "nbtest"

    allowed_domains = ['norisbank.de']

    start_urls = ['https://www.norisbank.de']

    custom_settings={ 'FEED_URI': "norisbank_%(time)s.json",

                      'FEED_FORMAT': 'json',

                      }

    rules = (

        Rule(

            LinkExtractor(allow=(''),

                          deny=('\*start\.do\?*',

                                '\*WT\.mc_id*',

                                '\*.js',

                                '\*.ico',

                                '\*_frame\.htm*',

                                '\*actionbar*',

                                '\*actionframe*',

                                '\*bottom\.htm*',

                                '\*navbar_m\.html',

                                '\*top\.htm*',

                                '\*expandsection*\.*',

                                '\*\?*\?*',

                                '\*\.xml',

                                '\*kid=*',

                                '\*\/dienste\/*',

                                '\*\.do',

                                '\*\.db',

                                '\*redirect',

                                '\*.html\?pi_*',

                          ),

            ),

           callback='parse_item',

           follow=True

           ),

         )

 

    def parse(self, response):

        page = response.url.split("/")[-2]

        filename = 'nbtest-%s.html' % page

        with open(filename, 'wb') as f:

            f.write(response.body)

        self.log('Saved file %s' % filename)

        #Content Extraction

        print(response.url)

        l = ItemLoader(NorisbankItem(), response=response)

        l.add_xpath('sitename', "//meta[@property='og:site_name']/@content")

        l.add_xpath('siteurl', "//link[@rel='canonical']/@href")

        l.add_xpath('dbCategory',"//meta[@name='dbCategory']/@content")

        l.add_css('title','title::text')

        l.add_xpath('descriptions',"normalize-space(//meta[@name='description']/@content)")

        l.add_xpath('date',"//meta[@name='date']/@content")

        l.add_xpath('version',"//meta[@name='v']/@content")

        l.add_xpath('time',"//meta[@name='time']/@content")

        l.add_xpath('sitecontent','//body//p//text()')

        yield l.load_item()

        all_pages = response.xpath('//a[contains(@href, "html")]/@href').getall()

        for next_page in all_pages :

            next_page = response.urljoin(next_page)

            yield scrapy.Request(next_page, callback=self.parse)

1 Ответ

0 голосов
/ 13 июля 2020

В принципе, я хочу, чтобы использовались эти правила, однако синтаксис не работает:

rules = (

    Rule(
        LinkExtractor(allow=(''),
                      deny=('\*start\.do\?*',
                            '\*WT\.mc_id*',
                            '\*.js',
                            '\*.ico',
                            '\*_frame\.htm*',
                            '\*actionbar*',
                            '\*actionframe*',
                            '\*bottom\.htm*',
                            '\*navbar_m\.html',
                            '\*top\.htm*',
                            '\*expandsection*\.*',
                            '\*\?*\?*',
                            '\*\.xml',
                            '\*kid=*',
                            '\*\/dienste\/*',
                            '\*\.do',
                            '\*\.db',
                            '\*redirect',
                            '\*.html\?pi_*',
                      ),
        ),
       callback='parse_item',
       follow=True
        ),
     )
...