用Python對斗圖網站的分析以及抓取
通過對斗圖網站的分析,利用抓取靜態網頁的方式對其進行抓取並保存到本地,適合新手進行學習。我從文科生的角度來書寫,真正的做到讓任何讀者都可以讀懂同時做到很好的入門。畢竟我也是文科生自學的,哈哈哈哈。PS:學習此文章需要具備Python的基本語法就可以。本章將帶領學習Python爬蟲里的requests和BeautifulSoup模塊。掌握了本節內容(掌握是指能靈活運用哦)基本的靜態網頁沒問題啦。花不多說,系好安全帶,發車。。。
首先最重要的是分析網頁結構:
下一頁呢:
可以發現下一頁後page變為6,7,,8等等,所以發現規律,細心就可以發現規律 。為什麼這麼說,網頁是人寫的,為了偷懶就找些規律遍歷就行,就不用一頁一頁的寫。哦寫到這我好像懶癌犯了,,哈哈哈哈,還是得寫啊。。。哎 啊啊啊。。。import requests
from requests.exceptions import RequestException
from bs4 import BeautifulSoup
import re
import os
到這裡應該沒有基本的問題,就是導入基本的模塊和包啊啥的。我是這樣的先寫了requests和第二個和第三個的模塊包啥的,然後其他的用到在過來導入,因為不知道要用到那些啊啊哈哈哈哈。。。後面的OS模塊後邊會說到。別急啊。。。。這裡要說的是第二個,PS可能新手小萌新會問第二個是什麼東西啊,怎麼沒見過啊啊。。別急他是一個處理異常的,一會你就知道了。呵呵呵
header = {
user-agent:Mozilla/5.0
(Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101Safari/537.36,}
介紹怎麼找到請求頭部分以及作用:
網頁這裡單擊滑鼠右鍵看到檢查元素:找到圖中的內容,,
這個加入的請求頭部分,header是一個字典形式的存儲。
點擊進去就發現了奧妙,把它複製過來就行了,注意的是它是字典形式,必須用字典的規則來寫。作用當然是不然網站發現我們是爬蟲機器而是瀏覽器的行為,否則給封了。還玩毛線啊。
charset="UTF-8"
def get_page(url):
r = requests.get(url,headers=header,timeout=30)
try:
if
r.status_code == 200:return r.text
return None
except RequestException:
return None
到這裡我們定義了一個函數get_page(url),寫爬蟲必須要寫函數。用到了requests里的get來發起請求。這裡沒什麼好說的,後邊跟著請求頭部分和超時時間。然後就是重頭戲了try--except部分處理異常的內容。來一個邏輯思路,如果返回的狀態碼是200,我們就是返回r.text,否則返回第一個None,如果發起請求失敗返回第二個None。整個過程就是這樣一個邏輯在裡邊。這段代碼也可以作為基本的框架來書寫。所以呢就需要在requests里的exceptions內導入RequestException。到這裡我們得到了網頁的源代碼。可以列印出來看看。PS新手小萌最好全部手動列印出來看看,否則根本不知道得到的是什麼{就像我一樣都會列印出來看的,我也是新手啊哈哈哈哈哈}
到這裡應該沒問題。。看啊,有列印了,所以代碼寫的是對的。。。呵呵呵呵
獲得網頁源代碼之後我們接下來要做什麼呢?當然是從源代碼里解析出我們要得數據啦。
這裡在定義一個函數get_contents(html)來獲取數據。分析網頁內容:打開網頁開發者工具可以發現我們需要得數據都在這裡:
並且全部包含在上圖那個div里。
點開就發現我們需要的圖片地址是圖中的src,我們只要把該地址提取出來就可以,圖片名字在下邊的p標籤里。於是找div,{class:"page-content
text-center"}這個div里的所有a,{class:"col-xs-6col-sm-3"}標籤並循環出來。構造美麗湯和正則表達式提取
如果是新手小萌新一定要列印出來看看【dalao除外,哈哈】,就是item,然後在繼續後邊的步驟可以看到下邊有了輸出,證明代碼寫的是正確的。好了有了輸出我們繼續從獲得的代碼里提取需要的內容,就是圖片地址和名稱。下邊用正則表達式提取內容:
現在來解釋一下這些代碼,上圖中兩個地方都是圖片的地址,為了方便我們提取後邊的data-original。至於為什麼是r 這樣的格式,通俗的講就是完整的輸出引號中 的內容,而為什麼會有個[0],還是列印出來就知道:
我把中括弧出掉,列印輸出這樣的許多列表,提取列表裡的內容,自然按照列表的方法提取。後邊提取名稱依葫蘆畫瓢不在累贅,因為懶癌犯了。。。。。。。。。。。。。
提取的內容要放在容器內,容器就是列表或者字典來存儲,這裡用列表:
到這裡沒問題,為什麼箭頭哪裡會有這個替換函數?一會就知道了,別急,也可以去掉這個函數也可以,不過一會就會保錯。有了url後就可以下載了。
圖片是二進位文件,所以加content。我這裡用提取的名稱來命名圖片。用os模塊創建文件來裝這些圖片。都是很基本的東西。最後循環頁數。
在自己的項目根目錄下建立個文件夾』斗圖呵呵呵『這個文件夾,就可以run運行了。
運行之後會發現會報錯,為什麼呢?
可以發現只有以問號結尾的會報錯,而其他不會,因為我是win電腦寫的,而win電腦文件不可以以問號結尾。
所以才有了剛才的replace把?轉變為空格符。
這裡僅抓取5頁的內容,具體看自己所需更改代碼實現抓取更多圖。
我本人是學文科的,某上海二本院校,管理專業,學這個因為興趣,因為想增加自己的優勢競爭力,多一份人生選擇。為什麼寫的這麼細?
做到最牛就是我所訂下的每日標準,不管到哪都是。—德萊文
學習是孤獨的,你覺得呢?需要有人陪伴嗎?一起學習不孤獨。。那就快關注我把。我會不定時的更新。哈哈哈哈。讓我們紅塵作伴學得瀟瀟洒灑。哈哈哈哈
推薦閱讀:
※python中 if-else 與 try-except的轉換 與while 與 whileTrue-try-except的轉換