走過路過不要錯過,學不會沒關系,長點見識也是可以的啦,
簡介
博主于17年開始自學的python, 期間做過各個領域的python開發,包括爬蟲, web, 硬體, 桌面應用, AI, 資料分析,
很多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:623406465
可能有人會問python能做硬體開發?可自行搜索pyboard丶樹莓派丶MicroPython, 描述python最有精髓的一句話: python 除了不能生孩子, 啥都能干,
?
通過該篇文章,讀者可以發現爬蟲入門并不難,還可以知道那些大學生網路刷視頻課程的實作原理,以及搶票工具的實作原理,并且可以自己動手撰寫一個簡單爬蟲,當然入門容易, 出來未并容易,
?
其實很多東西看似難,其實很容易,你覺得難的原因僅僅是因為你不知道它的原理, 奉勸讀者學習的程序中多了解一下實作原理, 這也是我切身體會,
?
本質
- 爬蟲是一種獲取網路資訊的腳本,方便幫助人們快速的丶大量的從網路上的獲取一些資訊,
- 簡單地說,比如你在一個網站上看到很多壞壞的圖,你好喜歡,想下載下來,但是一個個點太費勁了,如果你是個妹子,或許能喊來一群甜 dog幫你,

?
- 但是像博主這種沒人疼, 沒人愛的單身dog, 只能靠自己的雙手了,三下五除二, 擼了一段代碼搞定,代碼如下:
- 代碼呢? 年輕人做事不能這么著急,慢慢來嘛, 討厭,心急吃不了熱豆腐,

?
- 緊接著,博主繼續闡述爬蟲的本質,上文說到爬蟲是自動化獲取網路資訊的腳本,, 那么腳本操作的本質又是啥? 要知道腳本的操作本質,那么得知道你操作瀏覽器時,人家瀏覽器是怎么操作的,例如:
-
當你點擊一個頁面的時候,客戶端瀏覽器向指定的服務器發送一個
GET請求,服務端接受到該請求之后便會回傳回應內容,客戶端瀏覽器接受到回應內容便會進行決議渲染,此時你就看到了頁面上的內容,這期間還涉及客戶端是如何找到服務端的(DNS協議), 客戶端跟服務端是如何通信的(TCP協議), 這兩個協議這里就不作決議了,再說就超綱了,博主是一個正直的男人(單身,劃重點),違背倫理道德的事我不干,可以自行和百度老師好好深入交流, -
當你想點贊我的文章時候,此時萬惡的瀏覽器告訴你(其實罪魁禍首是服務器端代碼),需要登錄,你拒絕登錄的話,那么我就損失了一個贊,所以你還是行行好,登錄一下點贊吧, 你是個好人,

?
在登錄的時候,發現你沒有注冊,不管注冊還是登錄,你需要在瀏覽器輸入賬號密碼(掃碼登錄), 當你操作完成之后點登錄,客戶端瀏覽器會向服務端發送一個POST請求進行操作,服務端會進行一系列的操作然后回應給客戶端,客戶端瀏覽器會彈出提示告訴你操作狀態(登錄成功, 或者失敗),GET請求和POST請求有什么不同? GET請求的內容物體會帶在網址的后面,POST請求的內容物體會帶在請求體里面,還有XXX, 不告訴你(百度), -
了解了請求的GET和POST,對于本篇文章已經夠用了(還有PUT,DELETE,OPTION), 如果想深入了解的可以百度搜索:
詳解HTTP請求, 寫太深入就沒人看了,
?
-
- 網路刷課,搶票軟體,刷文章訪問量等軟體的實作原理也是基于網路請求的操作,只不過很多站點會增加一些反爬蟲機制,如ip限制,登錄加密,操作內容體加密,當然這些也是可以搞定的,
Python
也不知道我的讀者有沒有學過python, 甚至可能沒有學過編程,但是沒關系,很簡單的,
接下來,帶你如何快速入門python:
由于一篇文章的篇幅有限, 請自行查找python入門教程, 如果覺得不夠騷,可以私信我寫,
本人就是網上悶騷男, 網下靦腆男,
?
實戰
-
各位看官,現在又到了緊張的實戰環節, 我狂鐵賊六,又狂又頭鐵, 進可一打五,退可六分投,

?
-
首先介紹兩個Python的三方模塊
requests,BeautifulSoup,- requests是一個網路請求庫,用于實作上文說到的
GET,POST等請求,官方檔案點我, - BeautifulSoup庫是一個網頁文本決議模塊,用于檢索我們需要的內容, 官方檔案點我,
pip install requests,pip install BeautifulSoup4分別安裝這兩個包,
- requests是一個網路請求庫,用于實作上文說到的
-
入門教程從簡, 以一個斗圖網的表情包套圖頁面為例,實作該頁面下所有圖片的下載, 點我查看網頁,
-
先通過requests模塊獲取網頁文本資料:
import requests # 匯入模塊 def get_html_text(url): # 獲取html文本內容 """ 獲取html文本 :param url: :return: """ return requests.get(url).text # 這里通過GET請求拿到回傳的網頁文本內容 if __name__ == '__main__': url = 'http://www.bbsnet.com/xiongmaoren-18.html' html_text = get_html_text(url) print(html_text)
-
分析網頁結構,滑鼠對準圖片,右鍵點檢查元素, 如圖:

