用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
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