Python零基礎爬蟲教學(實戰案例手把手Python爬蟲教學)

d497465762發表於2020-04-17

【20210819更新】對不住大家,這個網站我沒時間維護了,現在已經無法訪問,可以用別的網站練手

前言

女朋友看了都能學會的爬蟲教學

自己斷斷續續學習練習了兩三年python爬蟲,從網上看了無數教程,跟大神們學習了各種神奇的操作,現在雖然沒成為大神,但是想通過這篇教程來分享自己學習的爬蟲實戰案例。

通過本教程,你將學會如何用Python爬蟲從網路上爬取你想要的電影下載資源。本案例以00電影網為例進行爬取,當然你可以修改程式碼爬取你想要的任何內容。

如果你是零基礎,請從頭閱讀,如果你有些基礎,可以選擇部分閱讀。

第一章 你需要的環境和軟體

python3.5

既然我們是python爬蟲,那必然需要python了。我用的是3.5.3版本

官方下載連結點這個連結並下拉翻到圖中位置

點選紅框裡的連結進行下載,如果你是64位系統就點第一個,如果你是32位系統就點第二個

下載完成後是一個.exe檔案,雙擊執行,開始安裝,一路下一步就可以了,這裡我沒法一步步演示,如果遇到問題可以留言保證第一時間回答(我也從小白一路走過來,能體會遇到問題時的心情)

pycharm community 2017

這個呢是一個程式碼編輯器,可以大大提高程式設計效率

同樣是去官網下載,並且community版本是免費的,完全夠用

官網下載地址 點進去之後如圖所示

確保你選擇了紅框的位置,然後點選download就可以下載了

下載完成後雙擊開啟安裝程式,依然是一直點下一步就好了,當然也有一些自定義選項你可以自己選擇

環境配置

到這裡我們的軟體就安裝好了

接下來就是環境配置,這一步的目的是讓pycharm和python配合

首先,為了實現爬蟲程式,我們需要給python安裝一些工具包,操作非常簡單

在開始選單搜尋cmd並回車,開啟終端命令列視窗

手動輸入 pip3 install -------------- 並回車

本文案例中需要兩個庫安裝如下

pip3 install requests

pip3 install Beautifulsoup4  這兩句要分別執行,等一句安裝成功了再執行另一句

然後等待安裝,成功後會提示下圖字樣

第二章  開始寫python爬蟲

問題分析

在做任何爬蟲之前,我們都要先了解你爬取的網站的原始碼,根據原始碼來找到你想爬取的內容在什麼位置

那麼首先我們來看看目標網站的頁面原始碼目標網站,點選這個網址開啟網頁,然後按F12鍵開啟開發者模式,如圖所示

圖中,中間靠右側的紅色框裡就是我們主要檢視的內容,你要從這裡面的程式碼中找到你想要的內容才可以進行爬取。

這裡,我們的目標是搜尋電影資源並儲存下來。可以看到,網頁中間有一個搜尋框,輸入電影名字點選搜尋之後,會跳出搜尋結果的頁面,然後點選搜尋結果就進入了該電影的詳情頁,並且有下載連結,如圖所示

這裡我們搜尋的是霸王別姬。

由上述過程,可以明確我們要寫一個Python爬蟲程式,讓爬蟲來代替我們去搜尋和獲取電影的下載連結,這就是我們接下來程式設計的指導思想,告訴你的程式讓他去做什麼。

總結一下,我們的爬蟲要做下面這幾件事情:

1、開啟目標網頁

2、找到搜尋框

3、提交搜尋電影名並開啟搜尋結果頁面

4、進入搜尋電影詳情頁

5、找到下載連結位置並把所有連結儲存到本地電腦上

程式設計實現爬蟲

1、開啟目標網頁

開啟pycharm左上角選單欄以此點選file-->new project

在彈出的對話方塊中,設定專案路徑,這裡命名為spider,然後點選create

稍等幾秒專案就建立完成了,這時候在左邊資源管理器欄會出現spider專案資料夾,在spider上面右鍵-->new-->Python file來建立一個python程式指令碼檔案,命名為spider

然後就可以開始教我們的爬蟲做事了

複製下面程式碼到spider.py中

# 匯入之前安裝的庫
import requests
from bs4 import BeautifulSoup

# 首先定義以個變數url並賦值為目標網站'http://www.0011kytt.com'以及要搜尋的電影名movie_name
# 注意引號,字串必須用引號包圍起來
movie_name = '霸王別姬'
url = 'http://www.0011kytt.com'
# 然後用request.get()來獲取網頁
r = requests.get(url)
# 這裡要根據網頁的編碼來設定解碼,這個目標網站編碼為'utf-8'
r.encoding = 'utf-8'
# 然後獲取網頁原始碼並賦值給變數html
html = r.text
# 最後列印出網頁原始碼
print(html)

