Use o rastreador nativo Python para rastrear informações simples das postagens do blog

Hoje usamos a maneira nativa do Python para rastrear algumas informações simples de nosso próprio blog.

Pronto

Antes de criar um rastreador Python simples, precisamos analisar quais informações precisamos usar para rastrear e como analisar as informações necessárias.

Como hoje é um rastreador Python simples, as informações que queremos rastrear não são muito complicadas.
Precisamos rastrear as cinco informações no blog, a saber: URL do artigo, título do artigo, tempo de upload do artigo, número de leitura do artigo, número do comentário do artigo .
Como estamos usando a maneira nativa do Python para rastrear informações, também usamos expressões regulares para analisar os dados rastreados diretamente e obter as informações necessárias a partir deles.

Estrutura do projeto

Insira a descrição da imagem aqui

módulo article.py (objeto de informações)

Para facilitar o empacotamento das informações de rastreamento, criamos uma classe de informações no módulo article.py, que encapsula as informações que precisamos 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 (réptil)

Criamos uma classe de réptil no 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__)

Fim

Através do código acima, as informações que rastreamos da maneira nativa do Python serão impressas diretamente no console.
Se precisarmos rastrear as informações de outros usuários do blog, precisamos modificar apenas urlo valor.

A última coisa a dizer é que o CSDN não rastreia o conteúdo do blog, mas possui um mecanismo de rastreamento para dados do blog, como tráfego, que pode impedir que os usuários desviem o tráfego de maneira maliciosa pelos rastreadores, portanto, aqueles que desejam usá-los para reduzir o tráfego Os alunos podem lavar-se e dormir.

Publicado 85 artigos originais · ganhou 92 · visualizações 9221

Acho que você gosta

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