requests用法基礎-進階

本節內容

  1. 模塊的安裝css

    -----------------------基礎用法---------------------html

  2. GET用法、POST用法python

    -----------------------進階用法--------------------web

  3. cookie處理、代理ip、session json

一 模塊安裝:

1). 安裝requests包仍是很方便的,電腦中有python環境,打開cmd,輸入pip install requests下載;瀏覽器

若是有同窗使用pycharm的話,選擇file-->setting-->Project interpreter-->右邊"+"號點擊--->輸入模塊名---->選中下載。安全

2). requests的做用、特色、以及使用流程服務器

  • 做用:模擬用戶使用瀏覽器上網cookie

  • 特色:簡單、高效session

  • 使用流程:

    1. 指定url;

    2. 發起請求(requests.get/post);

    3. 獲取響應信息/數據(response);

    4. 持久化存儲(保存csv、MySQL、txt等);

 

二基本用法:

1). get(url,headers,params):各用法

獲取搜狗首頁的頁面數據:

 1 import requests #引包
 2 #1指定url
 3 url = 'https://www.sogou.com/'
 4 #2.發起請求
 5 response = requests.get(url=url)
 6 #3獲取響應數據
 7 page_text = response.text #text返回的是字符串類型的數據
 8 #持久化存儲
 9 with open('./sogou.html','w',encoding='utf-8') as fp:
10     fp.write(page_text)
11 print('over!')
12 #也能夠直接打印
13 print(page_text)   #這就是服務器給咱們返回的數據信息(response)

 

2). headers的使用:

若是沒有假裝UA,你發送的請求中的UA是一個爬蟲標識;並且如今大部分網站都是有UA檢測(反爬機制),因此咱們須要UA假裝(反反爬策略)騙過網站,

  • 咱們能夠打開網站,F12,隨意點擊一個信息,找到Headers這個標籤,翻到最下面有一個 User-Agent ,在python中咱們須要對他進行構造。

  • python中有一個隨機生成UserAgent的包----fake-useragent,它的安裝方法也很簡單,pip install fake-useragent。

3). 下面實現上面headers的構造:

1 #第一種方法
2 #user-agent放在字典中,不光useragent,後面咱們講到的cookie等都須要放入
3 import requests
4 headers== {
5     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
6 }
7 #調用方法,get(傳入了兩個參數,url,headers)
8 response = requests.get("http://www.baidu.com",headers=headers)

使用fake-useragent獲取並構造UA:

import requests
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
url = '待爬網頁的url'
resp = requests.get(url, headers=headers)

 

4). params 參數

咱們使用一個例子來融合headers與params,仍是以搜狗爲例:

 1 import requests
 2 wd = input('enter a word:')
 3 url = 'https://www.sogou.com/web'
 4 #參數的封裝
 5 param = {
 6     'query':wd
 7 }
 8 #UA假裝
 9 headers = {
10     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
11 }
12 response = requests.get(url=url,params=param,headers=headers)
13 #手動修改響應數據的編碼
14 response.encoding = 'utf-8'
15 page_text = response.text
16 fileName = wd + '.html'
17 with open(fileName,'w',encoding='utf-8') as fp:
18     fp.write(page_text)
19 print(fileName,'爬取成功!!!')

上面的例子能夠看出,若是須要將參數放在url中傳遞,能夠利用 params 參數 。

5)post用法:咱們訪問網站的時候,有時候是須要提交數據給網頁的,若是提交的數據中沒有網站所認證的信息,那麼網站將會返回給你錯誤或者其餘信息。

最基本的POST請求:

1 response = requests.post("http://www.baidu.com/",data=data)

傳入數據的以後就不須要使用urlencode進行編碼了。

實例(實現百度翻譯):

 1 import requests
 2 #破解百度翻譯
 3 url = 'https://fanyi.baidu.com/sug'
 4 word = input('enter a English word:')
 5 #請求參數的封裝
 6 data = {
 7     'kw':word
 8 }
 9 #UA假裝
10 headers = {
11     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
12 }
13 response = requests.post(url=url,data=data,headers=headers)
14 #text:字符串  json():對象
15 json_dict = response.json()
16 17 print(json_dict)#返回是一個json列表,進行數據提取便可

 

如今大部分的網站都是經過動態加載(Ajax)該技術加載信息,有的網站防止數據的泄露或者用戶隱私安全,會設置js、css字體加密等等;後面有機會在介紹。再舉個例子以下,爬取肯德基餐廳位置:

 1 #爬取任意城市對應的肯德基餐廳的位置信息
 2 #動態加載的數據
 3 city = input('enter a cityName:')
 4 url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
 5 #數據封裝
 6 data = {
 7     "cname": "",
 8     "pid": "",
 9     "keyword": city,
10     "pageIndex": "2",
11     "pageSize": "10",
12 }
13 #UA假裝
14 headers = {
15     'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'
16 }
17 #返回的數據
18 response = requests.post(url=url,headers=headers,data=data).text
19 print(response)#打印

