[Scrapy 教 9] El marco Scrapy combinado con Gmail debe comprender los secretos del envío y rastreo de datos adjuntos.

Haga clic para ingresar la descripción de la imagen (hasta 18 caracteres)

En el proceso de recopilación de datos por el rastreador web de Python, además de almacenar los datos en la base de datos o importarlos a un archivo, el otro escenario más comúnmente utilizado es la "notificación de mensaje", que consiste en utilizar el rastreador web de Python para recopilar la información requerida Después de los datos, el resultado de los datos se envía a través del canal de notificación de mensajes.

Por ejemplo , [Python crawler] Python crawler combinado con LINE Notify para crear un artículo de servicio de notificación de mensajes automatizado integra el servicio LINE Notify para notificar a los usuarios las noticias de rebajas de precios obtenidas por el rastreador web Python, y esto es para compartir otro canal de notificación de mensajes contigo La combinación de correo electrónico.

Este artículo continúa la explicación detallada de [python] de las habilidades prácticas del marco Scrapy para rastrear datos de paginación: el octavo artículo, después de guardar los resultados rastreados en un archivo CSV, envíelo al usuario mediante un archivo adjunto de Gmail. Antes de comenzar, puede consultar el segundo paso de la [aplicación práctica Python] Python enviando correo electrónico de Gmail artículo práctico de enseñanza para obtener la contraseña de la aplicación Gmail, y los frenos pueden usar su SMTP (Protocolo simple de transferencia de correo) para enviar correo. Los puntos clave de este artículo incluyen:

Proceso del marco del rastreador web scrapy

Revisión del proyecto del rastreador web scrapy

Scrapy MailSender combina Gmail para enviar correo

1. Proceso del marco de trabajo del rastreador web scrapy

Primero, revisemos los 5 módulos de ejecución y la arquitectura del marco Scrapy en el inicio rápido "python": el proceso del marco del rastreador web Scrapy compartido en el primer artículo, como se muestra a continuación:

Haga clic para ingresar la descripción de la imagen (hasta 18 caracteres)

Como se puede ver en la figura anterior, si desea realizar un procesamiento posterior de los datos obtenidos por el rastreador web Scrapy, debe pasar el modelo de datos ITEMS almacenado temporalmente en los datos rastreados a los datos ITEM PIPELINE después del programa del rastreador SPIDERS obtiene el resultado de la respuesta (6) La canalización del modelo (7, 8) personaliza la lógica del procesamiento de datos posterior.

Por lo tanto, es concebible que si desea importar los resultados rastreados en un archivo CSV y enviarlo a través de un archivo adjunto en Gmail, debe estar escrito en la canalización del modelo de datos ITEM PIPELINE, que es el archivo pipelines.py del proyecto Scrapy. .

2. Revisión del proyecto de rastreador web Scrapy

A continuación, revise las tres partes del proyecto Scrapy actual, de la siguiente manera:

"Programa de rastreo SPIDERS (inside.py)"

