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

自己动手编写CSDN博客备份工具-blogspider之源码分析(1)

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


前一篇博文《自己动手编写CSDN博客备份工具-blogspider》介绍了blogspider的使用,使用方法很简单,blogspider可以将自己的CSDN博客下载到本地,这里也只提供最基本的功能。这两天有很多哥们儿给我发邮件,想要blogspider的源码,该程序是开源的,有需要的可以留下联系方式。
今天就介绍下blogspider的源代码,其实这里面比较核心的东西就是如何向网站服务器申请我们需要的网页文件。在Java语言,有提供一些网络包,已经将HTTP协议的东西都集成在了包里面,那实现起来就比较简单。最近由于春运期间,大家都在12306网站购票,于是网上就出现了一款抢票的软件,那是用Java写的,是一个谷歌插件。其实那个软件是我一个同事以前的同事写出来的,我们都从这里受益,也买到了回家过年的票,在这里感谢那位牛人。
向Java程序员了解了一下,那个软件的实现原理很简单,步骤如下:
1.访问网站获取网站信息
2.接受到网站服务器的响应消息
3.根据用户选择(硬座,硬卧)的消息再提交到网站服务器
4.得到网站的结果

主要是2个操作:一个是GET方法,一个是POST方法。
GET方法: 从网站服务器下载网页消息,比如网页浏览器可以浏览CSDN网站的新闻与图片,这些都是从网站服务器GET下载到本地;
POST方法:从本地将资料提交到网站服务器,比如在CSDN博客写完文章要点击发表博客,这时候是将一篇文章的所有信息给POST到CSDN服务器。
blogspider的主要目的,就是下载功能,这里使用的是GET方法,用C语言写的都比较低级,这些最基本的都需要自己来实现,等有空看看面向对象编程语言的实现。

废话少说,源码说话:

一.贴出代码中的调试宏,汗,太儿戏了

二.贴出代码中的一些宏定义,这些涉及到HTML文件的语法,但本代码不需要会html,只需要最基本的字符串处理:


上面的BLOG_LOCK,BLOG_UNLOCK是爬虫链表的处理锁,这是扩展预留的,现在还没用。本来要用多线程来处理链表,但经过测试,会产生竞争,导致connect超时,这等过完年再试试。

三.这里再给出爬虫链表的结构体与博客存放基本信息的结构体,里面有多一些变量,但没真正的使用,有些只是预留而已:


四.在一个程序中,使用全局变量不是最好的方法,但都有优缺点:

使用全局变量:
1.优点:操作简单,不用提供太多的函数形参;
2.缺点:不好维护,代码可读性差;所以该程序只使用了3个全局变量。


web_host变量用来保存"blog.csdn.net"主机信息,在初始化socket的使用会使用到里面的IP地址, web_host->h_addr_list[0];

五.程序中定义了很多函数,如下:


六.先给出上述2个字符串处理函数,这家伙,有点罗嗦


引用星爷的一句话:"功夫其实绝对是适合男女老幼的,打打杀杀只是大家对它的误解。功夫更加是一种艺术,一种不屈的精神。所以,一直以来我都在找方法想将功夫重新包装起来,使得你们这些升斗小民对功夫能够有更深一层的了解。".
轻松一下,继续:

七.初始化爬虫链表,我把很多处理都给独立到函数了,这样可以增加程序的可读性,不能将所有功能都在main函数实现.


八.爬虫链表的一些处理,这些都比较简单,就都贴出来吧


篇幅有点长,待下篇文章...

周星驰:你来这里干什么?
赵薇:我想帮你们比赛。
周星驰:你怎么帮?你快点回火星吧,地球是很危险的。

分享到:
评论

相关推荐

    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上编译和使用...

    scrapy的简单demo

    Scrapy是一个强大的Python爬虫框架,它为网络数据抓取提供了高效的工具和API,使得开发者可以专注于编写爬取逻辑,而无需关注底层实现。在这个简单的Scrapy demo中,我们将探讨如何搭建一个基本的Scrapy项目,理解其...

    Python的Scrapy爬虫框架简单学习笔记

    - **查看页面源码**:使用`view(response)`可以查看当前页面的源代码,帮助分析页面结构。 - **调试选择器**:可以在Shell中反复试验不同的XPath或CSS选择器,直到得到满意的结果。 通过以上步骤,我们已经了解了...

    Python 爬虫实现增加播客访问量的方法实现

    1. **序言**:介绍编写爬虫的初衷及背景,以及本文主要涉及的技术点。 2. **所需环境**:列出进行爬虫开发所需的Python版本以及所使用的相关模块。 3. **增加访问量的思路**:具体阐述如何利用爬虫技术模拟真实...

Global site tag (gtag.js) - Google Analytics