1. 程式人生 > >用python字典(dict)獲取更多的資料

用python字典(dict)獲取更多的資料

大家好,這是我的第二篇博文。這次,我想在第一篇的基礎上,依舊使用BeautifulSoup和xlwt,但是這次我會使用python的字典,以此來獲取更多的爬取內容。

工具

參考我的第一篇博文

內容

這次我爬取的頁面是2345電影,由於在該頁面上存在一個年代選項,具體看下這個截圖:

所以我之前寫了一個只是爬取2017年的電影project(以下我暫且身為1.0版本),大家可以看下我的GitHub爬取豆瓣電影排行榜的程式碼,他們的框架結構一樣,我也把它儲存成excel的格式,後來我想對這個程式碼進行改進,畢竟這裡面有那麼多個年份的選項,所以就有了一個2.0版本

在1.0版本里

如圖
這裡寫圖片描述
大家可以看到

self.urlBase = 'http://dianying.2345.com/list/----2017--.html'                             #是一個字串
self.pages = self.getPages()       #是一個數字
self.urls = []                     #是一個list
self.items = []                    #同樣也是一個list

這是單純爬取一個頁面的構造器的設定

在2.0版本里面

由於需要爬取2011~2017這7年的資料,所以每個年份就是構成了一個urlbase,每個urlbase對應著一個pages,每個urlbase對應著urls和items(這裡的urls和items都是list)。所以在python中擁有1對1的語法很容易就聯想到dict(字典)
所以我是這樣設定的

self.urlbases = []
self.urlbasepages = {}
self.urlbaseurls = {}
self.urlbaseitems = {}

當然在這兩個版本里面,對於item的設定是一樣的,都是

這裡寫圖片描述

所以在這個大方向確定之後,只需要將1.0版本的基礎上增加一個

def getUrlbase(self)用來獲取urlbases(它是一個list)

下面是1.0版本和2.0版本的在函式構造上的一些區別

1. getUrls():

1.0版本前面是這樣的:

for page in xrange(1,pages+1):
    url = 'http://dianying.2345.com/list/----2017---'
+str(page)+'.html' self.urls.append(url) self.log.info(u'新增URL:%s到URLS成功'% url) return self.urls

2.0版本:

for urlbase,pages in self.urlbasepages.items():
    self.urlbaseurls[urlbase] = []
    for page in xrange(1,int(pages)+1):
    url = urlbase.split('-')[0]+'----'+urlbase.split('-')[4]+'---'+str(page)+'.html'
    self.urlbaseurls[urlbase].append(url)
    self.log.info(u'新增URL:%s到URL:%s成功'%(url,urlbase))
return self.urlbaseurls

相比於1.0版本就多了一輪迭代迴圈和將字典urlbasepages的每一個key對應的value初始化為一個list

2.spider()

1.0版本前面是這樣的:

for url in urls:
     htmlContent = self.getResponseContent(url)

2.0版本:

for urlbase,urls in self.urlbaseurls.items():
    self.urlbaseitems[urlbase]=[]
    for url in urls:
        htmlContent = self.getResponseContent(url)

還是多了一行迴圈和一個初始化

3.pipline()

1.0版本前面是這樣的:

def piplines(self,items):
    filename = u'2017熱門電影.txt'.encode('GBK')
    with open(filename,'w') as fp:
        fp.write('電影名稱     電影評分     電影主演  \r')
        for item in items:

2.0版本:

fileName = '電影.txt'.encode('GBK')
    with open(fileName,'w') as fp:
        fp.write('電影名稱     電影評分     電影主演  \n')
        for  urlbase,items in self.urlbaseitems.items():
            i= 1
            for item in items:

還是一樣多了一行迴圈和初始化

4.最後要說的是saveExcel這個自定義模組

1.0版本:

def run(self,items):
    fileName = u'電影.xls'.encode('GBK')
    book = xlwt.Workbook(encoding='utf8')
    sheet = book.add_sheet('2017',cell_overwrite_ok=True)

這生成的只是一個帶有一個sheet的excel檔案

2.0版本:

def run(self,urlbaseitems):
    filename = u'電影.xls'.encode('GBK')
    book = xlwt.Workbook(encoding='utf8')
    for urlbase,items in urlbaseitems.items():
        sheetname = urlbase.split('-')[4]
        sheet = book.add_sheet(sheetname,cell_overwrite_ok=True)

在每次迴圈中用是split()將urlbase分割開,目的是為了得到其中的年份數字,作為sheetname,這樣就可以得到多個表了。

當然這樣執行完後得到的結果是這樣的
這裡寫圖片描述
可以看到評分是沒有按照順序的(當然我也不知道這評分是否可靠),原因該網站也沒有按電影評分對電影進行排序

所以為了按照評分進行排序
我在spider() 後面加了幾行程式碼:

for urlbase in self.urlbaseitems.keys():
        self.urlbaseitems[urlbase].sort(key=lambda item:item.point,reverse= True)
return self.urlbaseitems

這裡用到了lambda語法,其實他就是個迷你的函式,大家如果想要深入瞭解dict的各種型別的排序,可以參考這篇部落格
這樣執行的結果是這樣的
這裡寫圖片描述

具體的兩個版本的原始碼我會上傳到我的第二篇GitHub部落格上,大家可以參考下

如果有講的不清楚的或者錯誤的,歡迎各位及時指出來,謝謝

相關推薦

python字典(dict)獲取資料

大家好,這是我的第二篇博文。這次,我想在第一篇的基礎上,依舊使用BeautifulSoup和xlwt,但是這次我會使用python的字典,以此來獲取更多的爬取內容。 工具 參考我的第一篇博文 內容 這次我爬取的頁面是2345電影,由於在該頁面上存

