爬蟲背景知識:
大數據的時代?數據怎么來的呢?
企業(yè)產生的數據:大的公司會根據用戶的行為記錄數據,數據會被大公司利用
,可以用來做數據的分析
數據平臺的數據:
政府和機構的數據:
數據咨詢平臺的數據:
- 爬蟲:以上平臺或者機構不能夠提供我們需要的數據,
這時就需要爬蟲工程師,根據需求從互聯網上抓取數據?
什么是爬蟲?
就是一段自動抓取互聯網數據的程序或腳本
網頁的三大特性?:
1.每一個網頁都有自己唯一的URL地址(統(tǒng)一資源定位符)
2.網頁都是通過HTML(超文本)來展示數據的
3.網頁是通過http/https(超文本傳輸協議)來傳輸html的
爬蟲最基本的步驟?:
1.尋找目標url,發(fā)起請求
2.獲取請求的響應結果,分析響應結果
3.從響應結果中提取數據
a.第一部分,從網頁中提取的目標數據
b.如果存在新的url地址,則提取,繼續(xù)發(fā)起請求
爬蟲結束:所有的目標url全部請求完畢,爬蟲結束
- 數據的用途:
1.可以爬取數據,寫自己的網站
2.搜索引擎
3.購物助手
4.日常數據的基本分析(知乎數據冰山專欄)
做爬蟲并不只有python可以完成:
java php c/c++ switch ...
java:是python寫爬蟲的最大的競爭對手,java的發(fā)展周期
長,生態(tài)圈都比較完善,也有很多第三方庫的支持,java的代
碼量比較大,開發(fā)的成本比較高,后期維護也比較繁瑣.(以后可以去學習了解)
php:php曾經被叫做世界上最好的語言(一般用來后端的),
也可以用來寫爬蟲,但是對多任務的支持不太好,爬蟲對效
率要求比較高,所有一般不適用php寫爬蟲
c/c++:比較偏向于底層的語言,代碼的運行效率高,學習的
門楷非常高,代碼成型比較慢.
python:代碼簡單易懂,并且第三方的庫也有很多,python
自帶的urllib網絡請求模塊,requests網絡請求模塊,網絡
解析庫xpath,BeautifulSoup4,pyquery等等,還有成熟
高效穩(wěn)定的爬蟲框架scrapy(pyspider)等等,并且還支持
分布式爬蟲(scrapy-redis)框架
爬蟲的分類(通用爬蟲,聚焦爬蟲):
- 通用爬蟲:是搜索引擎的重要組成部分
作用和目的:盡可能全的將互聯網上所有的網頁下載到
本地,通過分詞,去噪等進行預處理,處理后進行數據的持久化(
鏡像備份),然后提取檢索系統(tǒng)
獲取數據的步驟):
a.獲取一些種子url,放入待爬取隊列
b.從待爬取隊列中取出url發(fā)起請求,將獲取的響應結果
進行處理,之后存入本地,然后將已爬取的url,放入已爬
取隊列
c.從響應結果中獲取外鏈(url),將url放入待爬取隊列中
DNS服務:將域名轉換為ip的技術
搜索引擎如何獲取新網站的url:
1.向搜索引擎直接提交url地址(https://ziyuan.baidu.com/linksubmit/url)
2.通過網頁的外鏈
3.跟DNS服務商合作,新網站注冊的域對應的網
站將會迅速被搜索引擎抓取
搜索引擎的排名:
1.根據用戶的訪問量和網站的流量進行的排名
2.競價排名:根據價錢進行網站的排名
搜索引擎需要遵守robot協議:
是一個規(guī)范,網站通過robot協議告訴搜索引擎哪些頁面可以爬取,
哪些頁面不可以爬取
https://www.taobao.com/robots.txt
User-agent: Baiduspider(搜索引擎爬蟲名稱)
Allow: /article (允許爬取的url)
Disallow: /product/ (不允許爬取的url)
搜索引擎的缺點:
1.只能夠獲取簡單的文件數據,大型的二進制數據(音頻,視頻)
都不能夠獲取
2.搜索引擎搜索的結果千篇一律,沒有辦法根據特定的用戶,特定的需求
獲取特定的數據
3.搜索引擎搜索結果99%并沒用
由于搜索引擎的缺點,產生了聚焦爬蟲
聚焦爬蟲:是面向主題,面向需求的爬蟲,只獲取跟
需求相關的數據
- OSI七層協議的目的:實現不同的系統(tǒng)互聯之間的數據通訊,
實現數據的傳輸. - 七層協議:
應用層 表示層 會話程 傳輸層 網絡層 數據鏈路層 物理層
應用層:http/https
傳輸層:TCP/UDP
TCP:網絡傳輸協議,面向連接的,長連接,傳輸的是數據流
,確保數據的安全性和完整性,但是數據傳輸的效率低
UDP:網絡傳輸協議,是非面向連接的,短連接,傳輸的是數據包,
傳輸數據是不安全的,可能會造成數據的丟失,傳輸速度非掣芎樱快
- http(超文本傳輸協議,端口號是80):
實現從網絡傳輸草文本數據到本地瀏覽器的傳送協議
https(端口號是443):是http的安全版本,在http的基礎上添加了一個
SSL(安全套接字層)層,用于web端的安全傳送,在傳輸層
對網絡連接進行加密,
1.構建了一個安全的數據傳輸通道.
2.保證網站的真實性和有效性
https協議需要有一個證書(CA證書):由專門的證書機構頒發(fā)的,
也可以自己生成,但是訪問的時候會提示連接不安全
- http的工作原理:
URL介紹:
URI:統(tǒng)一資源標志符
URN:統(tǒng)一資源名稱
URL:統(tǒng)一資源定位符
URI是URN和URL的父類
URL的組成部分:
https://baike.baidu.com/item/OSI/5520?fr=aladdin
https://book.qidian.com/info/1004608738
https://book.qidian.com/info/1004608738#Catalog
scheme:指的是協議(https/http)
host:值得是服務器的ip或者域名
port:指的是端口號
path:資源路徑
query_string:url地址后面的查詢參數
anchor(錨點):可以指定要跳轉的位置
請求的方式都是基于http1.1的版本
get:只是用于從服務器獲取數據,再url連接后面
可能會跟一些查詢參數
post:向服務器端提交數據,數據會放在請求體中,
一般用于添加或者修改數據
delete:用來刪除數據
put:更新整個資源(用來做數據的更新)
patch:(更新資源)(局部數據的更新)對比:get和post請求的區(qū)別
1.使用場景:get從服務器端獲取數據,post請求向服務器端提交數據
2.安全性:get請求參數只拼接在url地址上,post請求會將參數放在
請求體中,(注意:不要誤認為只要url地址后面添加了參數就是一個get請求)
3.get請求的url是有長度限制的,post的請求體中可以添加很多字段
- 常見的請求頭參數:
User-Agent:這個是設置瀏覽器
(設置這個參數模擬瀏覽器請求對方服務器)
Cookie:保存在客戶端中,保存的是用戶信息
Referer:告訴服務器,當前請求是從哪個界面跳轉過來的(防盜鏈)
Accept:可以接受的數據類型....
- Cookie和Session:目的保持會話
http請求是無狀態(tài)的,每一次請求斷開后,下一次請求就
認為是一個新的請求,為了維持請求狀態(tài)就用到了Cookie
和Session
Cookie:保存在客戶端的,記錄信息確定用戶的身份
Session:保存在服務端的,同樣是記錄信息確定用戶身份
- 常見的請求狀態(tài)碼:
200:請求成功
3xx:重定向
301:永久重定向
302:臨時重定向
4xx:客戶端請求錯誤
400:請求錯誤,服務器無法解析
401:未授權,沒有進行身份驗證
403:服務器拒絕訪問
404:訪問的頁面不存在
405:請求方式不允許
408:請求超時 5xx:服務端錯誤
500:服務端內部錯誤
501:服務器暫時不具備完成請求的功能
503:服務器不可用