Mi experiencia de aprendizaje del rastreador web en 2022

Tabla de contenido

1. Experiencia de aprendizaje

2. El módulo pip utilizado por los rastreadores y las funciones correspondientes

3. Código único del rastreador web y resultados

Cuatro, rastreador de marco scrapy

Cinco, construcción Gerapy


1. Experiencia de aprendizaje

       Este semestre, comencé a ponerme en contacto con los rastreadores web, desde el conocimiento básico de los rastreadores, hasta la captura simple de información de la página web y el procesamiento simple de datos, el almacenamiento de datos en la base de datos MySQL, la base de datos MongoDB e incluso la aplicación del rastreador scrapy y gerapy. frameworks, tengo una comprensión general de los rastreadores de datos. El trabajo del rastreador es primero obtener la página web, luego enviar una solicitud al servidor para obtener información, almacenar los datos extraídos y automatizar el programa.

       Todo es difícil al principio, hay muchos conocimientos básicos que deben entenderse al comienzo del aprendizaje, es común informar errores de código, así como la instalación de software y la instalación de varias bibliotecas, que son fáciles. cometer errores. En el proceso de aprender reptiles, encontré muchos problemas. Al consultar a maestros, compañeros de clase, Baidu, CSDN, etc., resolví los problemas, aprendí muchos conocimientos nuevos, acumulé experiencia y me volví más riguroso. Creo que es muy gratificante poder capturar los datos que quiero. Cada vez que veo el funcionamiento exitoso del código y los datos se rastrean continuamente, estaré lleno de alegría después de verlos, lo que mejora enormemente mi comprensión. de rastreadores Motivación para aprender. La tecnología siempre se está desarrollando y mejorando, las páginas web también han adoptado varias medidas de protección, los rastreadores y anti-rastreadores luchan constantemente, como la detección de WebDiver, el cifrado de parámetros, la compresión de código de front-end, etc., para lograr un rastreo de datos eficiente, y There hay muchas cosas que aprender.

2. El módulo pip utilizado por los rastreadores y las funciones correspondientes

urllib: configure la información de encabezado relevante y luego establezca una conexión de solicitud con el sitio web. Después de establecer la conexión de solicitud, puede obtener los datos generales de la página web

solicitudes: se utiliza para enviar solicitudes de red, de acuerdo con los requisitos del otro servidor, puede usar GET, POST y PUT para realizar solicitudes. Y puede disfrazar el encabezado de la solicitud, usar el acceso de proxy, etc.

pandas: pandas es una herramienta basada en NumPy, una biblioteca de código abierto con licencia BSD que proporciona estructuras de datos y herramientas de análisis de datos fáciles de usar y de alto rendimiento.

pymysql: una biblioteca para rastreadores que viene con Python, su función principal es simular navegadores para enviar solicitudes a través del código.

pymongo: Es un programa para operar la base de datos mongodb en python.El operador puede usar sintaxis python + sintaxis mongodb para operar la base de datos mongodb en python. Los datos se almacenan como un documento y la estructura de datos es un par clave-valor, similar a un objeto JSON, que también se puede tratar como un diccionario de Python.

BeautifulSoup: BeautifulSoup es una biblioteca de análisis de páginas web flexible y conveniente que maneja el contenido y admite múltiples analizadores. Usándolo, puede realizar fácilmente el rastreo de información de la página web sin escribir expresiones regulares.

Numpy: el módulo numpy admite una gran cantidad de cálculos matriciales y métodos de cálculo vectorial de alto orden, y también proporciona una función muy rica.

Sqlalchemy: Es un framework ORM bajo el lenguaje de programación Python, el framework está construido sobre la API de la base de datos y utiliza el mapeo de objetos relacionales para las operaciones de la base de datos.

lxml: es un analizador HTML/XML, la función principal es cómo analizar y extraer datos HTML/XML.

json: es un formato ligero de intercambio de datos que facilita la lectura y escritura de las personas. Al mismo tiempo, también es conveniente que las máquinas analicen y generen.

