Python爬虫之旅_ONE
前言:
最近學習了python的一些基礎語法,又跟著廖雪峰老師用異步IO框架搭建了一個簡易的網站(雖然有的現在還不懂)不過慢慢來,python還有一個好玩的地方是可以寫爬蟲,趁著現在有充裕的時間就來學習一下啦,推薦一下小猿圈課程,老師講的特別好
0x00: 了解爬蟲
爬蟲在使用場景的分類
——通用爬蟲:
抓取系統重要組成部分。抓取的是一整張頁面數據。
—— 聚焦爬蟲:
是建立在通用爬蟲的基礎之上,抓取的是頁面特定的局部內容。
——增量式爬蟲:
監測網站的數據的更新情況,智慧抓取網站中最新更新出來的數據
反爬機制: 門戶網站,可以通過制定相應的策略揮著手段,防止爬蟲驚醒網站數據的爬蟲。
反反爬策略:爬蟲程序也可以通過制定相關的策略或者技術手段,破解門戶網站中具備的反爬機制,從而獲取門戶網站中的數據。
robots.txt協議:
君子協議。規定了網站中那些數據可以被爬蟲那些數據不可以被爬取
0x01:http&https協議
http協議:
服務器和客戶端進行數據交互的一種形式
常見的請求頭信息:
User-Agent:請求載體的身份標識 Connection:請求完畢后,是斷開連接還是保持連接常用的響應頭信息:
Content-Type: 服務器響應回客戶端的數據類型https協議
安全的超文本傳輸協議,涉及到數據加密
加密方式:
對稱秘鑰加密
客戶端先進行數據加密,并將密文和密鑰一同發送到服務器端,服務器端利用密鑰解開密文。
缺點:容易被攔截,不安全
非對稱秘鑰加密
例如:RSA這種加密方式
證書秘鑰加密
0x02:request模塊
request模塊是python中原生的一款基于網絡請求的模塊,功能非常強大,而且很高效,作用便是模擬瀏覽器發起請求,既然是模擬瀏覽器發起請求,那就需要用request模塊做和瀏覽器相同的工作
request編碼流程:
練習一:爬取搜狗首頁的頁面數據(基本流程)
爬取代碼:
# 爬取搜狗首頁的頁面數據 import requests if __name__ == "__main__":#setp1 指定urlurl = 'https://www.sogou.com/'#setp2 發起請求#get方法返回一個響應對象response = requests.get(url=url)#setp3 獲取響應數據#text返回的是字符串形式的響應數據page_text = response.textprint(page_text)#setp4 持久化存儲with open('D:/爬蟲/sogou.html','w',encoding='utf-8') as f:f.write(page_text)print('爬取完成')響應:
練習二:網頁采集器(GET)
在編寫前,需要來了解一些反爬機制:
UA: User-Agent(請求載體的身份標識)
UA檢測:門戶網站的服務器會檢測對應請求的載體身份標識,如果檢測到請求的載體身份標識為某一個瀏覽器說明該請求是一個正常的請求,但是,如果檢測到請求的載體身份標識不是基于某一款瀏覽器的,則表示該請求為不正常的請求(爬蟲),則服務器端就很有可能拒絕該次請求。
UA偽裝:將對應的User-Agent封裝到一個字典中,加入代碼中。
這里就爬取搜狗瀏覽器
比如搜索刀劍神域時,后面跟了一堆參數,但有一個參數query特別明顯,這個參數就是我們要查詢的內容,只保留這個參數,發現還是可以查詢的,這樣url就比較好指定了
除此之外,還需要添加上UA偽裝,防止被拒絕
下面就來編寫爬取代碼:
爬取成功
如果想要爬取其他內容,只需要更改參數即可
練習三:破解百度翻譯(Post)
在編寫前先要了解一下Ajax
AJAX 是一種用于創建快速動態網頁的技術。
通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新
打開百度翻譯,發現頁面局部刷新,這里使用了Ajax,請求成功后會將局部的進行一個刷新 ,因此只要捕獲對應的Ajax請求,就可以將對應的翻譯的結果存儲到json的文本文件當中
為什么要存儲到json的文本文件當中,我們捕獲一下服務器端的返回信息就可以知道
接下來就去捕獲Ajax請求,比如輸入dog,捕捉到了對應的參數,接下來就寫爬取代碼
爬取成功
練習四:爬取豆瓣電影
隨便點一個類型的電影,往下面查看時會發現每次當頁面為20部電影時,稍微等一會就可以繼續往下查看更多未顯示的電影,網頁是沒有任何變化的,只是局部的變化,因此可以捕捉一下Ajax請求
Ajax請求時便會攜帶這些參數,那既然知道了攜帶的是什么參數,就可以編寫爬取腳本了
作業:爬取肯德基餐廳的位置信息
當查詢餐廳時,只是局部頁面發生了變化,因此可以確定是Ajax,所以去捕獲一下請求
是通過POST的方式進行請求
注意這里不再是json類型的,而是text,
編寫爬蟲代碼:
爬取成功
總結:
這次就先學習到這里,這次學習收獲很大,下一篇將記錄更好玩的爬蟲之旅!!
總結
以上是生活随笔為你收集整理的Python爬虫之旅_ONE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记录本地Hexo博客部署到服务器上
- 下一篇: Python爬虫之旅_TWO