有人會問怎麼看咱們須要傳輸什麼參數呢?咱們打開網站幣乎網站,點擊登陸,打開開發者模式(谷歌瀏覽器),輸入帳號密碼後,在標籤爲Network中的Headers中最下面的Request payload中。如圖所示:

咱們可使用模擬參數進行登陸(大部分網站進行加密);在後面會講解谷歌的一些操做以及加密的數據的解決方式,這裏暫時略過。

三 cookie、代理ip、session

(1). cookie的介紹:

學習以前簡單的瞭解一下cookie是作什麼的,有什麼做用;咱們在百度上搜索一下,會出來不少的關於cookie的介紹,我截取了一段:

Cookie的做用:

cookie的用途是存儲用戶在特定網站上的密碼和 ID。另外,也用於存儲起始頁的首選項。在提供我的化查看的網站上,將利用計算機硬驅上的少許空間來儲存這些首選項。這樣,每次登陸該網站時,瀏覽器將檢查是否有cookie。若是有,瀏覽器將此 cookie 隨網頁的請求一塊兒發送給服務器 ,有一個基礎的概念就行;

接下來咱們獲取一下cookies:

 1 import requests
 2 #網址
 3 url ="http:///www.baidu。com」
 4 #返回響應
 5 response = requests.get(url)
 6 #獲取請求網頁的cookies
 7 #打印出cookies
 8 print(response.cookies)##RequestCookieJar類型,咱們使用items方法將其轉換成元組,遍歷美每一個cookie的的名稱跟值。
 9 #第一種方法
10 for k,v in response.cookies.items():
11     print(k +"="+ v)
12 #第二種方法
13 print(resp.cookies.get_dict())

咱們也可使用cookie來維持咱們在網站上的登陸狀態,以我學校的網站爲例(能夠自行找登陸網站),首先登陸網站,打開F12,進入network面板----headers中,將cookies複製下來放進咱們構造的headers中;

 1 import requests
 2  3 headers = {
 4     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36",
 5     "Cookie": "JSESSIONID=加密字符串"
 6 }
 7  8 r = requests.get(url,headers=headers)
 9 10 print(r.text)

運行之後就會發現返回來的信息中有登錄後的結果,證實登陸成功。

(2)session(會話維持):

多個請求之間是能夠共享cookie的。那麼若是使用requests,也要達到共享cookie的目的,那麼可使用requests庫給咱們提供的session對象。注意,這裏的session不是web開發中的那個session,這個地方只是一個會話的對象而已。

上面的解釋可能有些抽象,打個比方你在爬取一個網站,第一次請求利用post登陸了網站,第二次想獲取登陸成功後的信息,你再使用get方法請求我的信息頁面,你發現請求不到,實際上上面的兩個操做是打開了兩個瀏覽器,是徹底不一樣的。

因此有需求就有解決方案,這樣咱們就引出session對象,它能夠維持同一個會話,也就是打開一個瀏覽器的新標籤頁;這樣就防止咱們登錄後獲取不到信息的煩惱。

以登陸人人網爲例,使用requests來實現。示例代碼以下:

 1 import requests
 2  3 url = "http://www.renren.com/PLogin.do"
 4 data = {"email":"email",'password':"password"}
 5 headers = {
 6     'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36"
 7 }
 8  9 # 登陸
10 session = requests.session()
11 #提交參數信息
12 session.post(url,data=data,headers=headers)
13 14 # 訪問大鵬我的中心
15 resp = session.get('http://www.renren.com/880151247/profile')
16 17 print(resp.text)

注:session一般用於模擬登陸成功後進行下一步操做。

(3).代理ip的使用

代理ip的使用場合:對於某些網站,咱們測試的時候請求幾回能夠獲取網頁內容,可是當大規模且頻繁的請求,網站可能出現驗證碼、或者跳到登陸認證頁面,更有的會直接封掉客戶端IP,致使必定的時間內沒法訪問。

爲了防止這種狀況的發生,咱們須要進行代理操做,代理其實就是代理服務器,代理網站的話自行百度一下。

代理的詳情:https://www.kuaidaili.com/doc/wiki/

代理分爲下面幾種類型:

-匿名度:
   - 透明:對方服務器能夠知道你使用了代理,而且也知道你的真實IP
   - 匿名:對方服務器能夠知道你使用了代理,但不知道你的真實IP
   - 高匿:對方服務器不知道你使用了代理,更不知道你的真實IP。
- 類型:
   - http:該類型的代理ip只能夠發起http協議頭對應的請求
   - https:該類型的代理ip只能夠發起https協議頭對應的請求

設置代理的方式:

1 import requests
2 proxies = {
3     "http":"ip:端口"4     "https":"ip:端口"5 }
6 requests.get(url,proxies=proxies)

總結:

requests的get和post方法經常使用的參數:

  • url

  • headers

  • data/params

  • proxies

你可能看會了,可是你敲了嗎?

初學者

分享及成功

相關文章
相關標籤/搜索