这是一篇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/


[Python学习] 简单爬取CSDN下载资源信息的更多相关文章

  1. python之简单爬取一个网站信息

    requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML ...

  2. Python爬虫学习(二) ——————爬取前程无忧招聘信息并写入excel

    作为一名Pythoner,相信大家对Python的就业前景或多或少会有一些关注.索性我们就写一个爬虫去获取一些我们需要的信息,今天我们要爬取的是前程无忧!说干就干!进入到前程无忧的官网,输入关键字&q ...

  3. python学习之——爬取网页信息

    爬取网页信息 说明:正则表达式有待学习,之后完善此功能 #encoding=utf-8 import urllib import re import os #获取网络数据到指定文件 def getHt ...

  4. [python学习] 简单爬取图片站点图库中图片

    近期老师让学习Python与维基百科相关的知识,无聊之中用Python简单做了个爬取"游讯网图库"中的图片,由于每次点击下一张感觉很浪费时间又繁琐.主要分享的是怎样爬取HTML的知 ...

  5. 用python爬虫简单爬取 笔趣网:类“起点网”的小说

    首先:文章用到的解析库介绍 BeautifulSoup: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能. 它是一个工具箱,通过解析文档为用户提供 ...

  6. python学习(十七) 爬取MM图片

    这一篇巩固前几篇文章的学到的技术,利用urllib库爬取美女图片,其中采用了多线程,文件读写,目录匹配,正则表达式解析,字符串拼接等知识,这些都是前文提到的,综合运用一下,写个爬虫示例爬取美女图片.先 ...

  7. Python 2.7_爬取CSDN单页面博客文章及url(二)_xpath提取_20170118

    上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手 1.爬取的单页面还是这个rooturl:http://blog.csd ...

  8. Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114

    年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...

  9. python之scrapy爬取jingdong招聘信息到mysql数据库

    1.创建工程 scrapy startproject jd 2.创建项目 scrapy genspider jingdong 3.安装pymysql pip install pymysql 4.set ...

随机推荐

  1. HDU 1166 敌兵布阵 Segment Tree题解

    本题是最主要的分段树操作了.或者一般叫线段树,只是好像和线段没什么关系,仅仅是分段了. 不使用lazy标志,更新仅仅是更新单点. 假设不使用分段树,那么更新时间效率仅仅须要O(1),使用分段树更新效率 ...

  2. 兔子--百度地图所需的jar+so下载地址

    百度地图所需的jar+so下载地址:http://download.csdn.net/detail/u013425527/8265569

  3. 玩转Bash脚本:选择结构之case

    总第5篇 之前,我们谈到了if. 这次我们来谈还有一种选择结构--case. case与if if用于选择的条件,不是非常多的情况,假设选择的条件太多.一系列的if.elif,.也是醉了. 没错,ca ...

  4. jquery 04

    $('div').slice(1,3).css('background','red').end().css('color','blue');  入栈原理图: <!DOCTYPE HTML> ...

  5. Android开发经验之获取画在画布上的字符串长度、宽度(所占像素宽度)

    Android中获取字符串长度.宽度(所占像素宽度) 计算出当前绘制出来的字符串有多宽,可以这么来! 方法1: Paint paint = new Paint(); Rect rect = new R ...

  6. php中类的持久化如何实现

    php中类的持久化如何实现 一.总结 一句话总结:PHP持久化通过serialize()  和   unserialize() 这两个函数来实现的. 1.持久化之后的对象保存到哪里? 将复杂的数组之类 ...

  7. Linux下基于LDAP统一用户认证的研究

    Linux下基于LDAP统一用户认证的研究                   本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  8. Linux shell command学习笔记(二)

    <cut> 作用:从输入文件或者命令的输出中析取出各种域 用法:cut –c{字符串范围} –d{字段间分割符} –f{字段索引编号} 举例: (1)查看在线用户:who | cut –c ...

  9. canvas和svg区别

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  10. Maven学习总结(14)——Maven 多模块项目如何分工?

    一.开场白 使用Maven有段时间了,只能感慨真是个好东西,让我从传统模式体会到了严谨.规范.敏捷.方便的特性. 如果你懂Maven或许看过Juven翻译的<Maven权威指南>: 发个牢 ...