[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、资源标题、资源积分、下载次数、资源类型和资源大小:
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去到详细的资源获取我自己称为像消息盒的信息:
<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下载资源信息的更多相关文章
- python之简单爬取一个网站信息
requests库是一个简介且简单的处理HTTP请求的第三方库 get()是获取网页最常用的方式,其基本使用方式如下 使用requests库获取HTML页面并将其转换成字符串后,需要进一步解析HTML ...
- Python爬虫学习(二) ——————爬取前程无忧招聘信息并写入excel
作为一名Pythoner,相信大家对Python的就业前景或多或少会有一些关注.索性我们就写一个爬虫去获取一些我们需要的信息,今天我们要爬取的是前程无忧!说干就干!进入到前程无忧的官网,输入关键字&q ...
- python学习之——爬取网页信息
爬取网页信息 说明:正则表达式有待学习,之后完善此功能 #encoding=utf-8 import urllib import re import os #获取网络数据到指定文件 def getHt ...
- [python学习] 简单爬取图片站点图库中图片
近期老师让学习Python与维基百科相关的知识,无聊之中用Python简单做了个爬取"游讯网图库"中的图片,由于每次点击下一张感觉很浪费时间又繁琐.主要分享的是怎样爬取HTML的知 ...
- 用python爬虫简单爬取 笔趣网:类“起点网”的小说
首先:文章用到的解析库介绍 BeautifulSoup: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能. 它是一个工具箱,通过解析文档为用户提供 ...
- python学习(十七) 爬取MM图片
这一篇巩固前几篇文章的学到的技术,利用urllib库爬取美女图片,其中采用了多线程,文件读写,目录匹配,正则表达式解析,字符串拼接等知识,这些都是前文提到的,综合运用一下,写个爬虫示例爬取美女图片.先 ...
- Python 2.7_爬取CSDN单页面博客文章及url(二)_xpath提取_20170118
上次用的是正则匹配文章title 和文章url,因为最近在看Scrapy框架爬虫 需要了解xpath语法 学习了下拿这个例子练手 1.爬取的单页面还是这个rooturl:http://blog.csd ...
- Python 2.7_爬取CSDN单页面利用正则提取博客文章及url_20170114
年前有点忙,没来的及更博,最近看爬虫正则的部分 巩固下 1.爬取的单页面:http://blog.csdn.net/column/details/why-bug.html 2.过程 解析url获得网站 ...
- python之scrapy爬取jingdong招聘信息到mysql数据库
1.创建工程 scrapy startproject jd 2.创建项目 scrapy genspider jingdong 3.安装pymysql pip install pymysql 4.set ...
随机推荐
- 给Linux设置SSH登录邮件提醒
给Linux设置SSH登录邮件提醒 心血来潮,用 last 命令查看了登录记录,不看不知道,一看就有问题.竟然有两个陌生的IP ,一个是美国欧莱雅的,一个是北京联通的.真是郁闷,密码简单了真不行 后来 ...
- AJAX - 基本流程和特点
<script> window.onload = function(ev){ var oBtn = document.querySelector('button'); // querySe ...
- jQuery选择器,Ajax请求
jQuery选择器: $("#myELement") 选择id值等于myElement的元素,id值不能重复在文档中只能有一个id值是myElement所以得到的是唯一的元素 $( ...
- C#之在treeview中鼠标点击的所选的节点触发事件
一.背景 如下图所示,我想实现通过鼠标点击treeview的根节点,然后在文本框控件中显示鼠标点击的节点号. 二.程序实现 因为是要通过鼠标点击才发生的事情,所以这属于一个事件,需要触发才行,刚开始不 ...
- 13.Zookeeper的java客户端API使用方法
转自:https://blog.csdn.net/jiuqiyuliang/article/details/56012027
- 1.1 Introduction中 Distribution官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Distribution 分布式(Distribution) The partiti ...
- Django环境搭建(二)
web框架 本质就是socket服务端 socket服务端:是计算机科学家在TCP/IP基础上进行封装,暴露出一个接口socket,就是一个收发数据的一个接口. 对于真实的web程序来说分为两部分:服 ...
- loadrunner监控apache服务
一.apache配置步骤(假设apache服务已安装) 1.使用find / -name httpd.conf命令查找httpd.conf文件 2.使用cd opt/lampp/apache2/con ...
- 【2017 Multi-University Training Contest - Team 10 】Monkeys
[链接]点击打开链接 [题意] 给你一棵n节点的树,现在让你放k个猴子,可以删边,问最少可以剩余几条边,放k个猴子,满足任意一个猴 子至少与一只猴子相连.2<=k<=n<=1e5 [ ...
- 洛谷 P1644 跳马问题
P1644 跳马问题 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧…… 题目描述 中国象棋半张棋盘如图1所示.马自左下角(0,0)向右上角(m,n)跳.规定只能往右跳,不准 ...