python批量下载csdn文章

2023-11-19

声明:该爬虫只可用于提高自己学习、工作效率,请勿用于非法用途,否则后果自负

功能概述:

  1. 根据待爬文章url(文章id)批量保存文章到本地;
  2. 支持将文中图片下载到本地指定文件夹;
  3. 多线程爬取;

1.爬取效果展示

本次示例爬取的链接地址:
https://blog.csdn.net/m0_68111267/article/details/132574687

原文效果:

爬取效果:

文件列表:

2.编写代码

爬虫使用scrapy框架编写,分布式、多线程

2.1编写Items

class ArticleItem(scrapy.Item):

    id = scrapy.Field()  # ID
    title = scrapy.Field()
    html = scrapy.Field()  # html


class ImgDownloadItem(scrapy.Item):

    img_src = scrapy.Field()
    img_name = scrapy.Field()
    image_urls = scrapy.Field()


class LinkIdsItem(scrapy.Item):

    id = scrapy.Field()

2.2添加管道



class ArticlePipeline():

    def open_spider(self, spider):
        if spider.name == 'csdnSpider':

            data_dir = os.path.join(settings.DATA_URI)
            #判断文件夹存放的位置是否存在,不存在则新建文件夹
            if not os.path.exists(data_dir):
                os.makedirs(data_dir)
            self.data_dir = data_dir

    def close_spider(self, spider):  # 在关闭一个spider的时候自动运行
        pass
        # if spider.name == 'csdnSpider':
        #     self.file.close()

    def process_item(self, item, spider):
        try:
            if spider.name == 'csdnSpider' and item['key'] == 'article':
                info = item['info']
                id = info['id']
                title = info['title']
                html = info['html']

                f = open(self.data_dir + '/{}.html'.format(title),
                         'w',
                         encoding="utf-8")
                f.write(html)
                f.close()
        except BaseException as e:
            print("Article错误在这里>>>>>>>>>>>>>", e, "<<<<<<<<<<<<<错误在这里")
        return item

2.3添加配置

2.4添加解析器


    ...
    
    def parse(self, response):
        html = response.body
        a_id = response.meta['a_id']
        soup = BeautifulSoup(html, 'html.parser')

        [element.extract() for element in soup('script')]
        [element.extract() for element in soup.select("head style")]
        [element.extract() for element in soup.select("html > link")]

        # 删除style中包含隐藏的标签
        [
            element.extract() for element in soup.find_all(
                style=re.compile(r'.*display:none.*?'))
        ]
        
        ...

3.获取完整源码

项目说明文档

爱学习的小伙伴,本次案例的完整源码,已上传微信公众号“一个努力奔跑的snail”,后台回复“csdn”即可获取。

源码地址:

https://pan.baidu.com/s/1uLBoygwQGTSCAjlwm13mog?pwd=****

提取码: ****

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python批量下载csdn文章 的相关文章

