当前位置:   article > 正文

[Python学习] 简单爬取CSDN下载资源信息_python爬csdn文件

python爬csdn文件
        这是一篇Python爬取CSDN下载资源信息的例子,主要是通过urllib2获取CSDN某个人所有资源的资源URL、资源名称、下载次数、分数等信息;写这篇文章的原因是我想获取自己的资源所有的评论信息,但是由于评论采用JS临时加载,所以这篇文章先简单介绍如何人工分析HTML页面爬取信息。

源代码
  1. # coding=utf-8
  2. import urllib
  3. import time
  4. import re
  5. import os
  6. #**************************************************
  7. #第一步 遍历获取每页对应主题的URL
  8. #http://download.csdn.net/user/eastmount/uploads/1
  9. #http://download.csdn.net/user/eastmount/uploads/8
  10. #**************************************************
  11. num=1 #记录资源总数 共46个资源
  12. number=1 #记录列表总数1-8
  13. fileurl=open('csdn_url.txt','w+')
  14. fileurl.write('****************获取资源URL*************\n\n')
  15. while number<9:
  16. url='http://download.csdn.net/user/eastmount/uploads/' + str(number)
  17. fileurl.write('下载列表URL:'+url+'\n\n')
  18. print unicode('下载列表URL:'+url,'utf-8')
  19. content=urllib.urlopen(url).read()
  20. open('csdn.html','w+').write(content)
  21. #获取包含URL块内容 匹配需要计算</div>个数
  22. start=content.find(r'<div class="list-container mb-bg">')
  23. end=content.find(r'<div class="page_nav">')
  24. cutcontent=content[start:end]
  25. #print cutcontent
  26. #获取块内容中URL
  27. #形如<dt><div><img 图标></div><h3><a href>标题</a></h3></dt>
  28. res_dt = r'<dt>(.*?)</dt>'
  29. m_dt = re.findall(res_dt,cutcontent,re.S|re.M)
  30. for obj in m_dt:
  31. #记录URL数量
  32. print '******************************************'
  33. print '第'+str(num)+'个资源'
  34. fileurl.write('******************************************\n')
  35. fileurl.write('第'+str(num)+'个资源\n')
  36. num = num +1
  37. #获取具体URL
  38. url_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", obj)
  39. for url in url_list:
  40. url_load='http://download.csdn.net'+url
  41. print 'URL: '+url_load
  42. fileurl.write('URL: http://download.csdn.net'+url+'\n')
  43. #获取资源标题
  44. #<a href="/detail/eastmount/8757243">MFC显示BMP图片</a>
  45. res_title = r'<a href=.*?>(.*?)</a>'
  46. title = re.findall(res_title,obj,re.S|re.M)
  47. for t in title:
  48. print unicode('Title: ' + t,'utf-8')
  49. fileurl.write('Title: ' + t +'\n')
  50. #**************************************************
  51. #第二步 遍历具体资源的内容及评论
  52. #http://download.csdn.net/detail/eastmount/8785591
  53. #**************************************************
  54. #定位指定结构化信息盒Infobox
  55. resources = urllib.urlopen(url_load).read()
  56. open('resource.html','w+').write(resources)
  57. start_res=resources.find(r'<div class="wraper-info">')
  58. end_res=resources.find(r'<div class="enter-link">')
  59. infobox=resources[start_res:end_res]
  60. #获取资源积分、下载次数、资源类型、资源大小(前4个<span></span>)
  61. res_span = r'<span>(.*?)</span>'
  62. m_span = re.findall(res_span,infobox,re.S|re.M)
  63. print '资源积分: '+m_span[0]
  64. fileurl.write('资源积分: ' + m_span[0] +'\n')
  65. print '下载次数: '+m_span[1]
  66. fileurl.write('下载次数: ' + m_span[1] +'\n')
  67. print '资源类型: '+m_span[2]
  68. fileurl.write('资源类型: ' + m_span[2] +'\n')
  69. print '资源大小: '+m_span[3]
  70. fileurl.write('资源大小: ' + m_span[3] +'\n')
  71. #**************************************************
  72. #第三步 如何获取评论
  73. #http://jeanphix.me/Ghost.py/
  74. #http://segmentfault.com/q/1010000000143340
  75. #http://casperjs.org/
  76. #**************************************************
  77. else:
  78. fileurl.write('******************************************\n\n')
  79. print '******************************************\n'
  80. print 'Load Next List\n'
  81. number = number+1 #列表加1
  82. #退出所有循环
  83. else:
  84. fileurl.close()

