如何用Python爬虫获取那些价值博文

不言
发布: 2018-04-04 15:06:56
原创
2100人浏览过

本篇文章的内容是如何用Python爬虫获取那些价值博文,现在分享给大家,有需要的朋友可以参考一下这篇文章地的内容


640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

作者  CDA数据分析师


在CSDN上有很多精彩的技术博客文章,我们可以把它爬取下来,保存在本地磁盘,可以很方便以后阅读和学习,现在我们就用python编写一段爬虫代码,来实现这个目的。


我们想要做的事情:自动读取博客文章,记录标题,把心仪的文章保存到个人电脑硬盘里供以后学习参考。


过程大体分为以下几步:


  • 1. 找到爬取的目标网址;

  • 2. 分析网页,找到自已想要保存的信息,这里我们主要保存是博客的文章内容;

  • 3. 清洗整理爬取下来的信息,保存在本地磁盘。


打开csdn的网页,作为一个示例,我们随机打开一个网页:

http://blog.csdn.net/u013088062/article/list/1。


可以看到,博主对《C++卷积神经网络》和其它有关机计算机方面的文章都写得不错。

 

640?wx_fmt=png


爬虫代码按思路分为三个类(class),下面3个带“#”的分别给出了每一个类的开头(具体代码附后,供大家实际运行实现):

 

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png


采用“类(class)”的方式属于Python的面向对象编程,在某些时候比我们通常使用的面向过程的编程方便,在大型工程中经常使用面向对象编程。对于初学者来说,面向对象编程不易掌握,但是经过学习习惯之后,会逐步慢慢从面向过程到面向对象编程过渡。


特别注意的是,RePage类主要用正则表达式处理从网页中获取的信息,正则表达式设置字符串样式如下:


640?wx_fmt=png

 

用正则表达式去匹配所要爬取的内容,用Python和其它软件工具都可以实现。正则表达式有许多规则,各个软件使用起来大同小异。用好正则表达式是爬虫和文本挖掘的一个重要内容。


SaveText类则是把信息保存在本地,效果如下:

 

640?wx_fmt=png

 

用python编写爬虫代码,简洁高效。这篇文章仅从爬虫最基本的用法做了讲解,有兴趣的朋友可以下载代码看看,希望大家从中有收获。

 

附相关Python代码:


