Python零基礎爬蟲教學(實戰案例手把手Python爬蟲教學)
【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檔案,裡面儲存了下載連結,如圖
至此大功告成了!你的智障爬蟲終於幼兒園畢業了!後面就要靠他自己悟了!
結束語
本文程式碼按順序組合在一起就可以執行了,
實在不會的話評論區提問題
學透這段程式碼你就可以自由改寫去爬任何網站了
然後你要問,我爬這麼多電影資源幹嘛啊我也看不完啊!
嘿嘿,你可以放進資料庫,做自己的網站呀
做網站可以幹嘛? 可以靠流量,掛廣告,賺零花錢呀!
有時間再寫一個零基礎建網站的教程吧
相關文章
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- Python 爬蟲實戰Python爬蟲
- 基礎爬蟲案例實戰爬蟲
- python爬蟲實戰,爬蟲之路,永無止境Python爬蟲
- python爬蟲是什麼?學習python爬蟲難嗎Python爬蟲
- python爬蟲-33個Python爬蟲專案實戰(推薦)Python爬蟲
- python爬蟲實戰教程-Python爬蟲開發實戰教程(微課版)Python爬蟲
- python爬蟲學習1Python爬蟲
- python3網路爬蟲開發實戰_Python3 爬蟲實戰Python爬蟲
- 從零基礎開始學習Python爬蟲你需要注意的點以及如何學習爬蟲Python爬蟲
- 不踩坑的Python爬蟲:Python爬蟲開發與專案實戰,從爬蟲入門 PythonPython爬蟲
- python 爬蟲實戰的原理Python爬蟲
- Python網路爬蟲實戰Python爬蟲
- Python爬蟲實戰之bilibiliPython爬蟲
- Python爬蟲實戰案例-爬取幣世界標紅快訊Python爬蟲
- Python:基礎&爬蟲Python爬蟲
- 為什麼學習python及爬蟲,Python爬蟲[入門篇]?Python爬蟲
- python網路爬蟲應用_python網路爬蟲應用實戰Python爬蟲
- Python爬蟲:手把手教你寫迷你爬蟲架構Python爬蟲架構
- Python爬蟲入門學習實戰專案(一)Python爬蟲
- 什麼是爬蟲?學習Python爬蟲難不難?爬蟲Python
- python3 爬蟲實戰:為爬蟲新增 GUI 影象介面Python爬蟲GUI
- Python爬蟲之Scrapy學習(基礎篇)Python爬蟲
- 學爬蟲,我需要掌握哪些Python基礎?爬蟲Python
- Python案例學習——模組和包、爬蟲的基礎概念Python爬蟲
- Python 爬蟲零基礎教程(1):爬單個圖片Python爬蟲
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 2個月精通Python爬蟲——3大爬蟲框架+6場實戰+反爬蟲技巧+分散式爬蟲Python爬蟲框架分散式
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲
- Python【爬蟲實戰】提取資料Python爬蟲
- python爬蟲——爬取大學排名資訊Python爬蟲
- Python爬蟲之路-爬蟲基礎知識(理論)Python爬蟲
- Python分散式爬蟲(三) - 爬蟲基礎知識Python分散式爬蟲
- python_爬蟲基礎Python爬蟲
- python爬蟲基礎概念Python爬蟲
- 《Python3網路爬蟲開發實戰》教程||爬蟲教程Python爬蟲
- Python網路爬蟲實戰專案大全 32個Python爬蟲專案demoPython爬蟲
- python 爬蟲Python爬蟲