Hello World 級別爬蟲教程

前言

  • 俗話說得好 “ 萬事開頭難”。小碼哥學(xué)習(xí)爬蟲的道路非常曲折。有多曲折?如同山路十八彎那樣(一把辛酸淚) 。
  • 作為過來人,小碼哥非常清楚并理解大家的需求。所以本教程不會一上來就介紹一堆很復(fù)雜的概念。
  • 小碼哥保證:只要識字,就一定能教會你寫出你第一只爬蟲
    好了,廢話不多說,咱們直接進入正題。

對象

寫爬蟲前,我們首先要明確對象是誰。連對象都沒有,你還寫什么爬蟲?(無意中傷單身狗)這次小碼哥將帶著大家爬豆瓣電影。

說明

  1. Python版本: 2.7
  2. 所用到的庫: urllib2、json、bs4
  3. 編輯器: 小碼哥推薦大家使用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ù)量是不同的。我們需要讓爬蟲知道:

  1. 每個標(biāo)簽下的電影爬到哪里就代表全部爬完了
  2. 爬完一個標(biāo)簽后換繼續(xù)爬取下一個標(biāo)簽下的電影
  3. 爬到哪里就意味著所以標(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)作!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,048評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,192評論 25 708
  • 引路靠貴人,走路靠自己,成長靠學(xué)習(xí),成就靠團隊。起床不是為了應(yīng)付今天的時間; 而是必須做到今天要比昨天活得更精彩!...
    開心寶貝_3709閱讀 123評論 0 0
  • (一) 昨晚在武漢,臨時收到一個培訓(xùn)通知,需今天早上八點趕上。在與老師溝通后,上午趕車,下午趕課。于是早六點半起床...
    紫燕南飛閱讀 269評論 2 0
  • 楔子 “為什么?為什么你要這么做?難道我為你做的還不夠多不夠好嗎?!”“對不起…”“就算你想跟我離婚我答應(yīng)啊,可是...
    Miko姍閱讀 268評論 0 0

友情鏈接更多精彩內(nèi)容