<span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 1</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#-*-coding:utf-8-*-</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 2</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> re<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 3</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> urllib2<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 4</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">import</span> sys<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 5</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#目的:读取博客文章,记录标题,用htnl格式保存存文章内容</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 6</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#版本:python2.7.13</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 7</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#功能:读取网页内容</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 8</span><span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">class</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">gethtmlpage</span><span style="font-size:inherit;color:inherit;line-height:inherit;">()</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;"> 9</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#注意大小写</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">10</span>        <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">__init__</span><span style="font-size:inherit;color:inherit;line-height:inherit;">(self,strpage)</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">11</span>            self.strpapge = strpage<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">12</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获取网页</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">13</span>        <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">getpage</span><span style="font-size:inherit;color:inherit;line-height:inherit;">(self)</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">14</span>                req = urllib2.request(self.strpapge)            <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);"># 建立页面请求</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">15</span>                rep = req.add_header(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"user-agent"</span>,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/38.0.2125.122 safari/537.36 se 2.x metasr 1.0"</span>)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">16</span>                <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">try</span>:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">17</span>                   cn = urllib2.urlopen(req)                    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#网页请求</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">18</span>                   page = cn.read()                          <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#读网页</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">19</span>                   upage = page.decode(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"utf-8"</span>)               <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#网页编码</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">20</span>                   cn.close()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">21</span>                   <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">return</span> upage<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">22</span>                <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">except</span> urllib2.urlerror, e:                     <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#捕获异常</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">23</span>                        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">print</span> <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'urlerror:'</span>, e.code<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">24</span>                        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">return</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">25</span>                <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">except</span> urllib2.httperror, e:                     <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#捕获异常</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">26</span>                        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">print</span> <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'http error:'</span> + e.reason<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">27</span>                        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">return</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">28</span>                <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">return</span> repage<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">29</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#正则表达式,获取想要的内容</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">30</span><span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">class</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">repage</span><span style="font-size:inherit;color:inherit;line-height:inherit;">()</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">31</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#正则表达式提取内容,返回链表</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">32</span>    <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">getretext</span><span style="font-size:inherit;color:inherit;line-height:inherit;">(self,page,recode)</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">33</span>        repage = re.findall(recode,page,re.s)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">34</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">return</span> repage<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">35</span><span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#保存文本</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">36</span><span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">class</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">savetext</span><span style="font-size:inherit;color:inherit;line-height:inherit;">()</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">37</span>    <span style="font-size:inherit;color:inherit;line-height:inherit;"><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">def</span> <span style="font-size:inherit;line-height:inherit;color:rgb(239,239,143);">save</span><span style="font-size:inherit;color:inherit;line-height:inherit;">(self,text,tilte)</span>:</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">38</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">try</span>:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">39</span>            t=<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"blog\"</span>+tilte+<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">".html"</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">40</span>            f = file(t,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"a"</span>)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">41</span>            f.write(text)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">42</span>            f.close()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">43</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">except</span> ioerror,e:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">44</span>            <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">print</span> e.message<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">45</span><span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">if</span> __name__ == <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"__main__"</span>:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">46</span>    s = savetext()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">47</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#文件编码</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">48</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#字符正确解码</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">49</span>    reload(sys)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">50</span>    sys.setdefaultencoding( <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"utf-8"</span> ) <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获得系统的默认编码</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">51</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获取网页</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">52</span>    page = gethtmlpage(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"http://blog.csdn.net/u013088062/article/list/1"</span>)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">53</span>    htmlpage = page.getpage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">54</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#提取内容</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">55</span>    reserver = repage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">56</span>    reblog = reserver.getretext(htmlpage,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">r'<span class="link_title">.*?(s.+?)</span>'</span>)   <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获取网址链接和标题</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">57</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#再向下获取正文</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">58</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">for</span> ref <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">in</span> reblog:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">59</span>        pageheard = <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">"http://blog.csdn.net/"</span>         <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#加链接头</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">60</span>        strpage = pageheard+ref[<span style="font-size:inherit;line-height:inherit;color:rgb(140,208,211);">0</span>]<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">61</span>        tilte=ref[<span style="font-size:inherit;line-height:inherit;color:rgb(140,208,211);">1</span>].replace(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'<span style="color:#ff0000;">[置顶]</span>'</span>, <span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">""</span>)     <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#用替换的功能去除杂的英文</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">62</span>        tilte=tilte.replace(<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">" "</span>,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">""</span>).lstrip().rstrip()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">63</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#获取正文</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">64</span>        htmlpage = gethtmlpage(strpage)<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">65</span>        htmlpagedata = htmlpage.getpage()<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">66</span>        reblogtext = reserver.getretext(htmlpagedata,<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">'</span>

(.+?)

')<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">67</span>    <span style="font-size:inherit;line-height:inherit;color:rgb(127,159,127);">#保存文件</span><br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">68</span>        <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">for</span> s1 <span style="font-size:inherit;line-height:inherit;color:rgb(227,206,171);">in</span> reBlogText:<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">69</span>            s1=<span style="font-size:inherit;line-height:inherit;color:rgb(204,147,147);">' '</span>+s1<br><span style="padding-right:20px;font-size:inherit;line-height:inherit;color:rgb(140,208,211);word-spacing:0px;">70</span>            s.Save(s1,tilte)<br>

博思AIPPT
博思AIPPT

博思AIPPT来了,海量PPT模板任选,零基础也能快速用AI制作PPT。

博思AIPPT 40
查看详情 博思AIPPT

相关推荐:

php实现简单爬虫的开发案例

Python爬虫浏览器标识库

记录一次简单的Python爬虫实例


以上就是如何用Python爬虫获取那些价值博文的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号