进口沙皮
 
 
类InsideSpider (scrapy 。蜘蛛): 
    名称= “内部” 
    allowed_domains = [ 'www.inside.com.tw' ] 
    start_urls = [ 'https://www.inside.com.tw/tag/ai' ] 
    count = 1 #执行次数   
 
    def parse (self ,response ):
 
        产量从自我。刮(回应)#爬取网页内容    
 
        #定位「下一页」按钮元素
        next_page_url =响应。xpath (
            “ // a [@ class ='pagination_item pagination_item-next'] / @ href” )
 
        如果next_page_url :
 
            url = next_page_url 。get ()#取得下一页的网址  
 
            InsideSpider 。计数+ = 1 
 
            如果InsideSpider 。计数<= 3 :  
                产量scrapy 。请求(URL ,回调=自我。解析)#发送请求  
 
    def scrape (self ,response ):
 
        #爬取文章标题
        post_titles =响应。xpath (
            “ // h3 [@ class ='post_title'] / a [@ class ='js-auto_break_title'] / text()”
        )。getall ()
 
        #爬取发布日期
        post_dates =响应。xpath (
            “ // li [@ class ='post_date'] / span / text()”
        )。getall ()
 
        #爬取作者
        post_authors =回应。xpath (
            “ // span [@ class ='post_author'] / a / text()”
        )。getall ()
 
        对于数据在拉链(post_titles ,post_dates ,post_authors ):
            NewsScraperItem = {
    
      
                “ post_title” :数据[ 0 ],
                “ post_date” :数据[ 1 ],
                “ post_author” :数据[ 2 ]
            }
 
            产生NewsScraperItem 

Lo anterior es un rastreador web de Scrapy que rastrea el sitio web de observación de tendencias de Internet obstruido de INSIDE: la información del artículo de las primeras 3 páginas de AI News. Para obtener las instrucciones de implementación, consulte [Scrapy Teaching 8] Uso detallado del marco de Scrapy para rastrear datos de paginación .

"Modelo de datos de ITEMS (items.py)"

进口沙皮
 
 
类NewsScraperItem (scrapy 。项): 
    #在这里为您的商品定义字段,例如:
    #名称= scrapy.Field()
    post_title = scrapy 。字段()#文章标题  
    post_date = scrapy 。栏位()#发布日期  
    post_author = scrapy 。字段()#文章作者  

Contiene tres campos de "Título del artículo", "Fecha de publicación" y "Autor del artículo" para exportarlos a archivos CSV más adelante.

"Canalización del modelo de datos de ITEM PIPELINE (pipelines.py)"

从itemadapter导入ItemAdapter 
从y不休。出口商进口CsvItemExporter 
 
 
CsvPipeline类: 
    def __init__ (self ):
        自我。文件=打开('posts.csv''wb' ) 
        自我。出口= CsvItemExporter (自我。文件,编码= '中文' ) 
        自我。出口商。start_exporting ()
 
    def process_item (self ,item ,spider ):
        自我。出口商。export_item (项目)
        退货项目
 
    def close_spider (self ,spider ):
        自我。出口商。finish_exporting ()
        自我。文件。关闭()

Más que [python] le enseñan cómo exportar archivos CSV desde el marco de Scrapy para mejorar la eficiencia del procesamiento de datos: el séptimo artículo, importe los datos rastreados por los rastreadores web de Scrapy en la sección de archivos CSV y aquí está para adjuntar el archivo CSV. Enviado en el correo de Gmail. (PD. El CsvItemExporter en la línea 8 está preestablecido para codificación UTF-8. Si el archivo CSV exportado por el lector se abrirá en Microsoft Excel, debe configurarse en codificación china, de lo contrario aparecerán caracteres confusos)

Tres, Scrapy MailSender combina Gmail para enviar correo

En el marco del rastreador web Scrapy, si desea implementar la función de envío de correos electrónicos, puede utilizar el módulo integrado MailSender (módulo), que se puede lograr a través de la configuración básica. Y es un IO sin bloqueo (IO sin bloqueo) basado en el marco Twisted, que puede evitar atascos de código debido a errores inesperados al enviar correos electrónicos.

Abra el archivo de configuración settings.py del proyecto Scrapy y agregue la siguiente configuración SMTP de Gmail:

Haga clic para ingresar la descripción de la imagen (hasta 18 caracteres)

Y abra la configuración de canalización del modelo de datos CsvPipeline creado en el séptimo artículo, como se muestra en el siguiente ejemplo:

MAIL_HOST = “ smtp.gmail.com” 
MAIL_PORT = 587 
MAIL_FROM = “申请Gmail应用程序密码所使用的电子邮件帐号” 
MAIL_PASS = “ Gmail应用程序密码” 
MAIL_TLS = True #开启安全连线   

Una vez completada la configuración, abra el archivo de canalización del modelo de datos ITEM PIPELINE (pipelines.py) y haga referencia al archivo de configuración del marco Scrapy y el módulo MailSender (Módulo), como se muestra en el siguiente ejemplo:

#配置项目管道
#参见https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    
     
    'news_scraper.pipelines.CsvPipeline'500}