随机推荐

  • 使用NDK编译C/C++文件生成在安卓中的可执行文件

    使用NDK编译C C 文件生成在安卓中的可执行文件 需求 要编译一个C文件 然后将他运行到安卓手机中 通过这个可执行文件可以获取一些硬件的参数信息 或者对已经有的信息进行修改 从而达到我们想要的效果 相关知识点记录 NDK Native D
  • HTTP POST请求json数据量过大的问题

    与第三方合作 需要提供数据上传接口给他们 联调时被他们的单条json数据量困扰到了 第三方接口联调 一条7M的json上传给我们 毫无意外的报错了 实体数据量太大 该如何修改以便适应大数据量的上传呢 在代码层面想不到解决方案 于是查看配置
  • GitHub Actions自动化部署+定时百度链接推送

    前言 最近用VuePress搭建了一个静态网站 由于是纯静态的东西 每次修改完文章都要重新打包上传很是麻烦 虽然vuepress theme vdoing主题作者提供了GitHub Actions自动化部署的教程文章 但是过于简陋且是19年
  • 在小项目中实践领域驱动设计(含详细代码和实践过程) #CSDN博文精选# #IT# #项目实践#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术
  • 为什么Java不支持多继承,却搞了个Interface出来?

    多继承的问题在于无法找到一个合理的规则去初始化基类的数据 菱形继承中 两个子类分别调用父类构造函数进行初始化时 到底该调用谁 都调用的话 谁先谁后 C 的解决方案把这个问题丢给了使用者 也就是孙类 似乎是解决了问题 可是它忽视了子类并没有虚
  • 阿里巴巴编码规范习题

    因为工作需要 公司组里要求考阿里巴巴编程规范 于是我花了一天的时间看了一遍 然后刷了一些题 终于在第三次的时候考过了 考试是基于 阿里巴巴Java开发手册 一共50道题目 包括多选和单选 题目都是选择题 目前阿里云编程规范是出到V1 5 0
  • 算法:深度优先遍历和广度优先遍历

    什么是深度 广度优先遍历 图的遍历是指 从给定图中任意指定的顶点 称为初始点 出发 按照某种搜索方法沿着图的边访问图中的所有顶点 使每个顶点仅被访问一次 这个过程称为图的遍历 遍历过程中得到的顶点序列称为图遍历序列 图的遍历过程中 根据搜索
  • 类的数组成员变量的初始化

    使用STL标准模板库之后 编程时已经很少使用数组和指针 相反 多使用序列容器vector代替之 但事实并不这么理想 在迫不得已的情况下 我们还是会选择使用数组 这里介绍一下当数组作为类的成员变量时 应该怎么对它 数组 进行初始化 在类的构造
  • 日志LOG

    一 引言 1 1 日志介绍 用于记录系统中发生的各种事件 记录的位置常见的有 控制台 磁盘文件等 1 2 日志级别 日志级别从低到高 TRACE 堆栈 DEBUG 调试期 INFO 运行期 WARN 警告 ERROR 错误 FATAL 严重
  • 微信小程序实现一个遮罩层

    微信小程序实现遮罩层 开发中 遮罩层的使用场景很多 例如 loading的时候 例如搜索的时候等 以下是一个案例 点击页面的搜索框 在页面上添加一层遮罩层 显示搜索详情页 页面搜索框如下 页面最上面有一个搜索框 下面有一些其他UI元素
  • 微软解释关于Windows 10 收集用户数据那点事

    微软 Microsoft 在周一时发布关于Win10 收集用户数据的新细节 试图停止这场争议 早前 该软件巨头确认Win10收集用户数据并发送给微软 并声称这是用于改善整体用户体验 然而 这引发了人们对用户隐私以及用何种方式收集数据的关注
  • int、long、long long取值范围

    unsigned int 0 4294967295 int 2147483648 2147483647 unsigned long 0 4294967295 long 2147483648 2147483647long long的最大值 9
  • 美团外卖推荐关于用户新颖体验优化的技术探索

    外卖场景下 用户 复购 属性强 下单频次高 既想下单老商家 也会想换换 新口味 为更好平衡用户的复购 尝新体验 外卖推荐团队从2022年起开始持续投入 构建了外卖场景新颖性推荐的体系化解决方案 截止目前 外卖首页用户曝光新颖性累计提升19
  • 安装anconda以及在pycharm使用

    安装anconda 下载安装 配置虚拟环境需要通过anaconda来完成 anaconda的下载地址为 https docs conda io en latest miniconda html windows用户下载python3 8的mi
  • 蓝牙之四-Handler

    Handler机制 Handler允许用户发送和处理Message以及线程MessageQueue相关的可运行对象 每个Handler实例都对应一个单线程以及该线程的MessageQueue 当创建新的Handler时 该Handler将被
  • Kali搭建DVWA——Web靶场

    博主主站地址 微笑涛声 www cztcms cn 一 DVWA介绍 1 DVWA简介 DVWA是一款基于PHP和MYSQL开发的web靶场练习平台 集成了常见的web漏洞如sql注入 XSS 密码破解等常见漏洞 旨在为安全专业人员测试自己
  • SDL无法打开音频设备的问题:Couldn‘t open audio/video device: No available audio/video device

    解决中标麒麟下SDL无法打开音频设备的问题 root登录 首先就是一定要用root登录 这个可能是权限问题 否则后面实验不能成功 安装ALSA库 首先下载alsa lib https www alsa project org main in
  • [数据结构(C语言)]单链表的定义,实现初始化、创建、插入、增、删、改、查等基本操作

    建议新人收藏使用 首先 让我们回顾一下顺序表的优缺点 1 优点 随机存取 存储空间利用率高 2 缺点 插入 删除效率低 必须按事先估计的最大元素个数分配连续的存储空间 难以临时扩大 采用链式存储结构的线性表称为链表 链表有单链表 循环链表和
  • Stream流将list中对象的属性按照小时进行分组

    需求是这样的 给了一个日期时间区间 一个对象list 要统计这个时间段内每天某个小时段的数据量之和 如图 刚开始思路是把时间区间按每个小时进行拆分 得到这段时间每个小时的开始结束时间跟list对象进行比对后在进行整合计算 发现代码会很臃肿
  • python批量下载csdn文章

    声明 该爬虫只可用于提高自己学习 工作效率 请勿用于非法用途 否则后果自负 功能概述 根据待爬文章url 文章id 批量保存文章到本地 支持将文中图片下载到本地指定文件夹 多线程爬取 1 爬取效果展示 本次示例爬取的链接地址 https b