前面一直强调Python运用到网络爬虫方面很有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简介下Python是怎样爬去网络数据的,文章知识很easy,可是也分享给大家,就当简单入门吧!同一时候仅仅分享知识,希望大家不要去做破坏网络的知识或侵犯别人的原创型文章.主要包含:

        1.介绍爬取CSDN自己博客文章的简单思想及过程

        2.实现Python源代码爬取新浪韩寒博客的316篇文章

一.爬虫的简单思想

     近期看刘兵的《Web数据挖掘》知道,在研究信息抽取问题时主要採用的是三种方法:

        1.手工方法:通过观察网页及源代码找出模式,再编敲代码抽取目标数据.但该方法无法处理网站数量巨大情形.

        2.包装器归纳:它英文名称叫Wrapper Induction,即有监督学习方法,是半自己主动的.该方法从手工标注的网页或数据记录集中学习一组抽取规则,从而抽取具有类似格式的网页数据.

        3.自己主动抽取:它是无监督方法,给定一张或数张网页,自己主动从中寻找模式或语法实现数据抽取,因为不须要手工标注,故能够处理大量网站和网页的数据抽取工作.

        这里使用的Python网络爬虫就是简单的数据抽取程序,后面我也将陆续研究一些Python+数据挖掘的知识并写这类文章.首先我想获取的是自己的全部CSDN的博客(静态.html文件),详细的思想及实现方式例如以下:

第一步 分析csdn博客的源代码

        首先须要实现的是通过分析博客源代码获取一篇csdn的文章,在使用IE浏览器按F12或Google Chrome浏览器右键"审查元素"能够分析博客的基本信息.在网页中http://blog.csdn.net/eastmount链接了作者全部的博文.

        显示的源代码格式例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRWFzdG1vdW50/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

        当中<diw class="list_item article_item">..</div>表示显示的每一篇博客文章,当中第一篇显演示样例如以下:



        它的详细html源码例如以下:



        所以我们仅仅须要获取每页中博客<div class="article_title">中的链接<a href="/eastmount/article/details/39599061">,并添加http://blog.csdn.net就可以.在通过代码:

  1. import urllib
  2. content = urllib.urlopen("http://blog.csdn.net/eastmount/article/details/39599061").read()
  3. open('test.html','w+').write(content)

        可是CSDN会禁止这种行为,server禁止爬取站点内容到别人的网上去.我们的博客文章常常被其它站点爬取,但并没有申明原创出处,还请尊重原创.它显示的错误"403 Forbidden".

        PS:据说模拟正常上网能实现爬取CSDN内容,读者能够自己去研究,作者此处不介绍.參考(已验证):

       
http://www.yihaomen.com/article/python/210.htm

        http://www.2cto.com/kf/201405/304829.html

第二步 获取自己全部的文章

        这里仅仅讨论思想,如果我们第一篇文章已经获取成功.以下使用Python的find()从上一个获取成功的位置继续查找下一篇文章链接,就可以实现获取第一页的全部文章.它一页显示的是20篇文章,最后一页显示剩下的文章.

        那么怎样获取其它页的文章呢?




        我们能够发现当跳转到不同页时显示的超链接为:

  1. 1 http://blog.csdn.net/Eastmount/article/list/1
  2. 2 http://blog.csdn.net/Eastmount/article/list/2
  3. 3 http://blog.csdn.net/Eastmount/article/list/3
  4. 4 http://blog.csdn.net/Eastmount/article/list/4

        这思想就很easy了,其过程简单例如以下:

        for(int i=0;i<4;i++)                //获取全部页文章

                for(int j=0;j<20;j++)      //获取一页文章 注意最后一页文章篇数

                        GetContent();       //获取一篇文章 主要是获取超链接


        同一时候学习过通过正則表達式,在获取网页内容图片过程中格外方便.如我前面使用C#和正則表達式获取图片的文章:http://blog.csdn.net/eastmount/article/details/12235521

