Network 能記錄瀏覽器的所有請求。
一、快捷鍵(F12)打開Network。
第0行:紅色的 按鈕是啟動Network 監控,默認高亮是打開,灰色圓圈是清空面板上的信息。右側勾選框Preserve log ,也是第4的位置,作用是‘保留請求日志’。如果不惦記這個,當頁面發生跳轉時,記錄會被清空。所以需要爬取跳轉界面時,需要點亮它。
第1行:是對請求進行分類查看。
常用的分類:
- ALL(查看全部)
- XHR(僅查看XHR)
- Doc(Document ,第0個請求一般在這里)
- Img(僅查看圖片)
- Media(僅查看媒體文件)
- Other(其他)
- JS和CSS 是前端代碼,負責發起請求和頁面實現
- Font 是文字的字體。
也可以直接參考下表:
其中非常重要的一個請求是XHR,XHR的功能是傳輸數據,其中最重要的一種數據是用json 格式寫的,和html 一樣,這種數據能夠有組織地存儲大量內容。json 的數據類型是‘文本’,在Python 語言中,把它稱為字符串;對於json 格式的數據,可以輕松轉化為字典/列表,也能將列表/字典 轉化為json 格式的數據。
- 1.是一個時間軸,記錄什么時間,有什么請求。
- 2.name: 請求的名字
- 3.Status: 請求的狀態,1xx/2xx/3xx/4xx
- 4. type : 請求的類型
- 6.Size :數據的大小
- 7.time:請求的耗時
- 8.waterfall :瀑布流,用於描述每個請求的起止時間
二、json 文件查找(前提是確定數據沒有存儲在html 里)
- 第一種的話是根據文件大小(Size)尋找,你想要爬取的文件數據存儲量肯定是特別大的,那它相比其他的文件內存,所占用的內存肯定是最大的,所以可以嘗試直接尋找文件Size 值最大的文件查看,點擊Preview,查看最小級里是否有需要的數據。
- 第二種就是先把Network 面板清空,上下滑動界面,看有沒有新多出來的XHR,多出來的那個肯定就是你要的數據了。
三、json 文件模塊介紹
- Headers :標頭(請求信息)
- Preview:預覽
- Response:響應
- Cookies: cookies
- Timing :時間
四、Preview 功能描述
點擊Preview ,可以看到,Preview 下存儲的都是一層一層字典格式的數據,要取數據的話,就要一層一層取key,從而拿到value 值。
五、Headers 功能描述
點擊headers,可以看到有4個模塊
5.1 General 模塊介紹
- Request URL :請求的url 地址,在瀏覽器中打開這個鏈接,看到的 是一層又一層字典和列表。
- Request Method :請求用到的方法 GET/POST
- Remote Address: 服務器的ip地址 和端口
- Referrer Policy: 用於記錄請求來源信息
5.2 Query String Parameters
中文翻譯的話就是查詢字符串參數,所以常用來存儲需要傳遞得到參數。
由兩部分組成的,‘https://www.douban.com/search’+‘q=%E6%B5%B7%E8’
中間用?進行分割,前半部分是我們所請求的地址。后半部分就是請求所帶的參數,它會告訴服務器,我們需要什么樣的參數,這部分用‘utf-8’進行編碼了。
在這個鏈接里,是用# 進行分隔的。#和?功能是一樣的,作用都是分隔,把#替換成?,訪問效果是一樣的。(注意:用?分隔的url 不一定能用#代替)
在requests 模塊里,requests.get() 提供了一個參數params,可以用字典的形式,把參數傳遞進去。詳情的話可以參考一下官方文檔:
需要注意的點吶,就是Query String Parameters里面的內容,復制拿到之后,需要封裝為一個字典,傳遞給params。特別是,要給他們打引號,讓他們變成字符串。
params = { 'g_tk':'5381', 'loginUin':'0', 'hostUin':'0', 'format':'json', 'inCharset':'utf8', 'outCharset':'GB2312', 'notice':'0', 'platform':'yqq.json', 'needNewCode':'0', 'cid':'205360772', 'reqtype':'2', 'biztype':'1', 'topid':'102065756', 'cmd':'6', 'needmusiccrit':'0', 'pagenum':str(i), 'pagesize':'15', 'lasthotcommentid':'song_102065756_3202544866_44059185', 'domain':'qq.com', 'ct':'24', 'cv':'10101010' } #將參數封裝為字典
res_comments = requests.get(url,params=params)
5.3 Request Headers
每一個請求,都會有一個Request Heaers ,也就是請求頭。它里面會有關於該請求的基本信息。
- user-agent : 中文翻譯的話就是用戶代理,可以記錄電腦的信息和瀏覽器的版本,這里我用的是Chrome
- origin :中文源頭 referer: 引用來源 兩個都記錄了請求的最初起源是來自哪個網頁,區別是referer 比origin 攜帶的信息更多。
5.3.1 如何添加request headers
首先看一下user-agent 的官方文檔
和params 很像,就是封裝成字典就可以了。
import requests url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp' headers = { 'origin':'https://y.qq.com', 'referer':'https://y.qq.com/n/yqq/song/004Z8Ihr0JIu5s.html', 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', # 標記了請求從什么設備,什么瀏覽器上發出 } # 偽裝請求頭 params = { 'ct':'24', 'loginUin':'0' } # 將參數封裝為字典 res_music = requests.get(url,headers=headers,params=params) # 發起請求,填入請求頭和參數
加請求頭的目的就是把自己的爬蟲偽裝成真實的瀏覽器,因為在某些情況下,服務器很可能會拒絕爬蟲的訪問,甚至說有些網頁都禁止爬蟲訪問。所以加了請求頭可以幫助我們應對反爬蟲技術,把python 爬蟲偽裝成真正的瀏覽器,不讓服務器辨識。