然後右鍵spider.py指令碼檔案,點選 run 'spyder.py' 即可執行

執行結果在下面控制檯欄顯示,如圖所示

可以看到我們的爬蟲乖乖爬到了網頁的原始碼,跟瀏覽器中按F12得到的是一樣的,這一步大功告成。

2、找到搜尋框

這一步就要指揮我們的小爬蟲根據剛才得到的原始碼去找搜尋框了

小爬蟲它怎麼會知道搜尋框在哪裡呢,當然是我們告訴它啊,那我們怎麼知道呢,OK,回到瀏覽器按F12,在紅框原始碼部分把滑鼠指標放上去挨著找,滑鼠指標位置對應的網頁部分會變灰色,點選原始碼上的小三角可以展開所有內容,方便我們查詢,如圖所示

咦,找到了耶,好神奇有沒有

現在我們知道了原來搜尋框在這個網頁原始碼的<div class="search_box">這個部分,OK,去告訴那個智障小爬蟲

# 這裡利用BeautifulSoup庫來解析網頁的原始碼並賦值給soup,方便後面的尋找
soup = BeautifulSoup(html, "lxml")
# 因為我們已經知道搜尋框在一個叫<div class="search_box">的地方
# 所以根據class="search_box"來找就好了
# 注意,因為class是python關鍵字,所以這裡要用class_,這是BeautifulSoup的規定
search_box = soup.find(class_='search_box')
# OK 列印出來看看找得對不對
print(search_box)

複製這段程式碼到spider.py中,貼上到上一段程式碼後面,然後跟上面一樣點選執行,得到結果如圖

不得了了,這個智障爬蟲已經學會找到搜尋框了,OK,這一步又大功告成

3、提交搜尋電影名並開啟搜尋結果頁面

我們的小爬蟲長進不小,繼續教他怎麼把電影名字填進搜尋框然後點選搜尋

再回到瀏覽器F12介面,我們再來找填電影名的位置以及搜尋按鈕的位置,如圖

蘇菲瑪索也太好看了吧  忍不住截出來給大家看看  烏蠅哥亂入 這網頁做的什麼鬼

說正事

我們已經找到輸入位置和搜尋按鈕位置分別在<input>和<button>中

另外,我們研究一下這個網站的搜尋功能,先隨便搜尋一個霸王別姬吧,說姬不說吧文明你我他,如圖

從圖中看到,網站連結變了,搜尋頁面變為了php檔案,記錄下這個url

還不趕緊告訴你的智障爬蟲,作為父親就得手把手教他

# 網站搜尋頁面的url為http://www.0011kytt.com/search/search.php
search_url = 'http://www.0011kytt.com/search/search.php'
# 從網頁原始碼裡看到輸入位置的input中有個name='keywords'
# 這個keywords就是用來記錄我們輸入電影名的變數
# 於是,我們構造以下變數,用來讓爬蟲往搜尋框填電影名
formdata = {'type': 'text',
            'keywords': movie_name}
# requests.post就可以把formdata填進搜尋框,並得到搜尋結果頁面賦值給r_r
r_r = requests.post(search_url, formdata)
# 同樣需要解碼
r_r.encoding = 'utf-8'
# 獲取網頁原始碼並賦值給變數html
r_html = r_r.text
# 列印看看對不對
print(r_html)

複製程式碼到spider.py中,貼在上一段程式碼後面,然後執行,得到結果如下圖

哎喲,不得了了,我們的爬蟲會自己搜尋了呢!

從圖中可以看到,霸王別姬的詳情頁連結就在<div class='item_pic'>的<a href=**********>中,那就好辦了呀,直接讓爬蟲獲取連結並開啟

# 首先還是用BeautifulSoup庫來解析網頁的原始碼
r_soup = BeautifulSoup(r_html, "lxml")
# 再根據class_='item_pic'找到所有搜尋結果,有可能搜尋到多個匹配的結果
movie_div_list = r_soup.find_all(class_='item_pic')
# 建立一個空的列表movie_url_list來儲存搜尋結果的詳情頁連結
movie_url_list = []
# 因為有可能搜尋到多個匹配的結果
# 所以這裡用一個迴圈來獲取所有搜尋結果的電影詳情頁連結
for movie_div in movie_div_list:
    # 對每一個搜尋結果,找到其中的href裡存著的詳情頁連結
    movie_url = movie_div.a.attrs['href']
    # 把詳情頁連結存到movie_url_list中
    movie_url_list.append(movie_url)
# OK 列印看看所有搜尋結果的詳情頁連結
print(movie_url_list)

同上點選執行,結果如下

可以看到列表中只有一個連結,因為霸王別姬搜尋結果只有一個。。。

4、進入搜尋電影詳情頁

這一步很簡單,只要request詳情頁連結得到詳情頁原始碼,跟我們去瀏覽器手動F12得到的原始碼比較一下,如果一樣那就說明成功了

