[Python學習] 簡單爬取CSDN下載資源信息

        這是一篇Python爬取CSDN下載資源信息的樣例,主要是經過urllib2獲取CSDN某我的所有資源的資源URL、資源名稱、下載次數、分數等信息。寫這篇文章的緣由是我想獲取本身的資源所有的評論信息。但是由於評論採用JS暫時載入。因此這篇文章先簡介怎樣人工分析HTML頁面爬取信息。



源碼
javascript

# 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() html


顯示結果
        顯示內容包含資源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/

java

相關文章
相關標籤/搜索