Use el rastreador nativo de Python para rastrear información simple de publicaciones de blog

Hoy utilizamos la forma nativa de Python para rastrear información simple de nuestro propio blog.

Listo

Antes de hacer un simple rastreador de Python, necesitamos analizar qué información necesitamos para usar el rastreador y cómo analizar la información que necesitamos.

Debido a que hoy es un simple rastreador de Python, la información que queremos rastrear no es muy complicada.
Necesitamos rastrear las cinco piezas de información en el blog, a saber: URL del artículo, título del artículo, tiempo de carga del artículo, número de lectura del artículo, número de comentario del artículo .
Debido a que estamos utilizando la forma nativa de Python para rastrear información, también usamos expresiones regulares para analizar los datos rastreados directamente para obtener la información que necesitamos de los datos.

Estructura del proyecto

Inserte la descripción de la imagen aquí

módulo article.py (objeto de información)

Para facilitar el empaquetado de la información de rastreo, creamos una clase de información en el módulo article.py, que encapsula la información que necesitamos rastrear.

class Article(object):
    url = ''
    title = ''
    date = ''
    read_num = 0
    comment_num = 0

    def __init__(self, url, title, date, read_num, comment_num):
        self.url = url
        self.title = title
        self.date = date
        self.read_num = read_num
        self.comment_num = comment_num

Módulo spider.py (reptil)

Creamos una clase de reptiles bajo el módulo spider.py.

import re
from urllib import request

from article import Article


class Spider():
    # 博客路径
    url = 'https://blog.csdn.net/qq_45193304/article/list/'
    # 单个博客文章内容块的正则表达式
    article_pattern = '<div class="article-item-box csdn-tracking-statistics" data-articleid="[\d]*?">[\s\S]*?</div>[\S\s]*?</div>'
    # 单个博客文章URL和标题的正则表达式
    title_pattern = '<a href="([\s\S]*?)" target="_blank">[\S\s]*?<span class="article-type type-1 float-none">原创</span>([\s\S]*?)</a>'
    # 单个博客文章上传时间的正则表达式
    date_pattern = '<span class="date">([\d\D]*?)</span>'
    # 单个博客文章阅读次数的正则表达式
    read_num_pattern = '<span class="read-num">阅读数 <span class="num">([\d]*?)</span> </span>'
    # 单个博客文章评论次数的正则表达式
    comment_num_pattern = '<span class="read-num">评论数 <span class="num">([\d]*?)</span> </span>'

    # 通过url获取html页面内容,并通过utf-8进行解码
    def __fetch_content(self, url):
        r = request.urlopen(url)
        html = r.read()
        return str(html, encoding='utf-8')

    # 通过html页面获取页面中的文章内容块
    def __get_article(self, html):
        article_html = re.findall(self.article_pattern, html)
        return article_html

    # 对每个文章内容块进行处理,获取博客的url和标题
    def __get_url_and_title(self, article):
        r = re.search(self.title_pattern, article)
        url = r.group(1).strip()
        title = r.group(2).strip()
        return url, title

    # 对每个文章内容块进行处理,获取博客的上传时间
    def __get_date(self, article):
        r = re.search(self.date_pattern, article)
        date = r.group(1).strip()
        return date

    # 对每个文章内容块进行处理,获取博客的阅读数
    def __get_read_num(self, article):
        r = re.search(self.read_num_pattern, article)
        read_num = int(r.group(1))
        return read_num

    # 对每个文章内容块进行处理,获取博客的评论数
    def __get_comment_num(self, article):
        r = re.search(self.comment_num_pattern, article)
        comment_num = int(r.group(1))
        return comment_num

    # 对博客文章列表进行遍历,然后分别处理每一个博客文章内容,进行封装处理
    def __do_package(self, article_html, article_list):
        for article in article_html:
            url, title = self.__get_url_and_title(article)
            date = self.__get_date(article)
            read_num = self.__get_read_num(article)
            comment_num = self.__get_comment_num(article)
            article = Article(url, title, date, read_num, comment_num)
            article_list.append(article)

    # 爬虫的入口函数
    def go(self):
        page = 1
        article_list = []
        while page:
            url = self.url + str(page)
            page += 1
            html = self.__fetch_content(url)
            article_html = self.__get_article(html)
            if len(article_html) == 0:
                break
            self.__do_package(article_html,article_list)
        return article_list

# 实例化一个Spider对象
spider = Spider()
# 调用spider的go()方法,获取一个article对象的列表
article_list = spider.go()

# 一共爬取了多少条信息
print('爬虫一共爬取了' + str(len(article_list)) + '条博客文章信息')

# 遍历列表,打印列表中的数据
for article in article_list:
    print(article.__dict__)

Fin

A través del código anterior, la información que rastreamos en la forma nativa de Python se imprimirá directamente en la consola.
Si necesitamos rastrear la información de otros usuarios del blog, solo necesitamos modificar urlel valor.

Lo último que se debe decir es que CSDN no rastrea el contenido del blog, pero tiene un mecanismo de rastreo para los datos del blog, como el tráfico, que puede evitar que los usuarios pasen el tráfico maliciosamente a través de los rastreadores. Los estudiantes pueden lavarse y dormir.

Publicado 85 artículos originales · ganó 92 · vistas 9221

Supongo que te gusta

Origin blog.csdn.net/qq_45193304/article/details/105454839
Recomendado
Clasificación