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

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

源代码
# coding=utf-8  
import urllib  
import time  
import re  
import os

#************************************************** 
#第一步 遍历获取每页对应主题的URL 
#http://download.csdn.net/user/eastmount/uploads/1
#http://download.csdn.net/user/eastmount/uploads/8
#**************************************************

num=1 #记录资源总数 共46个资源
number=1 #记录列表总数1-8
fileurl=open('csdn_url.txt','w+')  
fileurl.write('****************获取资源URL*************\n\n')

while number<9:
    url='http://download.csdn.net/user/eastmount/uploads/' + str(number)
    fileurl.write('下载列表URL:'+url+'\n\n')
    print unicode('下载列表URL:'+url,'utf-8')
    content=urllib.urlopen(url).read()
    open('csdn.html','w+').write(content)

    #获取包含URL块内容 匹配需要计算</div>个数
    start=content.find(r'<div class="list-container mb-bg">')  
    end=content.find(r'<div class="page_nav">')
    cutcontent=content[start:end]
    #print cutcontent

    #获取块内容中URL
    #形如<dt><div><img 图标></div><h3><a href>标题</a></h3></dt>
    res_dt = r'<dt>(.*?)</dt>'  
    m_dt =  re.findall(res_dt,cutcontent,re.S|re.M)  
    for obj in m_dt:
        #记录URL数量
        print '******************************************'
        print '第'+str(num)+'个资源'
        fileurl.write('******************************************\n')
        fileurl.write('第'+str(num)+'个资源\n')
        num = num +1
        #获取具体URL
        url_list = re.findall(r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')", obj)
        for url in url_list:
            url_load='http://download.csdn.net'+url
            print 'URL: '+url_load
            fileurl.write('URL: http://download.csdn.net'+url+'\n')
        #获取资源标题
        #<a href="/detail/eastmount/8757243">MFC显示BMP图片</a>
        res_title = r'<a href=.*?>(.*?)</a>'
        title = re.findall(res_title,obj,re.S|re.M)
        for t in title:
            print unicode('Title: ' + t,'utf-8')  
            fileurl.write('Title: ' + t +'\n')


        #************************************************** 
        #第二步 遍历具体资源的内容及评论 
        #http://download.csdn.net/detail/eastmount/8785591
        #**************************************************

        #定位指定结构化信息盒Infobox
        resources = urllib.urlopen(url_load).read()
        open('resource.html','w+').write(resources)
        start_res=resources.find(r'<div class="wraper-info">')  
        end_res=resources.find(r'<div class="enter-link">')
        infobox=resources[start_res:end_res]

        #获取资源积分、下载次数、资源类型、资源大小(前4个<span></span>)
        res_span = r'<span>(.*?)</span>'  
        m_span = re.findall(res_span,infobox,re.S|re.M)
        print '资源积分: '+m_span[0]
        fileurl.write('资源积分: ' + m_span[0] +'\n')
        print '下载次数: '+m_span[1]
        fileurl.write('下载次数: ' + m_span[1] +'\n')
        print '资源类型: '+m_span[2]
        fileurl.write('资源类型: ' + m_span[2] +'\n')
        print '资源大小: '+m_span[3]
        fileurl.write('资源大小: ' + m_span[3] +'\n')


        #**************************************************
        #第三步 如何获取评论
        #http://jeanphix.me/Ghost.py/
        #http://segmentfault.com/q/1010000000143340
        #http://casperjs.org/
        #**************************************************
     

    else:
        fileurl.write('******************************************\n\n')
        print '******************************************\n'
        print 'Load Next List\n'
        number = number+1 #列表加1
#退出所有循环
else:
    fileurl.close()

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

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


        运行结果如下图所示:




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


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


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


        最后我想做的事获取评论信息,但是它是通过JS实现的:
<div class="section-list panel panel-default">
   <div class="panel-heading">
      <h3 class="panel-title">资源评论</h3>
   </div>
   <!-- recommand -->
   <script language='JavaScript' defer type='text/javascript'         

src='/js/comment.js'></script>
   <div class="recommand download_comment panel-body" sourceid="8772951"></div>
</div>
        显示的JS页面部分如下:
var base_url= (window.location.host.substring(0,5)=='local') ? 'http://local.downloadv3.csdn.net' : 'http://download.csdn.net';
base_url = "";
$(document).ready(function(){
	
	CC_Comment.initConfig();
	CC_Comment.getContent(1);
});	
var CC_Comment = 
{
	sourceid:0,
	initConfig:function()
	{
		var sid = parseInt($(".download_comment").attr('sourceid'));
		if(isNaN(sid) || sid<=0)
		{
			this.sourceid = 0;
		}else
		{
			this.sourceid = sid;
		}
		
	}
....
}

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


目录
相关文章
|
1月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
81 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
168 82
|
10天前
|
机器学习/深度学习 数据采集 数据可视化
Python/Anaconda双方案加持!Jupyter Notebook全平台下载教程来袭
Jupyter Notebook 是一款交互式编程与数据科学分析工具,支持40多种编程语言,广泛应用于机器学习、数据清洗和学术研究。其核心优势包括实时执行代码片段、支持Markdown文档与LaTeX公式混排,并可导出HTML/PDF/幻灯片等格式。本文详细介绍了Jupyter Notebook的软件定位、特性、安装方案(Anaconda集成环境与原生Python+PIP安装)、首次运行配置及常见问题解决方案,帮助用户快速上手并高效使用该工具。
|
1月前
|
JavaScript 搜索推荐 Android开发
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
70 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
|
1月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
63 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
24天前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
71 6
|
24天前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。
|
1月前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
26 3
|
2月前
|
数据可视化 数据挖掘 大数据
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
5月前
|
存储 算法 API
Python学习五:函数、参数(必选、可选、可变)、变量、lambda表达式、内置函数总结、案例
这篇文章是关于Python函数、参数、变量、lambda表达式、内置函数的详细总结,包含了基础知识点和相关作业练习。
79 0