二.爬取新浪博客

        上面介绍了爬虫的简单思想,可是因为一些站点server禁止获取站点内容,可是新浪一些博客还能实现.这里參照"51CTO学院 智普教育的python视频"获取新浪韩寒的全部博客.

        地址为:http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html

        採用同上面一样的方式我们能够获取每一个<div class="articleCell SG_j_linedot1">..</div>中包括着一篇文章的超链接,例如以下图所看到的:



        此时通过Python获取一篇文章的代码例如以下:

  1. import urllib
  2. content = urllib.urlopen("http://blog.sina.com.cn/s/blog_4701280b0102eo83.html").read()
  3. open('blog.html','w+').write(content)

        能够显示获取的文章,如今须要获取一篇文章的超链接,即:

        <a title="《论电影的七个元素》——关于我对电影的一些看法以及《后会无期》的一些消息" target="_blank" href="
http://blog.sina.com.cn/s/blog_4701280b0102eo83.html">《论电影的七个元素》——关于我对电…</a>

        在没有讲述正則表達式之前使用Python人工获取超链接http,从文章开头查找第一个"<a title",然后接着找到"href="和".html"就可以获取"http://blog.sina.com.cn/s/blog_4701280b0102eo83.html".代码例如以下:

  1. #<a title=".." target="_blank" href="http://blog.sina...html">..</a>
  2. #coding:utf-8
  3. con = urllib.urlopen("http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html").read()
  4. title = con.find(r'<a title=')
  5. href = con.find(r'href=',title) #从title位置開始搜索
  6. html = con.find(r'.html',href) #从href位置開始搜素近期html
  7. url = con[href+6:html+5] #href="共6位 .html共5位
  8. print 'url:',url
  9.  
  10. #输出
  11. url: http://blog.sina.com.cn/s/blog_4701280b0102eohi.html

        以下依照前面讲述的思想通过两层循环就可以实现获取全部文章,详细代码例如以下:

  1. #coding:utf-8
  2. import urllib
  3. import time
  4. page=1
  5. while page<=7:
  6. url=['']*50 #新浪播客每页显示50篇
  7. temp='http://blog.sina.com.cn/s/articlelist_1191258123_0_'+str(page)+'.html'
  8. con =urllib.urlopen(temp).read()
  9. #初始化
  10. i=0
  11. title=con.find(r'<a title=')
  12. href=con.find(r'href=',title)
  13. html = con.find(r'.html',href)
  14. #循环显示文章
  15. while title!=-1 and href!=-1 and html!=-1 and i<50:
  16. url[i]=con[href+6:html+5]
  17. print url[i] #显示文章URL
  18. #以下的从第一篇结束位置開始查找
  19. title=con.find(r'<a title=',html)
  20. href=con.find(r'href=',title)
  21. html = con.find(r'.html',href)
  22. i=i+1
  23. else:
  24. print 'end page=',page
  25. #下载获取文章
  26. j=0
  27. while(j<i): #前面6页为50篇 最后一页为i篇
  28. content=urllib.urlopen(url[j]).read()
  29. open(r'hanhan/'+url[j][-26:],'w+').write(content) #写方式打开 +表示没有即创建
  30. j=j+1
  31. time.sleep(1)
  32. else:
  33. print 'download'
  34. page=page+1
  35. else:
  36. print 'all find end'

        这样我们就把韩寒的316篇新浪博客文章所有爬取成功并能显示每一篇文章,显演示样例如以下:



        这篇文章主要是简单的介绍了怎样使用Python实现爬取网络数据,后面我还将学习一些智能的数据挖掘知识和Python的运用,实现更高效的爬取及获取客户意图和兴趣方面的知识.想实现智能的爬取图片和小说两个软件.

        该文章仅提供思想,希望大家尊重别人的原创成果,不要任意爬取别人的文章并没有含原创作者信息的转载!最后希望文章对大家有所帮助,初学Python,假设有错误或不足之处,请海涵!

    (By:Eastmount 2014-10-4 中午11点 原创CSDN http://blog.csdn.net/eastmount/)

        參考资料:

        1.51CTO学院 智普教育的python视频
http://edu.51cto.com/course/course_id-581.html

        2.《Web数据挖掘》刘兵著

[Python学习] 简单网络爬虫抓取博客文章及思想介绍的更多相关文章

  1. [js高手之路]Node.js实现简易的爬虫-抓取博客文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 ...

  2. 使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎.所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...

  3. [js高手之路]Node.js实现简易的爬虫-抓取博客所有文章列表信息

    抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取博客所有的文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的h ...

  4. 使用selenium实现简单网络爬虫抓取MM图片

    撸主听说有个网站叫他趣,里面有个社区,其中有一项叫他趣girl,撸主点进去看了下,还真不错啊,图文并茂,宅男们自己去看看就知道啦~ 接下来当然就是爬取这些妹子的图片啦,不仅仅是图片,撸主发现里面的对话 ...

  5. python 小爬虫爬取博客文章初体验

    最近学习 python 走火入魔,趁着热情继续初级体验一下下爬虫,以前用 java也写过,这里还是最初级的爬取html,都没有用html解析器,正则等...而且一直在循环效率肯定### 很低下 imp ...

  6. [js高手之路]Node.js+jade抓取博客所有文章生成静态html文件

    这个周末,恶补了一下jade模板引擎,就为生成静态html文件,这篇文章需要知道jade以及看过我的上篇文章,我先给出他们的参考链接: [js高手之路]Node.js模板引擎教程-jade速学与实战1 ...

  7. 如何利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例

    前几天给大家分享了利用Python网络爬虫抓取微信朋友圈的动态(上)和利用Python网络爬虫爬取微信朋友圈动态——附代码(下),并且对抓取到的数据进行了Python词云和wordart可视化,感兴趣 ...

  8. 如何利用Python网络爬虫抓取微信朋友圈的动态(上)

    今天小编给大家分享一下如何利用Python网络爬虫抓取微信朋友圈的动态信息,实际上如果单独的去爬取朋友圈的话,难度会非常大,因为微信没有提供向网易云音乐这样的API接口,所以很容易找不到门.不过不要慌 ...

  9. 利用Python网络爬虫抓取微信好友的签名及其可视化展示

    前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所 ...

随机推荐

  1. spring返回@ResponseBody报406

    HTTP Status 406 - type Status report message description The resource identified by this request is  ...

  2. DevExpress.XtraEditors.TextEdit 设为密码输入框

    DevExpress.XtraEditors.TextEdit 设为密码输入框,解决办法: 设计窗口-->属性Properties-->Mask节点-->PasswordChar输入 ...

  3. JavaWeb框架SSH_Struts2_(一)

    1. Struts2 框架入门及结合Intellj idea完成登陆demo测试   1.1  本章目录: 框架入门 Struts2简介 Struts2入门案例 Struts2执行流程分析 2. 具体 ...

  4. CSharpGL(47)你好,Framebuffer!

    CSharpGL(47)你好,Framebuffer! Framebuffer对象(FBO)是一种复杂的OpenGL对象.使用自定义的framebuffer,可以实现离屏渲染,进而实现很多高级功能,例 ...

  5. 基于Spark和SparkSQL的NetFlow流量的初步分析——scala语言

    基于Spark和SparkSQL的NetFlow流量的初步分析--scala语言 标签: NetFlow Spark SparkSQL 本文主要是介绍如何使用Spark做一些简单的NetFlow数据的 ...

  6. linux使用yum安装mariadb

    一,安装 yum install mariadb mariadb-server 二,如何设置密码 用root 进入mysql后  mysql>set password =password('你的 ...

  7. Java日志框架那些事儿

    文章首发于[博客园-陈树义],点击跳转到原文Java日志框架那些事儿. 在项目开发过程中,我们可以通过 debug 查找问题.而在线上环境我们查找问题只能通过打印日志的方式查找问题.因此对于一个项目而 ...

  8. Nuxt框架实践

    前言 今天抽空过了遍nuxt文档,写了个实践demo,关于nuxt我已经断断续续看了好几遍了,自我感觉也算是入门了吧,从开发到上线心里都有底.后期打算在项目用起来的是nuxt框架,一些函数工具库,比如 ...

  9. RecyclerView分割线——万能分割线

    参照网络上众多的分割线设计方法,对方法进行调整和修改,最终完成的比较通用的RecyclerView分割线,底部会附上参考网址,大家可以去看一下. 在正文之前,先说一下个人看法:研究下来,我发现,其实最 ...

  10. 【Mysql知识补充】

    一.子查询 1.定义 子查询是将一个查询语句嵌套在另一个查询语句中.内层查询语句的查询结果,可以为外层查询语句提供查询条件.子查询中可以包含:IN.NOT IN.ANY.ALL.EXISTS 和 NO ...