Scrapy reptil plantilla --CrawlSpider

Desde el principio de este artículo, voy a explicar el uso de los tres artículos fueron plantilla reptil Scrapy. plantilla reptil scrapy contiene cuatro plantillas:

  1. Básico: La plantilla más básica, aquí no explican;
  2. CrawlSpider
  3. XMLFeedSpider
  4. CSVFEEDSpider

En este artículo voy a explicar a la plantilla CrawlSpider.

Cero, explicar

CrawlSpider se utiliza comúnmente araña, seguir enlaces de reglas personalizadas. Para la mayoría de los sitios que rastreamos tarea puede realizarse mediante la modificación de las reglas. CrawlSpider atributos comunes son las reglas *, que es uno o más de Regla objetos muestran la forma de la tupla. Cada objeto Regla define el comportamiento de rastreo sitio de destino.

Consejo: Si tiene varios objetos Regla golpean el mismo enlace, sólo la primera entrada en vigor de un objeto de Regla.

Buscamos sintaxis Rol:

Rule(link_extractor [,callback = None] [,cb_kwargs = None] [,follow = None] [,process_links = None] [,process_request = None])

Resolución parámetros:

  • link_extractor: Enlace objeto Extrator es una expresión regular. Los principales elementos de los que se definen como extractos continúan siguiendo un enlace desde una página Web;
  • devolución de llamada: llamada de retorno, que puede ser un nombre de cadena llamada de retorno. Respuesta recibida como parámetro, o devuelve un objeto de la lista de elementos de solicitud;
  • cb_kwargs: diccionario de objetos tipo, los parámetros pasados ​​a la función de devolución de llamada;
  • seguir: ya sea para extraer enlaces de Respuesta según link_extractor de esta Regla;
  • process_links: llamada de retorno, que puede ser un nombre de cadena llamada de retorno. Esta función se llama desde link_extractor entrar en una lista enlazada. Este método se utiliza principalmente para el filtrado;
  • process_request: llamada de retorno, que puede ser un nombre de cadena llamada de retorno. Se utiliza para filtrar la Solicitud, la regla se llama la función de extraer cada solicitud.

I. Caso

Este caso es nuestro sitio de rastreo celebridad famosa, tenemos que hacer es extraer el contenido de la famosa, nombre y sello del autor, a continuación, entrar en la página de la presentación por el enlace de autor, autor de los últimos detalles de nuestro rastreo.

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


class Quotes(CrawlSpider):
    name = "quotes"
    allow_domain = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com']

    rules = (
        Rule(LinkExtractor(allow='/page/\d+'), callback='parse_quotes', follow=True),
        Rule(LinkExtractor(allow='/author/\w+_'), callback='parse_author')
    )

    def parse_quotes(self, response):
        for quote in response.css('.quote'):
            yield {
                'content': quote.css('.text::text').extract_first(),
                'author': quote.css('.author::text').extract_first(),
                'tags': quote.css('.tag::text').extract()
            }

    def parse_author(self, response):
        name = response.css('.author-title::text').extract_first()
        author_born_date = response.css('.author_born_date::text').extract_first()
        author_description = response.css('.author_description::text').extract_first()
        return ({
            'name': name,
            'author_born_date': author_born_date,
            'author_description': author_description
        })
        import scrapy
        from scrapy.spiders import CrawlSpider, Rule
        from scrapy.linkextractors import LinkExtractor


        class Quotes(CrawlSpider):
            name = "quotes"
            allow_domain = ['quotes.toscrape.com']
            start_urls = ['http://quotes.toscrape.com']

            rules = (
                Rule(LinkExtractor(allow='/page/\d+'), callback='parse_quotes', follow=True),
                Rule(LinkExtractor(allow='/author/\w+_'), callback='parse_author')
            )

            def parse_quotes(self, response):
                for quote in response.css('.quote'):
                    yield {
                        'content': quote.css('.text::text').extract_first(),
                        'author': quote.css('.author::text').extract_first(),
                        'tags': quote.css('.tag::text').extract()
                    }

            def parse_author(self, response):
                name = response.css('.author-title::text').extract_first()
                author_born_date = response.css('.author_born_date::text').extract_first()
                author_description = response.css('.author_description::text').extract_first()
                return ({
                    'name': name,
                    'author_born_date': author_born_date,
                    'author_description': author_description
                })

El código anterior Rule(LinkExtractor(allow='/page/\d+'), callback='parse_quotes', follow=True),fragmento define las reglas para rastrear todas las páginas de personajes famosos que cumplen con /page/\d+todos los enlaces se considera página favorita dichos, y luego llamar al método parse_quotes para extraer los datos pertinentes. En Rule(LinkExtractor(allow='/author/\w+_'), callback='parse_author')el fragmento que hemos definido las reglas que se arrastran las páginas de información que cumplen con /author/\w+_todos los enlaces se considera la página de información del autor, y luego llamamos al método parse_author para extraer los datos pertinentes.
) 代码段中我们定义了爬取作者信息页的规则,即只要符合/ Autor / \ w + _``` de todos los enlaces se considera la página de información del autor, y luego llamamos al método parse_author para extraer los datos pertinentes.

Publicados 204 artículos originales · ganado elogios 101 · Vistas de 350.000 +

Supongo que te gusta

Origin blog.csdn.net/gangzhucoll/article/details/103707341
Recomendado
Clasificación