Python豆瓣爬蟲學習筆記(六)

一周沒有更新了薪丁,在閱讀crossin.me中jxgx072037寫的代碼時發(fā)現(xiàn)不懂的地方太多,一點點啃下來花費了不少時間灭衷,不過收獲不少次慢,但還沒有對class def dic有進一步的了解,后期再慢慢吸收吧。在他代碼的基礎(chǔ)上進行了簡單修改迫像,也可以正常運行劈愚,先把代碼貼上,比較好的技巧都在注釋中提到了:

# -*- coding: cp936 -*-

import urllib2

import re

import time

f=urllib2.urlopen('http://movie.douban.com/tag/?view=type').read()#抓取tag

n1=f.find('/h2')#定位抓取位置頭

n2=f.find('2015')#定位抓取位置尾

f1=f[(n1-4):(n2+10)]#定位抓取范圍

f2=re.findall('/\S{1,}"',f1)#初步抓取tag

f3=''.join(f2)#轉(zhuǎn)為str闻妓,方便后面replace

f4=f3.replace('"','')#去除雜質(zhì)

movie_tags=f4.split('/')#轉(zhuǎn)為list菌羽,方便后面[]

del movie_tags[0]#

#print len(movie_tags)

#print movie_tags

class Movie_list:#建立Movie_list類,方便后面引用

def __init__(self):#

self.url1='http://movie.douban.com/tag/'#

def request_open(self,n1,n2):#為提取文本定義函數(shù)request_open,n1為tag由缆,n2為頁數(shù)

self.url2='?start='+str(n2*20)+'&type=T'#n2*20是通過觀察頁面得出規(guī)律注祖,url后半段,方便拼接url

self.page1=urllib2.urlopen(self.url1+movie_tags[n1]+self.url2).read()#將url1均唉、tag是晨、url2三部分拼接起來,提取每個頁面的電影信息

return self.page1#將self.page1值返回給request_open

class Next_page:#

def __init__(self):#

self.url1='http://movie.douban.com/tag/'#

def np(self,n1):#為提取頁面數(shù)定義函數(shù)np舔箭,n1為tag

self.page1=urllib2.urlopen(self.url1+movie_tags[n1]).read()#將url1罩缴、tag兩部分拼接起來,提取每個tag的信息

self.url2=re.findall('type=T.*\d{1,2}',self.page1)#從tag中提取該tag的標簽頁

#print self.url2[-1]

#print self.url2[-1][9:]

if self.url2:#if為self.url2篩選值层扶,如果為真值箫章,則進下以下步驟

self.num2=self.url2[-1][9:]#取出雜質(zhì),self.url2為list镜会,[-1]取最后一個值檬寂,[9:]提取單獨的頁碼值,非常簡潔的提取方式

#print self.num2

if int(self.num2)<10 or int(self.num2)==10:#通過最后一個頁面數(shù)進行判斷是否大于10頁

return int(self.num2)#如果不大于10頁稚叹,就全部提取

else:#大于10頁

return 10#就賦值10.只提取10頁

#print self.num2

else:#如果self.url2為False

return 1#則賦予值1

#print self.num2

movie_list=Movie_list()#實例MOvie_list()

movie=[]#建立空list焰薄,方便后面append

class Movie_info:

def __init__(self):

pass

def m(self,n1,n2):#定義m函數(shù)提取movie信息,n1為tag值 n2為頁碼值

self.movie_name2=[]#電影名空list

self.movie_name1=re.findall('title="\S{1,}?"',movie_list.request_open(n1,n2))#初步提取所有頁面的電影名扒袖,

for x in range(len(self.movie_name1)-1):#循環(huán)讀取

self.movie_name2.append(self.movie_name1[x][7:-1])#去除雜質(zhì)塞茅,添加到list

#print self.movie_name1[x][7:-1]

self.movie_comment2=[]#電影評論人數(shù)空list

self.movie_comment1=re.findall('\(\d{1,}.*?\)|\(\xe5\xb0\x9a\xe6\x9c\xaa\xe4\xb8\x8a\xe6\x98\xa0\)|\(\xe7\x9b\xae\xe5\x89\x8d\xe6\x97\xa0\xe4\xba\xba\xe8\xaf\x84\xe4\xbb\xb7\)|\(\xe5\xb0\x91\xe4\xba\x8e10\xe4\xba\xba\xe8\xaf\x84\xe4\xbb\xb7\)|\(\xe8\xaf\x84\xe4\xbb\xb7\xe4\xba\xba\xe6\x95\xb0\xe4\xb8\x8d\xe8\xb6\xb3\)',movie_list.request_open(n1,n2))

for s in self.movie_comment1:#循環(huán)讀取

#print s

if re.findall('\d{1,}',s):#初步提取頁碼值

#print re.findall('\d{1,}',s)[0]

self.movie_comment2.append(re.findall('\d{1,}',s)[0])#去除雜質(zhì)

else:

self.movie_comment2.append('0')

#print self.movie_comment2

#提取評分信息

self.movie_rating2=[]

self.movie_rating1=re.findall('class=\"star clearfix[\s\S]*?pl',movie_list.request_open(n1,n2))

for s in self.movie_rating1:

self.p2=re.findall('\d\.\d',s)

if self.p2:

self.movie_rating2.append(self.p2[0])

else:

self.movie_rating2.append('沒有評分')

#提取電影URL

self.movie_url2=[]

self.n=0

self.movie_url1=re.findall('http://movie.douban.com/subject/\d{1,10}',movie_list.request_open(n1,n2))

for i in range(len(self.movie_url1)/2):

self.movie_url2.append(self.movie_url1[2*self.n])

self.n+=1

#將提取到的信息添加到dic中

for i in range(len(self.movie_name2)):

