本文為自己動手崇决,豐衣足食陈莽!Python3網(wǎng)絡(luò)爬蟲實戰(zhàn)案例的學(xué)習(xí)筆記,部分圖片來源于視頻截圖寿烟。
爬蟲:請求網(wǎng)站澈驼,并提取數(shù)據(jù)的自動化程序請求網(wǎng)站,并提取數(shù)據(jù)的自動化程序
爬蟲基本流程
在了解爬蟲的定義之后筛武,那么再來看看爬蟲是如何工作的吧缝其。
第一步:發(fā)起請求。一般是通過HTTP庫徘六,對目標站點進行請求内边。等同于自己打開瀏覽器,輸入網(wǎng)址待锈。
第二步: 獲取響應(yīng)內(nèi)容(response)漠其。如果請求的內(nèi)容存在于服務(wù)器上,那么服務(wù)器會返回請求的內(nèi)容竿音,一般為:HTML和屎,二進制文件(視頻,音頻)春瞬,文檔眶俩,Json字符串等。
第三步:解析內(nèi)容快鱼。對于用戶而言颠印,就是尋找自己需要的信息。對于Python爬蟲而言抹竹,就是利用正則表達式或者其他庫提取目標信息线罕。
第四步:保存數(shù)據(jù)。解析得到的數(shù)據(jù)可以多種形式窃判,如文本钞楼,音頻,視頻保存在本地袄琳。
請求與響應(yīng)
爬蟲最主要的任務(wù)就是發(fā)起請求(Request)询件,然后獲取服務(wù)器的響應(yīng)(Response)燃乍。
Request所包含的信息:
爬蟲的第一步就是發(fā)起請求,請求包括如下內(nèi)容:
- 請求方式: 主要有GET,POST兩種類型宛琅,另外還有HEAD,PUT,DELETE,OPTIONS等刻蟹。
GET特點:請求的參數(shù)全部包含在請求的網(wǎng)址內(nèi)。
POST特點: 需要構(gòu)造Form Data才能發(fā)起請求 - 請求URL:URL的全名是統(tǒng)一資源定位符嘿辟。網(wǎng)絡(luò)上的一切資源都是位于服務(wù)器的某一個位置舆瘪,而URL就是告知瀏覽器去哪里獲取這些資源。
- 請求頭:請求頭(header)就是告訴服務(wù)器你是誰红伦,包括User-gaget,Host,Cookies等信息英古。添加請求頭信息,保證請求合法
-
請求體:請求時包含的額外數(shù)據(jù)昙读,如POST請求需要輸入的表單數(shù)據(jù)召调,一般用于模擬登陸。
什么是請求
Response所包含的信息
向服務(wù)器發(fā)出請求后蛮浑,不出意外某残,服務(wù)器就會返回一個響應(yīng)(response)。包括如下內(nèi)容:
- 響應(yīng)狀態(tài):用于表示請求的結(jié)果陵吸,如200代表成功,404找不到頁面介牙,502服務(wù)器錯誤等壮虫。
- 響應(yīng)頭 :如內(nèi)容類型,內(nèi)容長度环础,服務(wù)器信息囚似,設(shè)置Cookie等等
- 響應(yīng)體就是網(wǎng)頁源代碼,也就是用于解析數(shù)據(jù)的部分线得。
訪問網(wǎng)頁遇到的第一個文件一般都是document形式饶唤,都是網(wǎng)頁源代碼。然后解析內(nèi)部的超鏈接贯钩,繼續(xù)發(fā)起請求募狂。
代碼部分:
# 導(dǎo)入請求庫
import requests
# 請求網(wǎng)頁
response = requests.get('http://www.baidu.com')
# 查看響應(yīng)體內(nèi)容
print(response.text)
print(response.content)
print(response.headers)
print(response.status_code)
能夠抓取的數(shù)據(jù):
只要是網(wǎng)頁上可以看到的內(nèi)容,不出意外都是可以抓取的角雷。但是能不能抓得到很大程度上取決于你的爬蟲水平祸穷。
- 網(wǎng)頁文本: 如HTML文檔,Json格式文本等
- 圖片: 獲取的都是二進制文件勺三,如果保存為圖片格式
- 視頻: 也是也二進制文件雷滚,保存為視頻格式
- 其他 : 只要你能請求到,就能獲取到
如何解析網(wǎng)頁:
解析網(wǎng)頁會遇到的問題
抓到的數(shù)據(jù)和瀏覽器看到的不一樣
element看到的網(wǎng)頁的源代碼已經(jīng)經(jīng)過修飾吗坚,數(shù)據(jù)來自后臺端口
瀏覽器運行JS祈远,后臺請求加載呆万,
如何解決JavaScript渲染問題
- 分析Ajax請求
- selenium/webdriver
- Splash
- PyV8、Ghost.py