gerapy: es un marco de gestión de rastreadores distribuidos que admite Python 3. Basado en el desarrollo de Scrapy, Scrapyd, Scrapyd-Client, Scrapy-Redis, Scrapyd-API, Scrapy-Splash, Jinjia2, Django, Vue.js, Gerapy puede ayudarnos a: Es más conveniente controlar el funcionamiento de los rastreadores, ver el estado de los rastreadores de manera más intuitiva, ver los resultados del rastreo en tiempo real, realizar la implementación del proyecto más fácilmente y realizar la administración del host de manera más uniforme.

3. Código único del rastreador web y resultados

Rastrear datos y guardarlos en MySQL

 resultado

 Rastrear datos y guardarlos en MongoDB

resultado

Cuatro, rastreador de marco scrapy

(1) Descripción paso a paso de cómo se configuran los elementos, los middlewares, las canalizaciones y las configuraciones y los códigos correspondientes.

Use scrapy.Field() para crear campos de almacenamiento de datos y defina title , url , date , content , site , item , student_id , estos siete campos se rastrearán.

import scrapy
class NewsdataItem(scrapy.Item):
    title = scrapy.Field()  #文章标题
    url = scrapy.Field()   #文章链接
    date = scrapy.Field()   #发布日期
    content = scrapy.Field()   #文章正文
    site = scrapy.Field()  #站点
    item = scrapy.Field()   #栏目
    student_id = scrapy.Field()  #学号

 2. programas intermedios

Las dos clases SpiderMiddleware y DownloaderMiddleware no necesitan cambiarse de forma predeterminada y es necesario agregar encabezados a esta parte.

# 添加Header
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
from scrapy.utils.project import get_project_settings
import random
 
settings = get_project_settings()
 
class RotateUserAgentMiddleware(UserAgentMiddleware):
    def process_request(self, request, spider):
        referer = request.url
        if referer:
            request.headers["referer"] = referer
        USER_AGENT_LIST = settings.get('USER_AGENT_LIST')
        user_agent = random.choice(USER_AGENT_LIST)
        if user_agent:
            request.headers.setdefault('user-Agent', user_agent)
            print(f"user-Agent:{user_agent}")

3.tuberías

el host, el puerto, el nombre de la base de datos y el nombre de la hoja corresponden a la dirección IP, el número de puerto, el nombre de la base de datos y el nombre de la tabla en la configuración. Use insert_one al escribir datos.

# 添加必备包和加载设置
import pymongo
from scrapy.utils.project import get_project_settings
 
settings = get_project_settings()
 
class NewsdataPipeline:
    # class中全部替换
    def __init__(self):
        host = settings["MONGODB_HOST"]
        port = settings["MONGODB_PORT"]
        dbname = settings["MONGODB_DATABASE"]
        sheetname = settings["MONGODB_TABLE"]
        # username = settings["MONGODB_USER"]
        # password = settings["MONGODB_PASSWORD"]
        # 创建MONGODB数据库链接
        #client = pymongo.MongoClient(host=host, port=port, username=username, password=password)
        client = pymongo.MongoClient(host=host, port=port)
        # 指定数据库
        mydb = client[dbname]
        # 存放数据的数据库表名
        self.post = mydb[sheetname]
 
    def process_item(self, item, spider):
        data = dict(item)
        # 数据写入
        self.post.insert_one(data)
        return item

4.configuración

ROBOTSTXT_OBEY debe cambiarse a False, de lo contrario, algunos sitios web no se pueden rastrear, configuración de la base de datos mongodb: dirección IP, número de puerto predeterminado 27017, nombre de la base de datos y nombre de la tabla. Poner información en USER_AGENT_YANGYUAN

ROBOTSTXT_OBEY = False

DOWNLOADER_MIDDLEWARES = {
   #'NewsData.middlewares.NewsdataDownloaderMiddleware': 543,
   'NewsData.middlewares.RotateUserAgentMiddleware': 543,
}

ITEM_PIPELINES = {
   'NewsData.pipelines.NewsdataPipeline': 300,
}

