Intenta usar Scrapy para extraer URL de páginas web
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
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: p>
# -*- 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.