爬虫前奏
爬蟲前奏
什么是爬蟲
“網絡爬蟲,又被稱為網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱為網頁追逐者,是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本,另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲。”
爬蟲應用場景
- 搜索引擎公司(谷歌:全球最大的爬蟲,百度:國內最大的爬蟲);
- 輿情分析與數據挖掘;
- 惠惠購物助手;
- 數據分析;
- 搶票軟件等。
為什么用Python寫爬蟲
- PHP:PHP是世界上最好的語言,但他天生不是做爬蟲的料,而且對多線程、異步支持也并不是很理想,并發處理能力弱。爬蟲是一種工具性程序,對速度和效率要求都是較高的。
- JAVA:生態圈很完善,是Python爬蟲最大的競爭對手。但是JAVA語言本身過于笨重,代碼量很大。重構的成本高,任何一個細微的修改都可能導致代碼大量改動。而爬蟲需要經常性的做改動,修改采集代碼。
- C/C++:運行效率是無敵的。但是學習和開發成本高。寫個爬蟲小程序可能要大半天時間。
- Python:語法優美、代碼簡潔、開發效率高、支持模塊多。相關的HTTP請求模塊和HTTP解析模塊非常豐富。還有Scrapy和Scrapy-redis框架讓我們開發爬蟲變得異常簡單。
開發工具的安裝
安裝Python
下載地址:https://www.python.org/
或者使用Anaconda:https://www.anaconda.com/
哪個軟件無所謂,只要是Python3.6以上的版本就可以了。
安裝Pycharm
Pycharm Commnity(社區版):對于不需要做web開發,不需要使用Professional(專業版),使用Community版就足夠了,并且這個軟件功能很強大,而且免費!
下載地址:https://www.jetbrains.com/pycharm/download/#section=windows
安裝Chrome:
下載地址:https://www.google.com/chrome/
如果是下載不了,說明被墻了,可用各大軟件管家安裝。
HTTP協議
HTTP協議介紹
- HTTP協議:全稱是是HyperText Transfer
Protocol,中文意思是超文本傳輸協議,是一種發布和接收HTML(HyperText Markup
Language)頁面的方法。服務器端口號是80端口。 - HTTPS協議:是HTTP協議的加密版本,在HTTP下加入了SSL層。服務器端口號是443端口。
- 更多介紹請參考百度百科。
URL詳解
URL是Uniform Resource Locator的簡寫,統一資源定位符。 一個URL由以下幾部分組成:
scheme://host:port/path/?query-string=xxx#anchor
scheme:代表的是訪問的協議,一般為http或者https以及ftp等。
host:主機名,域名,比如www.baidu.com。
port:端口號。當你訪問一個網站的時候,瀏覽器默認使用80端口。
path:查找路徑。比如:www.jianshu.com/trending/now,后面的trending/now就是path。
query-string:查詢字符串,比如:www.baidu.com/s?wd=python,后面的wd=python就是查詢字符串。
anchor:錨點,前端用來做頁面定位的?,F在一些前后端分離項目,也用錨點來做導航。
在瀏覽器中請求一個url,瀏覽器會對這個url進行一個編碼。除英文字母,數字和部分符號外,其他的全部使用百分號+十六進制碼值進行編碼。
常見的請求Method
在Http協議中,定義了八種請求方法。這里介紹兩種常用的請求方法,分別是get請求和post請求。
常見的請求頭參數
在http協議中,向服務器發送一個請求,數據分為三部分,第一個是把數據放在url中,第二個是把數據放在body中(在post請求中),第三個就是把數據放在head中。這里介紹在網絡爬蟲中經常會用到的一些請求頭參數:
User-Agent:瀏覽器名稱。這個在網絡爬蟲中經常會被使用到。請求一個網頁的時候,服務器通過這個參數就可以知道這個請求是由哪種瀏覽器發送的。如果我們是通過爬蟲發送請求,那么我們的User-Agent就是Python,這對于那些有反爬蟲機制的網站來說,可以輕易的判斷你這個請求是爬蟲。因此我們要經常設置這個值為一些瀏覽器的值,來偽裝我們的爬蟲。
Referer:表明當前這個請求是從哪個url過來的。這個一般也可以用來做反爬蟲技術。如果不是從指定頁面過來的,那么就不做相關的響應。
Cookie:http協議是無狀態的。也就是同一個人發送了兩次請求,服務器沒有能力知道這兩個請求是否來自同一個人。因此這時候就用cookie來做標識。一般如果想要做登錄后才能訪問的網站,那么就需要發送cookie信息了。
常見的響應狀態碼
200:請求正常,服務器正常的返回數據。
301:永久重定向。比如在訪問www.jingdong.com的時候會重定向到www.jd.com。
302:臨時重定向。比如在訪問一個需要登錄的頁面的時候,而此時沒有登錄,那么就會重定向到登錄頁面。
400:請求的url在服務器上找不到。換句話說就是請求url錯誤。
403:服務器拒絕訪問,權限不夠。
500:服務器內部錯誤??赡苁欠掌鞒霈Fbug了。
Chrome抓包工具
Elements
可以幫助我們分析網頁結構,獲取我們想要的數據。但是Elements下是最終呈現的網頁數據,有時候網頁數據是通過ajax請求得到的,因此Elements下的數據不能完全相信。
Console
用來打印網頁的一些信息。
Sources
整個網頁所加載的所有文件。
Network
查看整個網頁發送的所有網絡請求。一般我們想要去查看某個請求的信息,都可以到這個里面去看。
總結
- 上一篇: 如何官网下载最新的谷歌chrome浏览器
- 下一篇: 在CentOS下源码安装 Xen并搭建W