`
shangjava
  • 浏览: 1190049 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自己动手编写CSDN博客备份工具-blogspider

 
阅读更多
作者:gzshun. 原创作品,转载请标明出处!
来源:http://blog.csdn.net/gzshun



网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自动索引,模拟程序或者蠕虫。

网络爬虫最重要的任务,就是从互联网搜索出需要的信息,将网页抓取下来并分析,很多搜索引擎,比如百度,谷歌,后台都有一只很强悍的网络爬虫,用来访问互联网上的网页,图片,视频等内容,并建立索引数据库,使用户能在百度搜索引擎中搜索到您网站的网页、图片、视频等内容。

我们常见的几个大型搜索引擎公司的爬虫名称:
1.谷歌(Google) -> Googlebot
2.百度(Baidu)爬虫名称:Baiduspider
3.雅虎(Yahoo) -> Yahoo! Slurp
4.有道(Yodao) -> YodaoBot
5.搜狗(sogou) -> Sogou spider
6.MSN -> msmbot
7.腾讯搜搜 -> Sosospider

最近我突然想自己动手写一只小型的博客爬虫,将自己在CSDN博客网站写的文章给抓取下来,想做个博客备份工具。当了解到网络爬虫的用途后,就来动手实现一个应用,用来备份自己在CSDN的博客,这样即使没有网络,或者文章丢失了,我手头都有一个备份。记得上次在微博看过CSDN创始人蒋涛先生说的一句话,他想做一个CSDN博客生成PDF文档的工具,其实那也相当于对自己博客的备份,这样就能很方便的浏览自己的写的文章。

我写的这个"blogspider"程序,将会把自己博客信息提取出来,并将所有的文章下载到本地。这里只是简单的下载网页而已,里面的图片我没有下载,那得涉及到太多的东西。如果电脑有网络,将会很容易的看到博客里面的图片,如果没有网络,图片将无法显示。

blogspider程序由C语言编写的,基于Linux平台,我编写该程序的环境如下:

本人在putty终端测试程序,可以正确的显示中文,要设置为UTF-8,或者GB2312,如果显示乱码,切换一下字符集试试。


一.blogspider的功能简介:

1.获取博客的基本信息:
博客标题
博客访问量
博客积分
博客排名
博客原创文章数量
博客转载文章数量
博客译文文章数量
博客评论数量

2.下载博客到本地:
博客主题
博客发表日期
博客阅读次数
博客评论次数

二.blogspider涉及到的知识点:
1.文件I/O
2.网络编程socket
3.数据结构-链表
4.内存分配


三.blogspider程序执行流程:
以我的博客为例:
1.将"http://blog.csdn.net/gzshun"主页下载到本地
2.分析该主页,获取到博客的URL
3.将博客的URL添加到爬虫链表
4.遍历爬虫链表,将博客下载到本地
5.将下载日志保存在gzshun.log


四.blogspider程序的重要部分:

1.爬虫链表的结构体


2.博客基本信息结构体


3.定义的函数


4.strrstr是自己实现的,C库没有提供

1.strrstr函数:从一个字符串中查找指定字符串,返回最后一次出现的地址
程序如下:


5.初始化爬虫链表


6.初始化博客基本信息结构体


五.blogspider遇到的问题:
1.博客标题如果有'/','?',或者其他不规则的符号,文件将会创建失败。
解决方案:将不规则的符号赋空,并在后面连接"xxx"字符串,表示省略;
2.在接受网站服务器响应的时候,要将select函数的时间设置长点,有时候因为网络差的问题,将会超时导致退出程序。在blogspider里面,将timeout设置30s。
3.本程序在考虑加入多线程遍历爬虫链表,经过尝试,连接网站服务器会出现竞争问题,将导致连接延时,影响程序效率,暂时不考虑。

六.blogspider运行截图:




使用blogspider:

这里以下载我的博客为例,我CSDN的ID是:gzshun, 网址是:http://blog.csdn.net/gzshun





title : 博客标题

url : 博客网址

date : 博客发表日期

reads : 博客阅读次数

comments : 博客评论次数

download : 博客下载状态


以下这张图片是在windows查看的,通过samba连接到ubuntu服务器。我博客上面的所有文章已经成功地下载到本地。

打开下载在本地的html文件,此时有网络。

打开下载在本地的html文件,此时无网络。



若需要blogspider的源程序,请留下您的E-mail(注意要写成我后面的那种形式,否则会被非法网络爬虫抓取),或者直接联系我的E-mail:gzshuns#163.com (#->@).

最新的blogspider程序已经上传至CSDN下载频道,需要的请自行下载。
下载地址在我最新发表的博客:
自己动手编写CSDN博客备份工具-blogspider源码下载(4)

分享到:
评论

相关推荐

    CSDN博客备份工具-blogspider_v2.0.tar.bz2

    CSDN博客备份工具blogspider,可以备份自己所有的CSDN博客到本地,也可以备份别人的博客。若需要保存别人的技术博客或自己的问题,blogspider可以帮你达到目的。若blogspider程序出现问题,可以关注我的CSDN博客,...

    CSDN博客下载器v2.2

    好消息:CSDN博客下载器v2.0版本增加导出PDF文件功能,方便查看图片与文章。 在无网络环境,也可以看自己的一些文章。当然如果您发现CSDN博客的一些文章值得收藏,你也可以使用本软件轻松的下载到您的电脑。 该版本...

    blogspider

    我的毕业设计,用于抓取百度空间的博客以备份到本地数据库中,可以下载图片到文件系统中。 <br>代码拿出来供大家分享,希望有人一起研究进步。下面是baidu空间所使用数据库的代码,谢谢 create database ...

    csdnBlogSpider:博客备份实用程序

    我们可以使用它来增加csdn id的访问时间,这也是一个博客备份实用程序。 python版本的Blogspider是单线程的,但很简单。 可以与C版本进行比较。 构建csdnBlogSpider 可以在ubuntu 3.11.3上编译和使用...

    城市GDP.npz

    城市GDP.npz

    基于深度学习的语音增强、去混响

    基于深度特征映射的语音增强方法 本项目为可以利用DNN和CNN的方法来进行语音增强,其中DNN使用的三个隐层每个隐层512个节点,CNN使用的是R-CED的网络结构并且加入了一些resnet来防止过拟合。你也可以选择是否使用dropout或者l2等。 使用: 第一步. 运行 ex_trac.sh 数据准备并将数据分成训练集和交叉验证集,然后提取 log spectragram 特征. 第二步. 运行 train.sh 来训练和测试模型. 第三步. 运行 ca_pesq.sh 使用PESQ来评价你的结果。

    昭春落日iPad水彩胶带第2期-课程网盘链接提取码下载 .txt

    本期课程将继续探索iPad水彩胶带绘画技巧,以昭春落日为主题,引导学员掌握绘画技巧和色彩运用,创作独特的水彩作品。通过实践与指导,学员将提升绘画技能,感受艺术的魅力,展现个性化创作,享受绘画带来的乐趣与成就感。 课程大小:8.6G

    永磁起重器使用与维护手册

    永磁起重器使用与维护手册

    机械设计测漏机sw21可编辑非常好的设计图纸100%好用.zip

    机械设计测漏机sw21可编辑非常好的设计图纸100%好用.zip

    纵横科技产品服务手册 FPM120TC-T 说明书

    纵横科技产品服务手册 FPM120TC-T 说明书

    如何提升产品的广告变现效率?.docx

    如何提升产品的广告变现效率?.docx

    机械设计灯板自动插线设备sw18可编辑非常好的设计图纸100%好用.zip

    机械设计灯板自动插线设备sw18可编辑非常好的设计图纸100%好用.zip

    LORA 模型 pantPullDownLora_pantpulldownV1.safetensors

    pantPullDownLora_pantpulldownV1

    经典CNN网络之AlexNet 对7种小麦叶片病害分类

    【基于Alexnet对7种小麦叶片病害分类】 【包含代码、数据集和训练好的权重文件,可直接运行】 项目总大小:640 MB 本数据集分为以下7类别:水泡,褐色斑点等等 下载解压后的图像目录:训练集(16,149张图片)、和测试集(678张图片) data-train 训练集-每个子文件夹放同类别的图像,文件夹名为分类类别 data-test 测试集-每个子文件夹放同类别的图像,文件夹名为分类类别 【项目介绍】 网络训练的时候采用cos 学习率自动衰减,简单测试了10个epoch。模型在测试集最好的表现达到88.9%精度,加大epoch可以增加精度。在run_results 目录下存有最好的权重文件,以及训练日志和loss、精度曲线等等 预测的时候,只需要运行predict即可,代码会自动将inference下所有图片推理,并取前三个概率最大类别的绘制在左上角 【训练自己的数据参考readme文件,不需要更改,代码会自动生成,例如分类类别个数等等】

    LORA 模型 lactation_v10.safetensors

    lactation_v10

    httpsyy70958.com29875videoplayvid45958.m3u8..m3u

    httpsyy70958.com29875videoplayvid45958.m3u8..m3u

    机械设计VFFS Makinesi-1包装机sw14非常好的设计图纸100%好用.zip

    机械设计VFFS Makinesi-1包装机sw14非常好的设计图纸100%好用.zip

    Java毕业设计-基于Springboot的医院管理系统的设计与实现 (源码+数据库+文档).zip

    基于Spring Boot的医院管理系统涉及多个功能模块,如病人管理、医生管理、预约挂号、医疗记录管理。以下是一个基本的设计和实现建议: 1. 数据库设计:设计合适的数据库模式来存储医院相关的信息,如病人信息、医生信息、预约信息等。可以使用关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB。 2. 后端(Spring Boot)部分: - 定义实体类:根据数据库设计,在后端定义实体类来映射数据库中的表结构。 - 数据访问层(DAO):使用Spring Data JPA或者MyBatis等技术,编写数据访问层代码,用与数据库进行交互,包括增删改查等操作。 - 业务逻辑层(Service):定义业务逻辑,包括对病人、医生、预约等信息的管理和操作。可以使用@Service注解标识这些服务类,并在其中注入相应的DAO层组件。 - 控制器层(Controller):使用@RestController注解标记控制器类,定义各个接口以供前端调用。在接口中处理请求、调用服务层处理业务逻辑,并返回相应的数据。 3. 前端部分: - 页

    node-v12.22.3-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    php-8.2.18-Win32-vs16-x64.rar

    php-8.2.18-Win32-vs16-x64.rar

Global site tag (gtag.js) - Google Analytics