Python3爬蟲——帶參數訪問頁面(以豆瓣爲例)

我們之前在百度圖片下載器、個性簽名設計器等博文中都有用到將參數發送給服務器,然後返回我們需要的結果,但是兩者不同的是,圖片下載器我們使用了非常簡單粗暴的拼接方法,但是個性簽名設計器則使用了發送參數請求的方式,兩者看起來肯定是帶參數訪問來的高端和正規,那我們今天就來講解一下,如何帶參數訪問頁面;

首先我們先打開豆瓣官網:https://www.douban.com/,然後調出Network;

我們來隨便搜索一步電影,看看會有什麼變化:

我們看見,已經把我不是藥神這部電影的搜索結果顯示出來了,Network中也顯示接收了很多數據,我們拉到最上面,這一條就是我們發送訪問請求的數據,我們點開看看有些什麼東西:

請求地址:我們大概可以猜出來,就是豆瓣的搜索地址加上請求內容(我們後面再參數那邊詳細看)
請求方式:GET請求


中間的請求頭什麼的,我們先不管,直接看最下面的,這個就是我們請求的參數,我們對應上面的請求地址,看見“?”後面貌似就是兩個參數的值(對於%E6...,就是URL對於中文的轉碼,這個不清楚的,可以看Python爬蟲(三)——百度圖片下載器)那麼這個q就是用來接收我們輸入的關鍵字的;

現在我們需要的信息都已經知道了,上手代碼來看看:

import requests

params = {    # 用來保存我們需要傳參的數據
    'q': '葉問'
}

header = {    # 保存我們的頭信息,下面的就是我們的用戶表示,一般將這個修改掉就好了,不然默認是機器人
              # 有些網頁是有反爬蟲的機制,看見是機器人就會禁止訪問
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

url = 'https://www.douban.com/search'    # 注意,這個地址就是我們剛纔分析的請求地址,?之前就好
result = requests.get(url,headers=header,params=params)    # 之前我們就是給url直接訪問的,headers用來接收頭信息
                                                           # params就是請求參數
result.encoding = result.raise_for_status()    # 設置編碼格式
html = result.text    # 返回網頁源碼
print(html)

ok,到這裏我們已經完成了,帶參數訪問頁面,並獲取源碼的步驟,有些細心的同學可能發現,我們之前在做個性簽名設計器的時候,裏面也有傳參,但是傳參是是data,那爲什麼這裏是params呢?
我們先來回一下,之前藝術簽名設計網站的結構:

我們發現之前的網站請求方式是POST請求,下面傳參就是data,那麼我們暫且這麼記憶,get請求傳參就是使用params,post請求就是使用data,如果不記得,看下傳參那邊是什麼就好:

我們可以看一下requests的get()方法,它是怎麼定義的:

我們通過方法原型可以看見,get()方法它的傳參屬性就是params,它是一個可選參數,可以接收:字典、元組列表或要在請求查詢字符串中發送的字節,我們在上面就是以字典的形式傳參的;

我們再來看一下post()方法的定義:

通過方法原型我們可以看見,兩者是有區別的,這裏接收數據傳參的是data或者json,data 也是可選項,可以接收:字典、元組列表、字節或類似文件的對象,用於在Request的正文中發送;json接收的就是JSON數據發送到Request的主體中;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章