USER_AGENT_LIST = [
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",
    "Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",
    "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",
    "Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"
]   
# 添加MONGODB数仓设置
MONGODB_HOST = "localhost"  # 数仓IP
MONGODB_PORT = 27017  # 数仓端口号
MONGODB_DATABASE = "NewsData"  # 数仓数据库
MONGODB_TABLE = "News_Process_YANGYUAN"  # 数仓数据表单

(2) Descripción paso a paso de start_requests de inicio del rastreador, análisis de análisis de lista, análisis de contenido parse_detail y descripción de texto correspondiente a los códigos para el almacenamiento de datos

1. El rastreador inicia start_requests

Rastrea cada sitio a través de un bucle for y el primer y segundo elemento de cada lista de URL correspondiente al sitio y al elemento. Cada rastreo genera parámetros y la URL de destino realiza la solicitud de acceso.

    def start_requests(self):
        for url in self.start_urls:
            item = NewsdataItem()
            item["site"] = url[1]
            item["item"] = url[2]
            item["student_id"] = "20201949"           
            yield scrapy.Request(url=url[0], meta={"item": deepcopy(item)}, callback=self.parse)

2. Análisis de análisis de listas

Defina tres listas title_list, url_list, date_list, use el método response.xpath para ubicar la url, el título y la fecha a través del xpath correspondiente, la función extract() lo analiza en forma de lista y realiza un ciclo transversal, title, url, date corresponde a la lista El elemento en la posición correspondiente, y luego usa yield para realizar un segundo salto de regreso. Use contiene para determinar si los datos contienen una etiqueta de fecha.

    def parse(self, response):
        item = response.meta["item"]
        title_list = response.xpath('/html/body//li/descendant::h3/a/text()').extract()
        url_list = response.xpath('/html/body//li/descendant::h3/a/@href').extract()
        date_list = response.xpath('/html/body//li/descendant::label[1][contains(text(), "-" )]/text() ').extract()
        if len(date_list) == 0:
            date_list = response.xpath('/html/body//li/descendant::span[1][contains(text(), "-")]/text() ').extract()

        print(title_list)

        for each in range(len(title_list)):
            item["title"] = title_list[each]
            item["url"] = url_list[each]
            item["date"] = date_list[each]
            yield scrapy.Request(url=item["url"], meta={"item": deepcopy(item)}, callback=self.parse_detail)

3. Análisis de contenido parse_detail

Utilice el método response.xpath para ubicar el contenido del texto de acuerdo con el xpath correspondiente y guarde los datos del elemento en la base de datos a través de la canalización.

    def parse_detail(self, response):
        item = response.meta["item"]
        strs = response.xpath('//*[@id="news-body"]/descendant::p[string-length()>4]/text()').extract()
        item["content"] = ''.join(str(i) for i in strs)
        return item

(3) Capturas de pantalla de los datos capturados en la interfaz de visualización de la base de datos (814 elementos).

 

Cinco, construcción Gerapy

1. configuración de pipas

pip instalar gerapy 

pip instalar scrapyd

2. Crea un usuario

crear formulario gerapy migrar 

Inicializar cuenta

Abra el navegador, ingrese 127.0.0.1:8000, ingrese la contraseña y el nombre de usuario

3. Gestión de alojamiento

 Haga clic en Gestión de host, haga clic en Crear

 

El nombre de host es localhost, la IP es 127.0.0.1, el número de puerto es 6800 y el estado es normal.

 

 4. Gestión de proyectos

Coloque toda la carpeta del marco scrapy en los proyectos en la carpeta gerapy, empaquetela en la gestión de proyectos e impleméntela.

 

 5. Gestión de tareas

Edite el nombre de la tarea, el proyecto es toda la carpeta NewsData, el script es la noticia en la carpeta spiders, el host es el localhost conectado, el método de programación puede configurarlo usted mismo y el estado de ejecución de cada tarea puede verificarse. la tarea Los siguientes son los resultados reales de los datos de la operación.

 

Supongo que te gusta

Origin blog.csdn.net/qq_63195700/article/details/128362154
Recomendado
Clasificación