Python 字典 dict{}

nal items cname python 返回 fromkeys 直接 每次 每一個 dict{key:value} 映射類型 fromkeys(seq[, value]) 創建新字典,鍵seq對應的值value。每次使用創建新的字典 使用items()

Python 字典的一鍵值,即一個鍵對應個值

nbsp 多個 div 有一個 value 獲取 OS 是否 bsp #字典的一鍵多值 print‘方案一 list作為dict的值 值允許重復‘ d1={} key=1 value=2 d1.setdefault(key,[]).append(valu

python 字典dict和列表list的讀取速度問題, range合並

span {} iteration copy size 情況 rec class 異常 python 字典和列表的讀取速度問題 最近在進行基因組數據處理的時候,需要讀取較大數據(2.7G)存入字典中,然後對被處理數據進行字典key值的匹配,在被處理文件中每次讀取一行

'dict_values' object does not support indexing, Python字典dict中由value查key

ima 通過 pre rap error mod returns RR rds Python字典dict中由value查key 眾所周知,字典dict最大的好處就是查找或插入的速度極快,並且不想列表list一樣,隨著key的增加越來越復雜。但是dict需要占用較大的

Python字典dict

變量的數據類型 存儲 lse 是否 err 必須 score 順序 tro dict Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。Python中的唯一一種映

python 字典dict 操作方法

dict()的操作方法 巢狀 巢狀在list中也存在,就是元素是list,在dict中,也有類似的樣式: >>> a_list = [[1,2,3],[4,5],[6,7]] >>> a_list[1][1] 5 >>>

頁面滾動scroll到最底部 - 載入資料

頁面滾動scroll到最底部 - 載入更多資料 上拉內容區域,拉到底部實現分頁功能,向後端請求更多資料載入到頁面上 vue專案,使用純js實現,網上顯示了很多外掛可以實現,我使用了幾個,都不是我需要的效果,可能沒研究明白,沒辦法只能原生實現,具體實現思路如下~ 思路:通過滾動條判斷是否到

python學習筆記】python字典(dict)

1、字典dict的建立 Python內建了字典:dict的支援,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)儲存,具有極快的查詢速度。注意字典內各個部分是沒有順序的區別的; 其java的map是一樣的,屬於key:value模式,一個簡單的

小程式點選跳轉外部連結,計算問題,後臺解密獲取使用者資訊

使用場景: 小程式上體點選圖跳轉廣告(百度這種連結) 直接上程式碼: index.wxml <!--pages/index/index.wxml--> <view wx:for="{{nav}}" wx:key="{{item}}"> <i

python 字典(dict)增刪改查及方法

                                          &nb

python - 字典dict

1.字典的建立 -1 key-value不同型別的建立 -2 字典的巢狀 -3 工廠函式 2.字典的特性 -1不支援索引、切片;並且字典的重複、連線是無意義的(因為key是唯一的) -2成員操作符:判斷的是某個值是否為字典的key -3for迴圈: 預設遍歷字典

如何獲取關於序列化異常的堆疊資訊

問題與解決方法 有時候我們的系統會報java.io.NotSerializableException,根據堆疊資訊又無法得出有用的資訊,無法找到具體是因為哪些類或者變數造成的,可以使用一個java引數-Dsun.io.serialization.extendedDebugInfo=true來得到更加具體的序

程式設計師怎樣獲取的勞動收入

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

《笨方法學Python 3 》24.的練習

本節課全是複習題,就是碼字碼字碼字,體驗一下碼農的感覺!!! 基礎練習: print("讓我們把所有的東西都練習一下") print('You\'d need to know \'bout escapes with \\ that do:') print('\n newl

歡迎關注公眾號“程式設計師那些破事兒”,獲取視訊教程

1、什麼是執行緒安全,為什麼會有安全問題 當多個執行緒同時共享,同一個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。 案例:需求現在有100張火車票,有兩個視窗同時搶火車票,請使用多執行緒模

12行程式碼教會你python讀excel檔案,提取資料,生成條形碼

  一、需求分析 條形碼應用廣泛,尤其是人事、財務和庫管等等崗位,常需根據excel檔案成批生成條碼,如果是經常性天天做,用excel的自己控制元件還是很枯燥煩人的。 當然在學習Python的道路上肯定會困難,沒有好的學習資料,怎麼去學習呢?  

Python 字典dict相關知識

字典是無序的,多次print輸出的結果不一樣。 字典的key可以是數字、字串、元組、布林值(True為1,False為0,不可以和其他key值重複);列表和字典不能作為key。 字典的value可以是任何型別。 字典支援del方法刪除。 字典支援for迴圈,是可迭代物件,不支援while

關於抖音如何熱門,怎麼上推薦獲取的流量,獲取的抖音粉絲

抖音如何上熱門?自然漲粉絲,抖音直播教程技巧 抖音已經成為當下年輕人最喜愛的短視訊軟體,不知道愛拍攝短視訊的你知道抖音怎麼上熱門,抖音如何“刷”粉絲嗎?抖音刷粉絲最好的方法你的抖音視訊就是上熱門,得到官方的推薦。 1.原創優質的抖音視訊 2.點贊量=使用者

python向txt檔案中寫資料時的追加和覆蓋問題

  最近在用python從WOS網站中爬取內容並儲存到本地的txt檔案中,發現每次寫入都是把txt檔案中原來存在的內容覆蓋掉了,那麼如何才能在原來的基礎上繼續往裡面新增內容呢? 1、原來的開啟檔案的方式是: file = open(pathTxt, 'w', encoding