
前言
- 俗話說得好 “ 萬事開頭難”。小碼哥學(xué)習(xí)爬蟲的道路非常曲折。有多曲折?如同山路十八彎那樣(一把辛酸淚) 。
- 作為過來人,小碼哥非常清楚并理解大家的需求。所以本教程不會一上來就介紹一堆很復(fù)雜的概念。
- 小碼哥保證:只要識字,就一定能教會你寫出你第一只爬蟲。
好了,廢話不多說,咱們直接進入正題。
對象
寫爬蟲前,我們首先要明確對象是誰。連對象都沒有,你還寫什么爬蟲?(無意中傷單身狗)這次小碼哥將帶著大家爬豆瓣電影。
說明
- Python版本: 2.7
- 所用到的庫: urllib2、json、bs4
- 編輯器: 小碼哥推薦大家使用Sublime Text 2
爬蟲之旅
第一步 新建文件并導(dǎo)入相關(guān)庫
打開Sublime Text 2 ,新建一個.py文件,文件名隨意。在編輯器中敲入以下代碼,導(dǎo)入所需要的庫。
import urllib2
import json
from bs4 import BeautifulSoup
第二步 定義標(biāo)簽變量及URL變量
標(biāo)簽變量:存儲電影標(biāo)簽,如 " 熱門 " 、" 華語 "、" 喜劇 " 等。
URL變量:存儲對象地址
tags = []
url = 'https://movie.douban.com/j/search_tags?type=movie&source='
第三步 爬取標(biāo)簽
直白的說這一步就是告訴豆瓣電影,我們要爬取它,讓它乖乖的把我們想要的東西交出來。
request = urllib2.Request(url=url)
response = urllib2.urlopen(request, timeout=20)
result = json.loads(response.read())
tags = result['tags']
第四步 爬取電影詳情
這一步很第三部類似,不過這一步多了一個判斷。為什么呢?因為標(biāo)簽數(shù)量是固定的,而每一個標(biāo)簽下的電影數(shù)量是不同的。我們需要讓爬蟲知道:
- 每個標(biāo)簽下的電影爬到哪里就代表全部爬完了
- 爬完一個標(biāo)簽后換繼續(xù)爬取下一個標(biāo)簽下的電影
- 爬到哪里就意味著所以標(biāo)簽下的電影已經(jīng)全部爬取完了
movies = []
for tag in tags:
limit = 0
while 1:
url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=' + \
tag + '&sort=recommend&page_limit=20&page_start=' + str(limit)
print url
request = urllib2.Request(url=url)
response = urllib2.urlopen(request, timeout=20)
result = json.loads(response.read())
result = result['subjects']
# 當(dāng)result為空時 說明這個標(biāo)簽已經(jīng)爬取完了
# 換下一個標(biāo)簽繼續(xù)
if len(result) == 0:
break
limit += 20
for items in result:
movies.append(items)
第五步 保存結(jié)果,寫入文件
這一步就是將我們爬取下來的電影數(shù)據(jù)保存到一個文本文件中,便于我們后期使用。
fw = open('hh.txt', 'w')
for item in movies:
tmp = ''
for key, value in item.items():
tmp += str(value) + ','
fw.write(tmp[:-1]+'\n')
fw.close()
第六步 保存代碼,并執(zhí)行
這一步就是將我們寫好的代碼保存,然后執(zhí)行。代碼運行結(jié)束后就可以在同路徑下看到一個 "movies.txt" 文件,這就是我們爬取的電影數(shù)據(jù)。
后記
- 至此,本篇教程就結(jié)束了。在本篇教程中小碼哥沒有對相關(guān)知識進行解釋,而是直接上代碼,讓大家復(fù)制、粘貼。小碼哥這么做只是為了激發(fā)大家的學(xué)習(xí)興趣,便于后期更深入的學(xué)習(xí)爬蟲知識。
- 如果大家對本教程里面相關(guān)內(nèi)容有疑惑可以寫在評論里,小碼哥看到后會第一時間回復(fù)。
- 若大家覺得本教程還不錯,麻煩在右下角給小碼哥點個喜歡,鼓勵小碼哥繼續(xù)創(chuàng)作!