爬取CSDN专栏文章到本地,并保存为html、pdf、md格式

2023-05-16

前言

  • 突然想爬取CSDN的专栏文章到本地保存了,为了影响小一点,特地挑选CSDN的首页进行展示。
  • 综合资讯这一测试点是什么找到的呢?就是点击下图的热点文章,然后跳转到具体文章

在这里插入图片描述
,然后再点击专栏文章,就进入了
在这里插入图片描述

废话少说,直接上代码

  • 用面向对象的思维实现了代码

  • 代码思路放在了代码注释里面

  • 用到了requests、bs4等主流接口

  • 剩下的就是,希望大家有空基于这个继续开发完善,哈哈哈哈!!!

  • 此代码和实现内容都已经打包上传只Gitee,可以点击查看

    “”"
    @Author:survive
    @Blog(个人博客地址): https://blog.csdn.net/haojie_duan

    @File:csdn.py.py
    @Time:2022/2/10 8:49

    @Motto:我不知道将去何方,但我已在路上。——宫崎骏《千与千寻》

    代码思路:
    1.确定目标需求:将csdn文章内容保存成 html、PDF、md格式
    - 1.1首先保存为html格式:获取列表页中所有的文章ur1地址,请求文章ur1地址获取我们需要的文章内容
    - 1.2 通过 wkhtmitopdf.exe把html文件转换成PDF文件
    - 1.3 通过 wkhtmitopdf.exe把html文件转换成md文件

    2.请求ur1获取网页源代码
    3.解析数据,提取自己想要内容
    4.保存数据
    5.转换数据类型把HTML转换成PDF、md文伴
    “”"

    html_str = “”"

    Document {article} """

    import requests
    import parsel
    import pdfkit #用来将html转为pdf
    import re
    import os
    import urllib.parse
    from bs4 import BeautifulSoup
    import html2text #用来将html转换为md
    import random

    user_agent库:每次执行一次访问随机选取一个 user_agent,防止过于频繁访问被禁止

    USER_AGENT_LIST = [
    “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/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)”,
    “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”,
    “Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24”
    “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36”
    ]

    class CSDNSpider():
    def init(self):
    self.url = ‘https://blog.csdn.net/csdndevelopers/category_10594816.html’
    self.headers = {
    ‘user-agent’:random.choice(USER_AGENT_LIST)
    }

    def send_request(self, url):
        response = requests.get(url=url, headers=self.headers)
        response.encoding = "utf-8"
        if response.status_code == 200:
            return response
    
    def parse_content(self, reponse):
        html = reponse.text
        selector = parsel.Selector(html)
        href = selector.css('.column_article_list a::attr(href)').getall()
        name = 00
        for link in href:
            print(link)
            name = name + 1
            # 对文章的url地址发送请求
            response = self.send_request(link)
            if response:
                self.parse_detail(response, name)
    
    def parse_detail(self, response, name):
        html = response.text
        # print(html)
        selector = parsel.Selector(html)
        title = selector.css('#articleContentId::text').get()
        # content = selector.css('#content_views').get()
    
        # 由于这里使用parsel拿到的网页文件,打开会自动跳转到csdn首页,并且不能转为pdf,就想在这里用soup
        soup = BeautifulSoup(html, 'lxml')
        content = soup.find('div',id="content_views",class_=["markdown_views prism-atom-one-light" , "htmledit_views"]) #class_="htmledit_views"
        # print(content)
        # print(title, content)
        html = html_str.format(article=content)
        self.write_content(html, title)
    
    def write_content(self, content, name):
        html_path = "HTML/" + str(self.change_title(name)) + ".html"
        pdf_path ="PDF/" + str(self.change_title(name))+ ".pdf"
        md_path = "MD/" + str(self.change_title(name)) + ".md"
    
        # 将内容保存为html文件
        with open(html_path, 'w',encoding="utf-8") as f:
            f.write(content)
            print("正在保存", name, ".html")
    
        # 将html文件转换成PDF文件
        config = pdfkit.configuration(wkhtmltopdf=r'G:Devwkhtmltopdfinwkhtmltopdf.exe')
        pdfkit.from_file(html_path, pdf_path, configuration=config)
        print("正在保存", name, ".pdf")
        # os.remove(html_path)
    
        # 将html文件转换成md格式
        html_text = open(html_path, 'r', encoding='utf-8').read()
        markdown = html2text.html2text(html_text)
        with open(md_path, 'w', encoding='utf-8') as file:
            file.write(markdown)
            print("正在保存", name, ".md")
    
    def change_title(self, title):
        mode = re.compile(r'[\/:?*"<>|!]')
        new_title = re.sub(mode,'_', title)
        return new_title
    
    def start(self):
        response = self.send_request(self.url)
        if response:
            self.parse_content(response)
    

    if name == ‘main’:
    csdn = CSDNSpider()
    csdn.start()

效果如下:

  • 从左到右,分别是html、pdf、md格式
    在这里插入图片描述
  • 随便点开一篇文章检查,从左到右,分别是html、pdf、md格式

在这里插入图片描述

后记

参考文章:

  • Python 爬虫:requests + BeautifulSoup4 爬取 CSDN 个人博客主页信息(博主信息、文章标题、文章链接) 爬取博主每篇文章的信息(访问、收藏) 合法刷访问量?
  • 整理最全的 python 之markdown与HTML的互转的几个模块
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

爬取CSDN专栏文章到本地,并保存为html、pdf、md格式 的相关文章

随机推荐

  • Ubuntu安装MySQL的三种方式跟卸载MySQL

    注意 xff1a 我所有操作一开始就执行了 xff1a sudo su 进入特权模式 xff0c 后续命令就不需要在用sudo提权了 一 卸载MySQL 看个人习惯 xff0c 我基本用的是第一种 xff0c 简单粗暴 删除mysql的数据
  • 栏目目录

    栏目目录 1 学web从何开始 xff1f 2 js说古道今 3 闭包的虐心故事 4 关于原型 xff0c 我想说这些 5 JQuery简要 6 用AngularJS开发前端框架 xff08 基础 xff09 7 用AngularJs开发前
  • 百度云离线下载含有违规内容检测方法分析

    最近国家开始一轮净网行动 xff0c 清除网上的淫秽色情信息 各大互联网厂家纷纷开始行动 xff0c 比如当年很好用的百度云离线下载就一度关闭 后来再次开启后 xff0c 就出现了这句经典词 xff0c 因含有违规内容被屏蔽无法下载 其实被
  • 用python打印购物小票和证书

    目录 1 打印购物小票 2 打印证书 在使用python打印东西时一定要注意到缩进 xff0c 在python语言中对缩进很重视 input用来接收数据 input后边小括号可以写接受数据的条件 在定义常量或者变量名时 xff0c 最好找有
  • prime算法

    prime算法 令无向图 G 61 V E G 61 V E
  • 深度学习二

    BT神经元为按照误 差逆向传播算法训练的多层前馈神经网络 BT神经网络分为输入层 隐藏层 输出层 输入层一般有数据种类多个神经元 xff0c 接受数据 隐藏层的神经元为根号下隐藏层 输出层加b个 xff0c 输入的每个数据加权和返回数之和为
  • Python基础

    一 python代码编译 python 是解释型语 在执 的时候 需要解释器 边解释 翻译 边执 从上到下执 下 代码出现的错误 不会影响上 代码的执 二 python中的三种波浪线 红色波浪线 xff1a 是代码中的错误 需要解决 否则会
  • Word处理控件Aspose.Words功能演示:使用 C# 在 Word 文档中创建和修改 VBA 宏

    Aspose Words 是一种高级Word文档处理API xff0c 用于执行各种文档管理和操作任务 API支持生成 xff0c 修改 xff0c 转换 xff0c 呈现和打印文档 xff0c 而无需在跨平台应用程序中直接使用Micros
  • 建硬盘分区,pvcreate 报:“Can topen /dev/sdb1 exclusivel...?“;磁盘分区报:设备或资源;RHEL本地存储项目二mkfs.vfat报错

    建立硬盘分区 xff0c pvcreate 时报错 xff1a 34 Can topen dev sdb1 exclusively Mounted filesystem 34 dmsetup remove all 清空所有陈旧条目后成功 x
  • 搜索文件内容的几种方式

    搜索文件的几种方式 xff1a 一 提取文件 xff0c 插入数据库text xff0c 使用like 查询 使用poi或PageOffice提取文件内容文字 缺点 xff1a 只适合数据量不大的情况 二 提取文件 xff0c 插入数据库t
  • Centos 7虚拟机ifconfig ens或ip addr时,ens33不显示inet地址

    systemctl stop NetworkManager systemctl disable NetworkManager
  • nodeinternalmodulescjsloader936 throw err; 求解决

    D ethereumDkfuwq gt node app js node internal modules cjs loader 936 throw err Error Cannot find module safe buffer Requ
  • Tomcat 下载安装教程

    文章目录 参考资料1 下载2 安装3 卸载4 启动5 关闭6 配置7 部署8 IDEA使用Tomcat 8 1 集成本地Tomcat8 2 Tomcat Maven插件 参考资料 视频 使用Tomcat的前提是你已经熟练Java xff0c
  • JS说古道今

    JS说古道今 本文概要 讲述js的来源及重要的语法特性 xff0c 包括数据类型 DOM 作用域等 xff08 由于专业性比较强就不写诗扯淡了 61 61 xff0c 我尽量写的有趣点吧 JS JSP xff1f JavaScript xf
  • 删除集合当中的空元素(Collections.singleton(null)与stream())

    Arrays asList创建的数据为定长集合 xff0c 集合长度在操作时是不可以改变的 xff0c 不能对集合进行增删操作 Collections singleton null 相关 span class token comment 反
  • RabbitMQ配置更改TCP默认端口5672

    前言 公司新项目需集成RabbitMQ xff0c 但服务器环境已经安装了ActiveMQ 今天同事不说还不知道 xff0c 导致安装后俩MQ打架 端口冲突 而发生的一系列问题 没办法 xff0c 后来居上的就很被动 xff0c 于是就得改
  • WebSocket服务端消息推送

    前言 xff1a 移动互联网蓬勃发展的今天 xff0c 大部分手机 APP和网站都提供了消息推送功能 xff0c 如新闻客户端的热点新闻推荐 xff0c IM 工具的聊天消息提醒 xff0c 电商产品促销信息 xff0c 企业应用的通知和审
  • tomcat7下载

    百度网盘下载 xff1a 链接 xff1a https pan baidu com s 1qbaxHo0dEdL9JC08yzbL6Q 提取码 xff1a ysz9
  • Springboot查看日志

    Springboot查看日志 以前用springMVC时查看日志直接进入tail f out 但是用了springboot之后 xff0c 一时不知道如何实现 xff0c 记录一下 以下以log4j2为日志框架 先在log4j2 xml中添
  • 爬取CSDN专栏文章到本地,并保存为html、pdf、md格式

    前言 突然想爬取CSDN的专栏文章到本地保存了 xff0c 为了影响小一点 xff0c 特地挑选CSDN的首页进行展示 综合资讯这一测试点是什么找到的呢 xff1f 就是点击下图的热点文章 xff0c 然后跳转到具体文章 xff0c 然后再