# 這一步得構造詳情頁的連結,因為上一步得到的連結只是網站的相對路徑我們是無法直接訪問的
# 因為上一步的搜尋結果可能有好幾個,所以還是構造迴圈程式
for movie_url in movie_url_list:
    # 構造詳情頁連結
    movie_url = url + movie_url
    # 直接 requests.get獲取網頁
    r_m = requests.get(movie_url)
    # 同樣需要解碼
    r_m.encoding = 'utf-8'
    # 獲取網頁原始碼並賦值給變數html
    m_html = r_m.text
    # 列印看看對不對
    print(r_html)

同上複製到spider.py並執行得到結果如下(篇幅限制截圖一部分)

然後到霸王別姬的詳情頁霸王別姬按F12檢視原始碼,比較之後完全一樣,這一步又大功告成,你的智障爬蟲離幼兒園畢業只差一步了!

5、找到下載連結位置並把所有連結儲存到本地電腦上

這一步,我們要指揮爬蟲去爬取詳情頁的所有下載連結並儲存到自己電腦上

首先,我們還是得自己先看一下詳情頁原始碼,找到下載連結的位置,再告訴即將幼兒園畢業的爬蟲

可以看到,所有的下載連結都在<a class="dwon1">中的href裡面,哇,這就好辦了,趕緊告訴你的爬蟲去

    # # 首先還是用BeautifulSoup庫來解析網頁的原始碼
    m_soup = BeautifulSoup(m_html, "lxml")
    # 根據<title>取得電影名,方便儲存下載連結時檔案命名
    name = m_soup.find('title').text.split('-')[1]
    # 再根據class_='dwon1'找到所有下載連結
    movie_down_list = m_soup.find_all(class_='dwon1')
    # 建立一個空的列表down_url_list來儲存搜尋結果的詳情頁連結
    down_url_list = []
    # 繼續迴圈爬取下載連結並儲存到down_url_list
    for movie_down in movie_down_list:
        # 提取href中的下載連結
        down_url = movie_down.attrs['href']
        # 把下載連結儲存到down_url_list中,並在每個連結後面加一個換行符'\n'
        down_url_list.append(down_url + '\n')

    # 接下來就是把下載連結都儲存到'電影名.txt'中
    with open(name+'.txt', 'w') as f:
        f.writelines(down_url_list)

這裡注意!注意!注意!這部分程式碼跟上部分程式碼都在同一個迴圈中!!!!

為了方便小白使用,請將第4步中的程式碼從spider.py中刪除!並且!!複製下面這段完整的程式碼到剛才刪除的位置!!!然後執行即可

# 這一步得構造詳情頁的連結,因為上一步得到的連結只是網站的相對路徑我們是無法直接訪問的
# 因為上一步的搜尋結果可能有好幾個,所以還是構造迴圈程式
for movie_url in movie_url_list:
    # 構造詳情頁連結
    movie_url = url + movie_url
    # 直接 requests.get獲取網頁
    r_m = requests.get(movie_url)
    # 同樣需要解碼
    r_m.encoding = 'utf-8'
    # 獲取網頁原始碼並賦值給變數html
    m_html = r_m.text
    # 列印看看對不對
    # print(m_html)


    # # 首先還是用BeautifulSoup庫來解析網頁的原始碼
    m_soup = BeautifulSoup(m_html, "lxml")
    # 根據<title>取得電影名,方便儲存下載連結時檔案命名
    name = m_soup.find('title').text.split('-')[1]
    # 再根據class_='dwon1'找到所有下載連結
    movie_down_list = m_soup.find_all(class_='dwon1')
    # 建立一個空的列表down_url_list來儲存搜尋結果的詳情頁連結
    down_url_list = []
    # 繼續迴圈爬取下載連結並儲存到down_url_list
    for movie_down in movie_down_list:
        # 提取href中的下載連結
        down_url = movie_down.attrs['href']
        # 把下載連結儲存到down_url_list中,並在每個連結後面加一個換行符'\n'
        down_url_list.append(down_url + '\n')

    # 接下來就是把下載連結都儲存到'電影名.txt'中
    with open(name+'.txt', 'w') as f:
        f.writelines(down_url_list)

執行之後我們看到,spider.py路徑中多了一個txt檔案,裡面儲存了下載連結,如圖

至此大功告成了!你的智障爬蟲終於幼兒園畢業了!後面就要靠他自己悟了!

結束語

本文程式碼按順序組合在一起就可以執行了,

實在不會的話評論區提問題

學透這段程式碼你就可以自由改寫去爬任何網站了

然後你要問,我爬這麼多電影資源幹嘛啊我也看不完啊!

嘿嘿,你可以放進資料庫,做自己的網站呀

做網站可以幹嘛? 可以靠流量,掛廣告,賺零花錢呀!

有時間再寫一個零基礎建網站的教程吧

相關文章