前言
女朋友看了都能學會的爬蟲教學
自己斷斷續續學習練習了兩三年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文件,里面保存了下載鏈接,如圖
至此大功告成了!你的智障爬蟲終於幼兒園畢業了!后面就要靠他自己悟了!
結束語
本文代碼按順序組合在一起就可以運行了,
實在不會的話評論區提問題
學透這段代碼你就可以自由改寫去爬任何網站了
然后你要問,我爬這么多電影資源干嘛啊我也看不完啊!
嘿嘿,你可以放進數據庫,做自己的網站呀
做網站可以干嘛? 可以靠流量,掛廣告,賺零花錢呀!
有時間再寫一個零基礎建網站的教程吧
————————————————
版權聲明:本文為CSDN博主「d497465762」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/d497465762/article/details/105580408