?
在右圖中可以看到,所有的圖片均包含在id=post_content的div標簽里面, 然后其下面是一些p標簽,img中src有圖片的鏈接,點進去可以直接看到一張圖片,
?
現在要做的事情,就是提取這些圖片鏈接,再通過GET請求和檔案操作進行圖片的保存, -
用BeautifouSoup查找這些圖片的鏈接地址, 定義一個函式來完成這件事情:
def get_images_urls(html_text): """ 獲取圖片鏈接 :param html_text: :return: """ urls = [] # 保存提取的url串列 soup = BeautifulSoup(html_text, 'html.parser') # 創建一個soup物件,可以列印出來看看里面的內容 div_tag = soup.find('div', {'id': 'post_content'}) # 查找id=post_content的標簽 img_tag_list = div_tag.find_all_next('img') # 查找div下面的所有img標簽 for img_tag in img_tag_list[:-4]: # 觀察找到結果發現從倒數第四個開始并不是表情包,所以只迭代到倒數第四個 url = img_tag.attrs['src'] # 提取img標題的src元素的值 urls.append(url) return urls
-
然后需要定義一段代碼,來完成圖片的保存, 如下:
def save_images(dir, urls): """ 保存圖片 :param urls: :return: """ if not os.path.exists(dir): # 使用os模塊來判斷檔案夾是否存在,不存在則創建 os.makedirs(dir) count = 1 for url in urls: print('正在下載第{}張圖片...'.format(str(count))) ext = url.split('.')[-1] # 拿到圖片的擴展名 filename = dir + '/' + str(count) + '.' + ext # 拼接圖片的存盤路徑 content = requests.get(url).content # 通過GET請求獲取圖片的二進制內容,注意拿網頁原始碼時候是text with open(filename, 'wb') as f: # 已寫二進制的形式打開檔案 f.write(content) # 將圖片內容寫入 count += 1 # count 用于圖片命名和計數,遞增1
-
代碼運行結果:

?
-
這時候就會有杠精說: 這一頁不就15個圖片嘛,我點幾下就完事了,寫個代碼時間還比較長時間,又或者有虛心向學者問: 怎樣爬取整個網站的圖片或者某一分類下所有的圖片,那么已斗圖表情包分類下的圖片為例子, 參照之前講述的步驟, 看下網頁結構:

?
可以看到右側我圈紅的框內容包含了一些li標簽,li標簽對應的就算每一個封面圖, 我們要找到的就是藍錢畫出來的url,對應之前代碼的url, 只要我們把這些url都找出來,再呼叫我們之前的代碼就可以下載所有的圖片了, 當然這里還涉及分頁, 分頁的操作方法也是一樣的,只要我們把下一頁的鏈接找出來,再進行訪問,直到找不到下一頁為止, -
貼上爬取單個頁面的完整代碼,爬取分類的讀者自己琢磨怎么去實作,
# _*_coding:utf8_*_ # Project: spider # File: main.py # Author: ClassmateLin # Email: 406728295@qq.com # 有專案的可以滴滴我, Python/Java/PHP/Go均可,WX: ClassmateYue # Time: 2020/2/21 4:54 下午 # DESC: import requests import os from bs4 import BeautifulSoup def get_html_text(url): """ 獲取html文本 :param url: :return: """ return requests.get(url).text def get_images_urls(html_text): """ 獲取圖片鏈接 :param html_text: :return: """ urls = [] # 保存提取的url串列 soup = BeautifulSoup(html_text, 'html.parser') # 創建一個soup物件,可以列印出來看看里面的內容 div_tag = soup.find('div', {'id': 'post_content'}) # 查找id=post_content的標簽 img_tag_list = div_tag.find_all_next('img') # 查找div下面的所有img標簽 for img_tag in img_tag_list[:-4]: # 觀察找到結果發現從倒數第四個開始并不是表情包,所以只迭代到倒數第四個 url = img_tag.attrs['src'] # 提取img標題的src元素的值 urls.append(url) return urls def save_images(dir, urls): """ 保存圖片 :param urls: :return: """ if not os.path.exists(dir): # 使用os模塊來判斷檔案夾是否存在,不存在則創建 os.makedirs(dir) count = 1 for url in urls: print('正在下載第{}張圖片...'.format(str(count))) ext = url.split('.')[-1] # 拿到圖片的擴展名 filename = dir + '/' + str(count) + '.' + ext # 拼接圖片的存盤路徑 content = requests.get(url).content # 通過GET請求獲取圖片的二進制內容,注意拿網頁原始碼時候是text with open(filename, 'wb') as f: # 已寫二進制的形式打開檔案 f.write(content) # 將圖片內容寫入 count += 1 # count 用于圖片命名和計數,遞增1 if __name__ == '__main__': url = 'http://www.bbsnet.com/xiongmaoren-18.html' html_text = get_html_text(url) image_urls = get_images_urls(html_text) save_images('./images', image_urls)
-
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/187349.html
標籤:其他