显示结果
        显示内容包括资源URL、资源标题、资源积分、下载次数、资源类型和资源大小:

        比如现在爬取郭霖大神的资源信息,其中页面链接如下:(共7页)
              http://download.csdn.net/user/sinyu890807/uploads/1
              http://download.csdn.net/user/sinyu890807/uploads/7
        简单修改Python源代码URL后,下载页面如下图所示:


        运行结果如下图所示:




HTML分析
       
首先,获取每列中的所有资源的URL和标题,通过分析源代码。
  1. <dt>
  2. <div class="icon"><img src="/images/minetype/rar.gif" title="rar文件"></div>
  3. <div class="btns"></div>
  4. <h3><a href="/detail/eastmount/8772951">
  5. MFC 图像处理之几何运算 图像平移旋转缩放镜像(源码)</a>
  6. <span class="points">0</span>
  7. </h3>
  8. </dt>
  9. <dd class="meta">上传者:
  10. <a class="user_name" href="/user/eastmount">eastmount</a>
  11.     | 上传时间:2015-06-04
  12.     | 下载26次
  13. </dd>
  14. <dd class="intro">
  15. 该资源主要参考我的博客【数字图像处理】六.MFC空间几何变换之图像平移、镜像、旋转
  16. 缩放详解,主要讲述基于VC++6.0 MFC图像处理的应用知识,要通过MFC单文档视图实现显
  17. 示BMP图片。
  18. </dd>
  19. <dd class="tag">
  20. <a href="/tag/MFC">MFC</a>
  21. <a href="/tag/%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86">图像处理</a><
  22. </dd>
        对应的HTML显示如下图所示:


        然后通过URL去到具体的资源获取我自己称为像消息盒的信息:


        对应审查元素的信息如下所示,获取<span>0分</span>即可:


        最后我想做的事获取评论信息,但是它是通过JS实现的:
  1. <div class="section-list panel panel-default">
  2. <div class="panel-heading">
  3. <h3 class="panel-title">资源评论</h3>
  4. </div>
  5. <!-- recommand -->
  6. <script language='JavaScript' defer type='text/javascript'
  7. src='/js/comment.js'></script>
  8. <div class="recommand download_comment panel-body" sourceid="8772951"></div>
  9. </div>
        显示的JS页面部分如下:
  1. var base_url= (window.location.host.substring(0,5)=='local') ? 'http://local.downloadv3.csdn.net' : 'http://download.csdn.net';
  2. base_url = "";
  3. $(document).ready(function(){
  4. CC_Comment.initConfig();
  5. CC_Comment.getContent(1);
  6. });
  7. var CC_Comment =
  8. {
  9. sourceid:0,
  10. initConfig:function()
  11. {
  12. var sid = parseInt($(".download_comment").attr('sourceid'));
  13. if(isNaN(sid) || sid<=0)
  14. {
  15. this.sourceid = 0;
  16. }else
  17. {
  18. this.sourceid = sid;
  19. }
  20. }
  21. ....
  22. }

        最后希望文章对你有所帮助吧!下一篇准备分析下Python如何获取JS的评论信息,同时该篇文章可以给你提供一种简单的人工分析页面的例子;也可以获取某个人CSDN资源下载多、分数高的给你挑选。基础知识,仅供参考~
      (By:Eastmount 2015-7-21 下午5点    http://blog.csdn.net/eastmount/


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/533663
推荐阅读
相关标签
  

闽ICP备14008679号