前言
好久不見略水,Python基礎系列完結也有段時間了森瘪,希望幫到了大家。
從今天開始我將開始更新一個新的系列:Python爬蟲學習筆記吵血。
如你所見谎替,本系列并不是復雜完備的教程,主要還是和大家一起分享我在學習Python爬蟲的一些想法以及知識總結蹋辅。
如果你已經(jīng)看完了我之前的Python基礎系列文章钱贯,對Python的基本語法有了一定的概念,那么可能我接下來要開始寫的東西可能會對你熟練運用Python有所幫助侦另。
Python爬蟲基礎知識
1. 爬蟲的基本概念
爬蟲是一類用于信息搜集的程序秩命,主要用于在一個或多個網(wǎng)頁中爬取數(shù)據(jù)并進行保存、分類褒傅、分析等操作弃锐,目前最大的爬蟲應該是各類搜索引擎,搜索引擎的實現(xiàn)原理簡單來說就是他們部署了很多24小時不停掃描公網(wǎng)網(wǎng)站信息的大型爬蟲程序殿托,這些程序將爬取到的數(shù)據(jù)分類整理存儲到數(shù)據(jù)數(shù)據(jù)庫中霹菊,然后通過網(wǎng)站前端頁面顯示出網(wǎng)站標題、簡介之類的信息碌尔,并提供了這些網(wǎng)站的網(wǎng)址讓用戶可以通過點擊直接訪問某一個網(wǎng)站浇辜。
個人其實基本沒有那種需要爬全網(wǎng)之類的需求,所以爬蟲的體量一般也比較小唾戚,大多是實現(xiàn)一些自動搶票柳洋、自動發(fā)帖、自動獲取信息之類的功能叹坦。
比如我現(xiàn)在需要一張北京到鄭州的火車票熊镣,一直買不到,沒得辦法只能時不時刷新一下網(wǎng)頁看有沒有余票,但是人工刷新很難有那么好的運氣能刷绪囱,所以這個時候就需要用到爬蟲模擬人工测蹲,幾秒鐘刷新一次然后監(jiān)控余票數(shù)值是否發(fā)生了變化。
把爬蟲放到服務器上24小時不間斷運行鬼吵,有票時這個字符會變?yōu)閿?shù)值或“有”扣甲,這樣就能第一時間通知你去搶票了。很多搶票軟件的原理其實就是這樣齿椅,沒什么黑科技琉挖,就是讓爬蟲時刻檢測是否有票。
2. 網(wǎng)頁基礎
我們在瀏覽器訪問的每一個頁面背后其實都是成千上萬行的代碼所組成的涣脚,而想要一個動態(tài)網(wǎng)站跑起來需要涉及到很多技術示辈,有負責頁面展示布局的html,css和動態(tài)交互的JavaScript、負責動態(tài)處理用戶請求的后端開發(fā)語言(PHP/Java/python/golang)遣蚀、數(shù)據(jù)庫技術矾麻、web服務器軟件等等。
在學習爬蟲時芭梯,我們經(jīng)常接觸的主要還是html和JavaScript险耀。不過我還是建議你能夠花一點時間去了解一下動態(tài)網(wǎng)頁搭建的基礎知識,這對于之后的爬蟲學習會有很大幫助粥帚。
網(wǎng)站的布局代碼是開放的胰耗,也就是每個用戶通過一些操作都可以看到一個網(wǎng)站的布局代碼∶⑽校基本上所有的瀏覽器都會提供查看網(wǎng)頁源代碼功能柴灯,一般情況下快捷鍵為crtrl+u按下之后可以看到網(wǎng)頁的源代碼了
由于太長了所以只截了局部,這些代碼最終形成的效果是這樣的
瀏覽器的作用就是將這些代碼解析為相應的樣式费尽,前端開發(fā)者在實際開發(fā)過程中往往是寫了一個樣式之后就需要通過瀏覽器實時預覽效果赠群,并通過工具進行調整,在瀏覽器中按下f12旱幼,即可調出開發(fā)者工具查描。
點擊這個小箭頭讓它處于激活狀態(tài)后在原網(wǎng)頁中用鼠標選擇一個元素,即可快速定位到這個元素在源代碼中的位置以及顯示CSS樣式信息柏卤。
如果暫時實在看不懂這些代碼也沒有關系冬三,如果將一個網(wǎng)頁看作是一個機器人的話
那么html(超文本編輯語言)代碼即為機器人的零部件
而CSS(層疊樣式表)則為組裝圖紙
JavaScript讓這個機器人可以自動擺臂或者旋轉。
(如果看到這還有女孩子缘缚,建議將機器人換為閃耀暖暖里的娃娃勾笆,零部件就是衣服,javaScript負責改變哇娃娃的動作和表情)
爬蟲目標
一般來說寫一個爬蟲之前需要先明確:
1. 目標網(wǎng)站
2. 數(shù)據(jù)內(nèi)容
3. 是否合法
首先需要確定自己想要爬取哪個網(wǎng)站的什么數(shù)據(jù)桥滨,然后很重要的一點大部分的網(wǎng)站并不歡迎爬蟲窝爪,有一些較為隱私的目錄弛车、數(shù)據(jù)會明確告訴告訴你不能爬取。
關于這個爬取范圍蒲每,首要根據(jù)就是robots協(xié)議纷跛,這個協(xié)議簡單來說就是在網(wǎng)頁的根目錄下定義一個robots.txt文件,里面定義了哪些屬于可爬取的公開數(shù)據(jù)邀杏,哪些是網(wǎng)站禁止爬取的目錄或文件
上圖為百度根目錄下robots.txt文件內(nèi)容贫奠,其中還根據(jù)不同的搜索引擎進行了限制,凡是disallow后的目錄均為非公開頁面淮阐。
一旦爬蟲違反了這個協(xié)議叮阅,那么網(wǎng)站就有充分理由提出司法訴訟刁品。
就像老師提前告訴你交白卷會掛科泣特,你就迎著頭皮交白卷,老師肯定饒不了你挑随。
另外状您,即使沒有違背robots協(xié)議,如果你的爬蟲運行時對網(wǎng)站造成了惡劣影響兜挨,比如訪問太過于頻繁導致網(wǎng)頁崩了或者影響了其他正常用戶的使用膏孟,又或者對網(wǎng)站造成了經(jīng)濟損失(比如將數(shù)據(jù)賣給競爭對手),網(wǎng)站都是可以申請送你一堆紫金手鐲的拌汇。
到時候可就是Python爬蟲入門失敗柒桑,入獄成功了。
爬蟲的簡單工作流程
從上面的搶票例子也可以看得出來噪舀,爬蟲的工作流程其實和人瀏覽網(wǎng)頁基本是一樣的魁淳,都是打開網(wǎng)頁,找到對應元素与倡,判斷元素是否發(fā)生了變化或者是保存某些數(shù)據(jù)界逛。
不同的人在看的時候存儲數(shù)據(jù)用的是小腦瓜,程序用的是硬盤纺座。
還有一個不同點在于程序并不在意這個網(wǎng)頁長什么樣息拜,很明顯他們都是直男,只會在網(wǎng)頁的源代碼中找自己需要的東西净响。
所以爬蟲的簡單工作流程是這樣的:
- 訪問網(wǎng)頁獲取源代碼
- 分析源代碼獲取指定數(shù)據(jù)
- 操作數(shù)據(jù)或執(zhí)行其他命令
你看少欺,爬蟲做的最多的其實是對獲取到的源代碼進行分析,只不過它并不能理解代碼馋贤,只是把這些源代碼當作是一個比較長的字符串困肩。
對字符串進行操作就是我們之前在Python基礎里面講過叮喳,所以不用害怕,爬蟲也可以很簡單。