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