【AI白身境】学深度学习你不得不知的爬虫基础
文章首發于微信公眾號《有三AI》
【AI白身境】學深度學習你不得不知的爬蟲基礎
今天是新專欄《AI白身境》的第七篇,所謂白身,就是什么都不會,還沒有進入角色。
對于深度學習,一個好的數據集可以說非常重要的,但是通常情況下我們并沒有大量的數據,因此我們有必要掌握一定的爬蟲知識,從而更好的準備訓練數據集。
作者?|?湯興旺?言有三
編輯?|?湯興旺?言有三
?
01?前端網頁基礎
在介紹爬蟲之前我們先說下網頁基礎,理解前端網頁的一些基礎知識對于學習爬蟲是很有必要的,它是爬蟲的基礎之一。
1.1?網頁構成
通常情況下我們看到的網頁由三部分組成,分別是HTML、CSS和JavaScript,接下來我分別介紹它們。
1.1.1?HTML
HTML,全稱Hyper?Text?Markup?Language,也就是“超文本鏈接標示語言”。但它不是一種編程語言,而是一種標記語言。我們通常看到的網頁就是HTML使用標記標簽來描述的。在HTML中,通常不同類型的文字通過不同類型的標簽來表示。如圖片用img標簽表示,視頻用video標簽表示,段落用p標簽表示。
現在我們看下網易云音樂的源代碼,如下圖所示:
獲取這個網頁的源代碼很簡單,打開網頁后,按下F12鍵就會出現這個源代碼了。通過觀察這個HTML我們會發現整個網頁就是由各種標簽嵌套組合而成的,從而形成了整個網頁的架構。
1.1.2?CSS
從上面的介紹我們知道HTML定義了網頁的架構,可以認為是一個框架,但若只有HTML,那么這樣的網頁就太簡陋了,為了讓我們的網頁更加好看點,我們就需要用CSS。
CSS,全稱Cascading?Style?Sheets,即層疊樣式表。“層疊”是指當在HTML中引用了數個樣式文件,并且樣式發生沖突時,瀏覽器能依據層疊順序處理。“樣式”指網頁中文字大小、顏色、元素間距、排列等格式。我們來看看網易云音樂的CSS,如下所示。
1.1.3?JavaScript
上面介紹的HTML和CSS只能展現一種靜態信息,缺乏交互性。但我們在網頁里通常會看到一些交互和動畫效果,如提示框、輪播圖等,這些動態信息通常就是通過JavaScript完成的。它的出現使得用戶與信息之間不只是一種瀏覽與顯示的關系,而是實現了一種實時、動態、交互的頁面功能。
這就是網頁構成的一些基本知識,你掌握了嗎?
1.2?URL
爬蟲最主要的處理對象是什么?那毫無疑問肯定是URL,爬蟲的實質就是根據URL地址取得所需要的文件內容,然后對它進行進一步的處理。所以說準確理解URL也是理解網絡爬蟲的基礎之一。
URL,全稱是Uniform?Resource?Locator,通俗地說,URL是Internet上描述信息資源的字符串,主要用在各種WWW客戶程序和服務器程序上。URL也有它特定的格式,其格式由三部分組成,如下:
1.第一部分是協議(或稱為服務方式)。
2.第二部分是存有該資源的主機IP地址(有時也包括端口號)。
3.第三部分是主機資源的具體地址,如目錄和文件名等。
通常第一部分和第二部分用“://”符號隔開,第二部分和第三部分用“/”符號隔開。另外第一部分和第二部分是不可缺少的,第三部分有時可以省略。?
我們通過一個URL的一個小例子來解釋下上面的三部分,下面是NBA中國官方網站湖人隊網頁的URL:
http://china.nba.com/lakers/
http這個是協議,也就是HTTP超文本傳輸協議,它是URL的第一部分;china.nba.com這個是網站名,由服務器名和域名構成,它是URL的第二部分;lakers就是存放網頁的根目錄,是URL的第三部分。
這就是URL的一些基礎知識,希望大家深刻理解。
通過上面的介紹,相信你對網頁的基礎知識也有了大致的了解,下面我們開始學習爬蟲相關庫的一些基礎知識。
?
02?python爬蟲庫
了解了網頁的一些基礎知識后,我們繼續來學習下python爬蟲的一些庫,通過前面第三篇文章《AI白身境學習AI必備的python基礎》我們都知道python有許多庫,如NumPy,matplotlib等,針對爬蟲它有個自帶的庫urllib。
2.1?urllib介紹????????????????????????
urllib是python自帶的一個主要用來爬蟲的標準庫,無需安裝可以直接用,它能完成如下任務:網頁請求、響應獲取、代理和cookie設置、異常處理和URL解析,可以說要想學會爬蟲,必須要學會它。
2.2?urllib基礎用法
我們已經知道urllib能完成網頁請求、響應獲取等許多任務,現在我來介紹下它的基本用法。
2.2.1?發起GET/POST請求
在用urllib實現GET和POST之前,我們先解釋下什么是GET?什么是POST?它們的區別又是啥?
GET和POST實際上就是HTTP請求的兩種基本方法,通常GET是從指定的資源請求數據,而POST是向指定的資源提交要被處理的數據。我們再看看它的區別是啥,請看下面表格:
哈哈,你現在看到這些肯定很悶逼。
我們從頭(HTTP)來分析下,我們已經知道HTTP是基于TCP/IP的關于數據如何在萬維網中如何通信的協議。HTTP的底層是TCP/IP,所以GET和POST的底層也是TCP/IP,也就是說,GET/POST都是TCP連接,GET和POST能做的事情是一樣的。
那它們的區別體現在哪呢?對于GET方式的請求,瀏覽器會把http?header和data一并發送出去;而對于POST,瀏覽器先發送header,服務器響應后,瀏覽器再發送data。
也就是說,在大萬維網世界中,TCP就像汽車,我們用TCP來運輸數據,HTTP給汽車運輸設定了好幾個運輸方式,有GET,?POST等。GET只需要汽車跑一趟就把貨送到了,而POST得跑兩趟,第一趟,先去和服務器打個招呼“嗨,我等下要送一批貨來,你們打開門迎接我”,然后再回頭把貨送過去。
你現在明白它們的區別了嗎?我們再看看urllib是如何使用這兩個方法的。
在urllib中有個request這個模塊,它主要是來負責構造和發起網絡請求。它有個urlopen()訪問方法,默認的訪問方法是GET,我們在urlopen()方法中傳入字符串格式的url地址后,此方法會訪問目標網址,然后返回訪問的結果。請看下面的實例:
from?urllib?import?request
url?=?"https://zhuanlan.zhihu.com/p/20751612"
html?=?request.urlopen(url).read().decode("utf-8")
print(html)
urlopen()方法請求返回的對象類型為HTTPResponse對象。
from?urllib?import?request
url?=?"https://zhuanlan.zhihu.com/p/20751612"
html?=?request.urlopen(url)
print(type(html))
返回的狀態為200,即返回數據。
print(html.status)
返回的數據會是bytes的二進制格式,所以需要decode()一下,轉換成字符串格式。
print(html.read().decode("utf-8")
這就是GET方式的一個最基本的運用,對于POST方法的實現其實和GET差不多,只不過多了一個data參數。即若添加data參數,就是以POST請求方式進行,如果沒有data參數就是GET請求方式,請看下面一個POST案例。
?
這里通過使用http://httpbin.org/post網站演示(該網站可以作為練習如何使用urllib的一個站點使用,能夠模擬各種請求操作)完成了一次POST請求。
通過上面的介紹我相信你對urllib的基礎知識有了一個比較深刻的了解,但這遠遠不夠,需要我們在實踐中不斷豐富我們的知識庫,另外,urllib只是爬蟲一個最基礎的庫,務必掌握,其他一些高端的庫根據需要可以自行學會。
到目前為止我們還沒有進行爬一些張圖片或者視頻的實驗。下面我們看看如何來爬一些圖片。
?
03?爬蟲小實驗
在本節我將介紹如何對知乎上某個專欄的一些圖片進行爬蟲。
話不多說,直接上這個小實驗的代碼(寫在pachong.py文件中)如下:
from?urllib?import?request
from?bs4?import?BeautifulSoup
import?re
import?time
url?=?"https://zhuanlan.zhihu.com/p/20751612"
html?=?request.urlopen(url).read().decode("utf-8")
soup?=?BeautifulSoup(html,"html.parser")
links?=?soup.find_all("img","origin_image?zh-lightbox-thumb",src?=?re.compile(r'.jpg$'))
path?=?r"/home/tangxingwang/paichong_picture"
for?link?in?links:
????print(link.attrs['src'])
????request.urlretrieve(link.attrs["src"],path+'\%s.jpg'?%?time.time())??
在本實例中,我們用Beautiful?Soup結合正則表達式的方式來提取符合要求的鏈接,鏈接要求是在img標簽中,class=origin_image?zh-lightbox-thumb,而且鏈接是.jpg結尾。
soup?=?BeautifulSoup(html,"html.parser")
links?=?soup.find_all("img","origin_image?zh-lightbox-thumb",src?=?re.compile(r'.jpg$'))
提取出所有鏈接后,使用request.urlretrieve來將所有鏈接保存到本地
在終端執行上面程序代碼即可爬取圖片
python3??pachong.py
?
04?github爬蟲工程
接下來我們看看github上一些優秀的爬蟲工程。
4.1?github圖片爬蟲工程
在github上有許多優秀的圖片爬蟲項目,我們選擇一個對百度圖片爬蟲的工程詳細解釋下。下面是這個工程項目的github鏈接:
https://github.com/kong36088/BaiduImageSpider
我們將其clone下來后,有下圖所示的一些文件:
接下來我們打開index.py這個文件,按照自己的需求修改自己的下面這一行代碼
我把索引改成了科比,總數為1頁,然后運行下面代碼
python3?index.py
執行python3?index.py后你會發現有大量的圖片在下載,如下圖所示:
我們再看下文件的變化,你會現在的文件比我們之前clone下來的多了個科比文件夾,如下圖所示:
打開科比這個文件夾,你會發現有許多科比的照片。
關于對百度圖片爬蟲就講解到這,github上還有大量這樣的項目,如下:
1.該github工程是關于對知乎里面某個問題下所有的圖片進行爬蟲。下面是鏈接:
https://github.com/ladingwu/python_zhihu
2.該github工程是關于對微博某個用戶相冊里面所有的圖片進行爬蟲。下面是鏈接:
https://github.com/lincanbin/Sina-Weibo-Album-Downloader
3.該github工程是關于對花瓣里面旅游模塊圖片進行爬蟲,下面是鏈接
https://github.com/darrenfantasy/image_crawler/tree/master/Huaban
4.該github工程是關于對google?image進行爬蟲。下面是鏈接:
https://github.com/Ehco1996/Python-crawler/tree/master/Google-Image
這就是github上一些關于圖片爬蟲的工程,當然github上關于圖片爬蟲的工程還有很多,有需要可以自己search再學習學習。
4.2?github視頻爬蟲工程
說完圖片的一些工程,我們再看看github上一些比較好的視頻工程。下面這個鏈接是關于對抖音視頻進行爬蟲的一個項目。鏈接如下:
https://github.com/loadchange/amemv-crawler
clone下來有如下文件
現在打開文件`share-url.txt`,把你想要下載的抖音號分享鏈接編輯進去,以逗號/空格/tab/表格鍵/回車符分隔都行,可以多行。
樣式如下:
然后在終端執行?下面代碼即可下載
python3?amemv-video-ripper.py
下載后的視頻保存在download文件件里面,里面有各個抖音號的小視頻
在github中關于視頻爬蟲的工程實際上還有很多,大家可以去上面看看!
最后附上一個github上關于學習爬蟲比較好的干貨。鏈接如下。
https://github.com/Ehco1996/Python-crawler
?
總結
AI領域必須掌握的數據爬蟲基礎就講到這里,這方面的知識還有很多,大家平時還需要多注意學習!
下期預告:下一期我們會講用可視化來理解你的數據,如果你有建議,歡迎留言,我們會及時采納的。
?
轉載文章請后臺聯系
侵權必究
?
AI白身境系列完整閱讀:
第一期:【AI白身境】深度學習從棄用windows開始
第二期:【AI白身境】Linux干活三板斧,shell、vim和git
第三期:【AI白身境】學AI必備的python基礎
第四期:【AI白身境】深度學習必備圖像基礎
第五期:【AI白身境】搞計算機視覺必備的OpenCV入門基礎
第六期:【AI白身境】只會用Python?g++,CMake和Makefile了解一下
第七期:【AI白身境】學深度學習你不得不知的爬蟲基礎
第八期:?【AI白身境】深度學習中的數據可視化
第九期:【AI白身境】入行AI需要什么數學基礎:左手矩陣論,右手微積分
第十期:【AI白身境】一文覽盡計算機視覺研究方向
第十一期:【AI白身境】AI+,都加在哪些應用領域了
第十二期:【AI白身境】究竟誰是paper之王,全球前10的計算機科學家
AI初識境系列完整閱讀
第一期:【AI初識境】從3次人工智能潮起潮落說起
第二期:【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
第三期:【AI初識境】近20年深度學習在圖像領域的重要進展節點
第四期:【AI初識境】激活函數:從人工設計到自動搜索
第五期:【AI初識境】什么是深度學習成功的開始?參數初始化
第六期:【AI初識境】深度學習模型中的Normalization,你懂了多少?
第七期:【AI初識境】為了圍剿SGD大家這些年想過的那十幾招
第八期:【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
第九期:【AI初識境】如何增加深度學習模型的泛化能力
第十期:【AI初識境】深度學習模型評估,從圖像分類到生成模型
第十一期:【AI初識境】深度學習中常用的損失函數有哪些?
第十二期:【AI初識境】給深度學習新手開始項目時的10條建議
感謝各位看官的耐心閱讀,不足之處希望多多指教。后續內容將會不定期奉上,歡迎大家關注有三公眾號 有三AI!
?
?
總結
以上是生活随笔為你收集整理的【AI白身境】学深度学习你不得不知的爬虫基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【有三吐槽】程序员改BUG的六重境界,你
- 下一篇: 【AI白身境】深度学习中的数据可视化