Red de conocimiento informático - Conocimiento informático - Intenta usar Scrapy para extraer URL de páginas web

Intenta usar Scrapy para extraer URL de páginas web

Selector

En Scrapy, también puedes usar BeautifulSoup para analizar páginas web, pero recomendamos usar el propio Selector de Scrapy para analizar páginas web, solo por su alta eficiencia. Estoy usando el método XPath.

XPath

XPath es un lenguaje para buscar información en documentos XML. Debido a que hay muchos tutoriales en Internet, recomiendo dos aquí y no entraré en detalles. Uno es el tutorial de texto Rookie Tutorial XPath y el otro es el video tutorial de Geek Academy XPath. Este último requiere autenticación de nombre real para verlo, y personalmente no recomiendo este último porque las conferencias del profesor son muy fáciles de entender. . Créame, solo le llevará media hora comprender XPath según el tutorial y luego consolidarlo de acuerdo con mi código a continuación y podrá dominarlo.

Usar el navegador Chrome para analizar páginas web

Usamos el navegador Chrome (firefox es similar) para analizar páginas web y cómo escribir nuestro XPath. Por ejemplo, lo que queremos analizar ahora. es el título de la publicación

Haga clic derecho en el título de la publicación y seleccione Inspeccionar

Inspección

En este punto, la herramienta de depuración del navegador Chrome aparecerá y localizará automáticamente el elemento que queremos inspeccionar Después de verificar la ubicación en el código fuente

2

, podemos derivar fácilmente su XPath según la estructura del código

/*[@id=" thread_subject"]/text()

1

Hasta cierto punto, podemos analizar el título de la publicación. p> De hecho, en algún momento, también puede hacer clic derecho en el elemento directamente y seleccionar copiar xpath, pero este método tiene básicamente cero efecto en la práctica, porque es muy difícil descubrir las mismas características de varias páginas web. así que, en general, todavía tenemos que analizarlos nosotros mismos.

Generado automáticamente

Es necesario recordarles a todos un error aquí, que también se refleja en el siguiente código. Consulte el tbody que aparece cuando Scrapy coincide con xpath en este artículo. Escribí antes. Problema de etiqueta

Lo que me inspiró este pozo es que cuando encuentres un error que creas que no se puede explicar científicamente, ¡comprueba el código fuente que obtuviste!

Código

Sin más, vayamos directo al código.

Primero modificamos el archivo items.py para definir el contenido que queremos extraer

# -*- Codificación: utf-8 -*-

importar scrapy

clase HeartsongItem(scrapy.Item):

título = scrapy.Field() # Tiempo de lanzamiento

contenido = scrapy.Field() # Publicar contenido

p>

Luego vamos a heartong_spider.py y escribimos el rastreador

# -*- Codificación: utf-8 -*-

# import scrapy # Puedes escribirlo al escribir Comentar las dos últimas oraciones, pero los siguientes comentarios serían mejores

de scrapy.spiders import Spider

de scrapy.selector import Selector

de heartsong.items import HeartsongItem # Si se informa un error aquí, es el motivo de pyCharm

clase HeartsongSpider(Spider):

nombre = "heartsong "

allowed_domains = ["heartsong.top"] # Dominios que pueden rastrearse. Las páginas web que no estén en este dominio no serán rastreadas<

start_urls = [

"http //www.heartsong. top/forum.php?mod=viewthreadamp;tid=8" # URL de inicio, en este ejemplo solo se capturará esta página

]

def parse(self, respuesta):

Def parse(self, respuesta):

Delivered_domains = ["heartsong.response):

selector = Selector(respuesta) # Crear un selector

table = selector.xpath('//*[starts-with(@id, "pid")]')# Capturar todos los pisos

para cada uno en la tabla: # Para cada El piso realiza las siguientes operaciones

item = HeartsongItem() # Crear una instancia de un objeto Item

item['title'] = selector. xpath('//*[@id="thread_subject "]/text() ').extract()[0]

item['author'] = \

cada uno .xpath('tr[1]/td[@ class="pls"]/div[@class="pls favatar"]/div[@class="pi"]/div[@ class="authi"]/ a/text()').extract()[ 0]

item['post_time'] = \

cada.xpath('tr[1]/td[@class ="plc"]/div[@class=" pi"]').re(r' [0-9] -[0-9] -[0-9] [0-9] :[0-9] :[0-9

] ')[0].decode("unicode_escape")

content_list = each.xpath('. //td[@class="t_f"]').xpath('string(.)' ) .extract()

content = "".join(content_list) # Convertir la lista en una cadena

item['url'] = respuesta.url # De esta manera Obtener la URL de la página

# Eliminar saltos de línea, espacios, etc. en el contenido

# Eliminar saltos de línea, espacios, etc. en el contenido

item['url' ] = respuesta.url

item['content'] = content.replace('\r\n', '').replace(' ', '').replace( '\n', '')

Artículo de rendimiento # Pase el objeto Item creado y asignado a PipeLine para su procesamiento

Finalmente vaya a pipelines.py y guarde los datos capturados:

# -*- Codificación: utf-8 -*-

importar heartsong.settings

clase HeartsongPipeline(objeto):

def Process_item (self, item, spider):

file = open("items.txt", "a") #Abre el archivo en modo agregar, si no existe, crea el archivo

# Porque los datos del elemento están codificados en Unicode. Para verificar la validez de los datos en la consola y guardarlos,

# Cambie su codificación a utf-8

<. p>item_string = str(item_string)

file.write('\n')

file.close ()

imprimir item_string # Imprimir en la consola

devolver elemento # Los datos del elemento original se generarán en la consola, puede elegir no para escribirlo

ejecutar

Aún en el directorio del proyecto

Scrapy Crawl Heartsong

1

Mira la salida, está bien.

Salida

Mire el archivo local generado, también está bien.

Archivo local

Archivo local 2

Resumen

Esta sección cubrió el análisis de páginas, y la siguiente sección cubrirá el rastreo de múltiples páginas web de Scrapy, y es parte de lo que hará que nuestro rastreador realmente rastree. Combinando estas dos partes, puede rastrear Obtenga todo. publicaciones en mi foro.