self.dic=[]

self.dic.append(self.movie_name2[i])

self.dic.append(self.movie_comment2[i])

self.dic.append(self.movie_rating2[i])

self.dic.append(self.movie_url2[i])

#self.dic[1]代表comment,評論人數(shù)大于50000的記錄季率,不到的不記錄

if int(self.dic[1])>50000:

movie.append(self.dic)

#電影名進行排重

if len(movie)>2:

for i in range(len(movie)-1):

#如果最新添加的電影名同原來記錄中的任意一項相同

if movie[-1][0]==movie[i][0]:

#print moive[-1]

#刪除最新添加的野瘦,即去重

del movie[-1]

#去重后 中止循環(huán)

#break

print '%d/3000'%(len(movie))

else:

continue

next_page=Next_page()

movie_info=Movie_info()

for x in range(len(movie_tags)-130):#循環(huán)標簽,為減少工作量飒泻,僅抓取7個標簽鞭光,len(movie_tags)=137

print'正在抓取標簽"%s"中的電影,%d/%s'%(movie_tags[x],x+1,len(movie_tags)-130)#查看抓取記錄

starttime2=time.time()#起始時間

for i in range(next_page.np(x)):#循環(huán)頁面

print'開始抓取第%d頁,抓取進度:'%(i+1)

starttime=time.time()

movie_info.m(x,i)#將標簽值泞遗、頁面值賦予m函數(shù)

endtime2=time.time()

print'抓取第%d頁完畢惰许,用時%.2fs'%(i+1,endtime2-starttime2)

#time.sleep(5)

endtime2=time.time()

print '抓取"%s"標簽完畢,%d/%s,用時%.2fs\n'%(movie_tags[x],x+1,len(movie_tags)-130,endtime2-starttime2)

'''if len(movie)>100:

print len(movie)

for i in range(len(movie)-100):

print i

print len(movie)-100

print movie[-i]

del movie[-i]

'''

def comment(s):

return int(s[1])

starttime4=time.time()

print'開始排序……'

movie.sort(key=comment,reverse=True)

endtime4=time.time()

print'排序完畢史辙,共耗時%.2f'%(endtime4-starttime4)

f=file('Douban_movies.html','w')#創(chuàng)建并打開html

#html頭

f.write('\n\n\n')

f.write('\n')

f.write('\n\n\n')

f.write('

豆瓣電影榜單

'+' '+'

按評價人數(shù)排名

')

s=1

for i in movie:

f.write('

'+str(s)+'. '+''+i[0]+''+'汹买,共'+i[1]+'人評價佩伤,'+'得分:'+i[2]+'分;'+'\n')

s+=1

f.write('')

f.close

print'完成晦毙!請查看html文件生巡,獲取豆瓣電影榜單。'

豆瓣爬蟲學習见妒,先告一段落孤荣,自己接下來會隨意在網(wǎng)上找個小網(wǎng)站實踐抓取下,這樣對理解爬蟲會有更有幫助

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末须揣,一起剝皮案震驚了整個濱河市盐股,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌返敬,老刑警劉巖遂庄,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異劲赠,居然都是意外死亡,警方通過查閱死者的電腦和手機秸谢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門凛澎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人估蹄,你說我怎么就攤上這事塑煎。” “怎么了臭蚁?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵最铁,是天一觀的道長。 經(jīng)常有香客問我垮兑,道長冷尉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任系枪,我火速辦了婚禮雀哨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘私爷。我一直安慰自己雾棺,他們只是感情好,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布衬浑。 她就那樣靜靜地躺著捌浩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪工秩。 梳的紋絲不亂的頭發(fā)上尸饺,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天进统,我揣著相機與錄音,去河邊找鬼侵佃。 笑死麻昼,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的馋辈。 我是一名探鬼主播抚芦,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼迈螟!你這毒婦竟也來了叉抡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤答毫,失蹤者是張志新(化名)和其女友劉穎褥民,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洗搂,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡消返,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了耘拇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撵颊。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惫叛,靈堂內(nèi)的尸體忽然破棺而出倡勇,到底是詐尸還是另有隱情,我是刑警寧澤嘉涌,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布妻熊,位于F島的核電站,受9級特大地震影響仑最,放射性物質(zhì)發(fā)生泄漏扔役。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一词身、第九天 我趴在偏房一處隱蔽的房頂上張望厅目。 院中可真熱鬧,春花似錦法严、人聲如沸损敷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拗馒。三九已至,卻和暖如春溯街,著一層夾襖步出監(jiān)牢的瞬間诱桂,已是汗流浹背洋丐。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挥等,地道東北人友绝。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像肝劲,于是被迫代替她去往敵國和親迁客。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本想著一步到位辞槐,把bug都解決后再發(fā)布掷漱,無奈碰到個問題困擾了好幾天,就先發(fā)布下目前的版本吧榄檬,做下階段備份卜范,代碼如下...
    瓦力求索閱讀 650評論 0 3
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 基本數(shù)據(jù)類型: 1: info = 'abc' info[2] = 'd' 結(jié)果是什么鹿榜,為什么會報錯呢? 答:...
    玖月初識閱讀 3,707評論 5 5
  • 2014年10月23日 12:04瀏覽(81) 《易經(jīng)》是一部不可多得的“經(jīng)典”海雪。其地位之高,堪為群經(jīng)之首舱殿。系伏羲...
    鎮(zhèn)南方良金閱讀 442評論 0 5
  • 今躺床上喳魏,聽著她那滴滴答答的聲音,很悅耳怀薛,一點也不煩躁,很愜意迷郑。我會經(jīng)常想象她就是天使枝恋,把天洗藍藍,將地打濕濕嗡害,又...
    想做個市井無賴閱讀 158評論 0 0