Dado que tenemos que enviar el correo electrónico después de que el rastreador web Scrapy haya importado los datos al archivo CSV, necesitamos crear el objeto Scrapy MailSender en el método close_spider () de la clase CsvPipeline (Class). El siguiente ejemplo:

从itemadapter导入ItemAdapter 
来自news_scraper导入设置
从y不休。邮件导入MailSender 

La línea 15 del ejemplo anterior utiliza el valor que se acaba de establecer en el archivo settings.py para crear el objeto Scrapy MailSender. Preste especial atención a los parámetros de palabras clave (parámetros de palabras clave) que deben ser exactamente iguales.

A continuación, especifique los archivos adjuntos de Gmail, incluidos "adjuntar nombre (adjuntar_nombre)", "tipo de medio de Internet (mime_type)" y "objeto de archivo (file_object)", como se muestra en el siguiente ejemplo:

CsvPipeline类: 
    def __init__ (self ):
        自我。文件=打开('posts.csv''wb' ) 
        自我。出口= CsvItemExporter (自我。文件,编码= '中文' ) 
        自我。出口商。start_exporting ()
 
    def process_item (self ,item ,spider ):
        自我。出口商。export_item (项目)
        退货项目
 
    def close_spider (self ,spider ):
        自我。出口商。finish_exporting ()
        自我。文件。关闭()
 
        邮件= MailSender (smtphost =设置。MAIL_HOST , 
                          smtpport =设置。MAIL_PORT ,
                          smtpuser =设置。MAIL_FROM ,
                          smtppass =设置。MAIL_PASS ,
                          smtptls =设置。MAIL_TLS )

Finalmente, en la línea 26, envíe el archivo de datos CSV exportado por el rastreador web a través del método send () (método) del módulo (módulo) de Scrapy MailSender. Los mismos parámetros de palabra clave (parámetros de palabra clave) deben ser los mismos. La ejecución el resultado es el siguiente:

CsvPipeline类: 
    def __init__ (self ):
        自我。文件=打开('posts.csv''wb' ) 
        自我。出口= CsvItemExporter (自我。文件,编码= '中文' ) 
        自我。出口商。start_exporting ()
 
    def process_item (self ,item ,spider ):
        自我。出口商。export_item (项目)
        退货项目
 
    def close_spider (self ,spider ):
        自我。出口商。finish_exporting ()
        自我。文件。关闭()
 
        邮件= MailSender (smtphost =设置。MAIL_HOST , 
                          smtpport =设置。MAIL_PORT ,
                          smtpuser =设置。MAIL_FROM ,
                          smtppass =设置。MAIL_PASS ,
                          smtptls =设置。MAIL_TLS )
 
        attach_name = “ posts.csv” #附件的显示名称   
        mime_type = “ application / vnd.openxmlformats-officedocument.spreadsheetml.sheet” 
        file_object = open (“ posts.csv” ,“ rb” )#读取汇出的csv档   
	
	#寄出邮件
        退回邮件。发送(至= [ “ example@gmail.com” ],#收件者  
                         subject = “ news” ,#邮件标题  
                         正文= “” ,#邮件内容  
                         attachs = [(attach_name ,MIME_TYPE ,FILE_OBJECT )]) #附件  

En cuarto lugar, en resumen,
en la práctica, importar los datos obtenidos por el rastreador web Python en un archivo y enviarlos por correo al usuario es una aplicación muy común. En el marco del rastreador web Scrapy, se proporciona el módulo (módulo) MailSender. , Permitiendo a los desarrolladores combinar fácilmente SMTP (Protocolo simple de transferencia de correo), como Gmail, para enviar archivos de datos rastreados a través de configuraciones simples para lograr el efecto de notificación de mensajes. Los lectores que agregan la funcionalidad de correo electrónico son útiles. Bienvenido a dejar un mensaje a continuación para compartir conmigo ~

Supongo que te gusta

Origin blog.csdn.net/wlcs_6305/article/details/114632311
Recomendado
Clasificación