詳解基於pycharm的requests庫使用教程

requests庫安裝和導入

第一步:cmd打開命令行,使用如下命令安裝requests庫。

pip install requests

由於我的安裝過瞭,所以如下:

在這裡插入圖片描述

如果提示你pip版本需要更新,按照提示的指令輸入即可更新。

第二步:cmd使用如下命令,驗證requests庫安裝完成。

pip list

在這裡插入圖片描述

第三步:在pycharm中,點擊file——settings——project——python interpreter——點擊+號——搜索requests——install package!

在這裡插入圖片描述

第四步:在你寫的.py文件中,使用如下命令導入即可。

import requests

requests庫的一個類型六個屬性

import requests

url = "https://www.baidu.com"
response = requests.get(url=url)

# 一個類型六個屬性

# 類型
print(type(response))

# 設置響應的編碼格式
response.encoding = 'utf-8'

# 以字符串的形式返回網頁的源碼
print(response.text)

# 返回一個url地址
print(response.url)

# 返回的是二進制數據
print(response.content)

# 返回相應的狀態碼
print(response.status_code)

# 返回的響應頭
print(response.headers)

輸出結果如下:

<class 'requests.models.Response'>
<!DOCTYPE html>
<!–STATUS OK–><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=https://ss1.bdstatic.com/5eN1bjq8AAUYm2zgoY3K/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> <img hidefocus=true src=//www.baidu.com/img/bd_logo1.png width=270 height=129> </div> <form id=form name=f action=//www.baidu.com/s class=fm> <input type=hidden name=bdorz_come value=1> <input type=hidden name=ie value=utf-8> <input type=hidden name=f value=8> <input type=hidden name=rsv_bp value=1> <input type=hidden name=rsv_idx value=1> <input type=hidden name=tn value=baidu><span class="bg s_ipt_wr"><input id=kw name=wd class=s_ipt value maxlength=255 autocomplete=off autofocus=autofocus></span><span class="bg s_btn_wr"><input type=submit id=su value=百度一下 class="bg s_btn" autofocus></span> </form> </div> </div> <div id=u1> <a href=http://news.baidu.com name=tj_trnews class=mnav>新聞</a> <a href=https://www.hao123.com name=tj_trhao123 class=mnav>hao123</a> <a href=http://map.baidu.com name=tj_trmap class=mnav>地圖</a> <a href=http://v.baidu.com name=tj_trvideo class=mnav>視頻</a> <a href=http://tieba.baidu.com name=tj_trtieba class=mnav>貼吧</a> <noscript> <a href=http://www.baidu.com/bdorz/login.gif?login&amp;tpl=mn&amp;u=http%3A%2F%2Fwww.baidu.com%2f%3fbdorz_come%3d1 name=tj_login class=lb>登錄</a> </noscript> <script>document.write('<a href="http://www.baidu.com/bdorz/login.gif?login&tpl=mn&u='+ encodeURIComponent(window.location.href+ (window.location.search === "" ? "?" : "&")+ "bdorz_come=1")+ '" name="tj_login" class="lb">登錄</a>');
                </script> <a href=//www.baidu.com/more/ name=tj_briicon class=bri style="display: block;">更多產品</a> </div> </div> </div> <div id=ftCon> <div id=ftConw> <p id=lh> <a href=http://home.baidu.com>關於百度</a> <a href=http://ir.baidu.com>About Baidu</a> </p> <p id=cp>&copy;2017&nbsp;Baidu&nbsp;<a href=http://www.baidu.com/duty/>使用百度前必讀</a>&nbsp; <a href=http://jianyi.baidu.com/ class=cp-feedback>意見反饋</a>&nbsp;京ICP證030173號&nbsp; <img src=//www.baidu.com/img/gs.gif> </p> </div> </div> </div> </body> </html>

在這裡插入圖片描述

post一般是表單請求,如果你直接在百度搜一個東西,那是get請求奧!

requests庫的get請求

首先將代碼寫出來,然後根據代碼給大傢將對應的知識點,算是入門。

import requests

url = "https://www.baidu.com/s?"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}

data = {
    'wd': '北京'
}

# url請求路徑 params參數 kwargs字典
response = requests.get(url=url, params=data, headers=headers)

# 參數使用params傳遞,且參數無需url encode編碼 ,且參數也不需要對象定制,請求資源路徑中的?可加可不加

print(response.text)

在這裡插入圖片描述

第一步:首先來看requests庫的get方法使用及參數含義。

response = requests.get(url=url, params=data, headers=headers)

url表示請求路徑,params表示參數,kwargs表示字典。

參數使用params傳遞,且參數無需url encode編碼 ,且參數也不需要對象定制,請求資源路徑中的?可加可不加。

第二步:下面演示一下,這三個參數怎麼傳遞。

接下來的講解,學過前端的應該都知道怎麼弄吧?

右鍵檢查——選擇如下——然後刷新

這個地方是我們請求的url!

在這裡插入圖片描述

這個地方是我們傳遞的數據params!

可能很多人會找From Data,這個地方應該是PayLoad,註意一下!

在這裡插入圖片描述

這個地方是我們傳遞的字典!

選擇下面的user agent,其中有我們的瀏覽器相關信息。

在這裡插入圖片描述

在上述中,應該註意,由於get的後兩個其實都是用python中的字典的形式存儲的,所以獲取數據後,註意一下格式。

第三步:我們來看看有沒有數據,可以在輸出地方,使用ctrl + f來搜索驗證我們想要的內容在不在。

在這裡插入圖片描述

requests庫的post請求

首先將代碼寫出來,然後根據代碼給大傢將對應的知識點,算是入門。

import requests

url = "https://fanyi.baidu.com/sug"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}

data = {
    'kw': 'eye'
}

# url請求路徑 data請求參數 kwargs字典
response = requests.post(url=url, data=data, headers=headers)

# 參數使用data傳遞,且參數無需url encode編碼 ,且參數也不需要對象定制

print(response.text)

輸出結果:

{"errno":0,"data":[{"k":"eye","v":"n. \u773c\u775b; \u89c6\u529b; \u773c\u72b6\u7269; \u98ce\u7eaa\u6263\u6263\u773c vt. \u5b9a\u775b\u5730\u770b; \u6ce8\u89c6; \u5ba1\u89c6; \u7ec6\u770b"},{"k":"Eye","v":"[\u4eba\u540d] \u827e; [\u5730\u540d] [\u82f1\u56fd] \u827e\u4f0a"},{"k":"EYE","v":"abbr. European Year of the Environment \u6b27\u6d32\u73af\u5883\u5e74; Iwas"},{"k":"eyed","v":"adj. \u6709\u773c\u7684"},{"k":"eyer","v":"n. \u6ce8\u89c6\u7684\u4eba"}]}

第一步:首先來看requests庫的post方法使用及參數含義。

response = requests.post(url=url, data=data, headers=headers)

這裡的參數和get方法還有點不同,我們想看詳細的話可以這樣看,在pycharm中選中方法,即可看到提示。

在這裡插入圖片描述

url表示的是請求路徑,data表示的是請求參數,kwargs表示的是字典。

其實難點在於怎麼找這個url奧!!即哪一個是我們想要的url!!下面以百度翻譯為例!!

在這裡插入圖片描述

我圈起來的這些地方,一定要註意,選中Preserve log!!

就在左邊的Name中找,如果其對應的這個PayLoad中的kw和我們搜索的一致,那就是的啦!!!

第二步,可能返回的數據我們也看不懂,那就轉換成json的格式來看就行啦!!

import requests
import json

url = "https://fanyi.baidu.com/sug"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}

data = {
    'kw': 'eye'
}

# url請求路徑 data請求參數 kwargs字典
response = requests.post(url=url, data=data, headers=headers)

obj = json.loads(response.text, encoding='utf-8')

print(obj)


輸出結果:

{'errno': 0, 'data': [{'k': 'eye', 'v': 'n. 眼睛; 視力; 眼狀物; 風紀扣扣眼 vt. 定睛地看; 註視; 審視; 細看'}, {'k': 'Eye', 'v': '[人名] 艾; [地名] [英國] 艾伊'}, {'k': 'EYE', 'v': 'abbr. European Year of the Environment 歐洲環境年; Iwas'}, {'k': 'eyed', 'v': 'adj. 有眼的'}, {'k': 'eyer', 'v': 'n. 註視的人'}]}

requests庫的代理

代理主要處理的是,我們在模擬瀏覽器給服務器發送請求的時候,我們高速的快速的高頻次的訪問某個網站,那樣的話網站會崩潰的,所以會把我們的ip封掉,那我們怎麼辦呢?換ip地址就好啦!

import requests

url = "https://www.baidu.com/s?"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}

data = {
    'wd': 'ip'
}

response = requests.get(url=url, params=data, headers=headers)

with open('daili.html', 'w', encoding='utf-8') as fp:
    fp.write(response.text)

就會發現寫瞭這個文件!

在這裡插入圖片描述

在這裡插入圖片描述

requests庫的cookie

我們是以古詩文網為例!

我們現在想要實現的功能就是,不用登錄,直接進入內部的頁面。

# 通過登錄進入主頁面

# 通過找登錄接口 我們發現需要的參數很多
"""
__VIEWSTATE: 9Y4yHRQS2k2z739MJJ/8Z0sKfZNltkFId83Z8jCtY3g00xYgg9bsv5oK+KT5DypNl37KWa0IyB+uOwrRPBvTybqGLDdd0chyrWLxhhlHBeAGWL/SLTGYfOh5L1M=
__VIEWSTATEGENERATOR: C93BE1AE
from: http://so.gushiwen.cn/user/collect.aspx
email: 13237153218
pwd: wxm20010428
code: PDBG
denglu: 登錄
"""

# 我們觀察到__VIEWSTATE __VIEWSTATEGENERATOR code是一個可以變化的量

# __VIEWSTATE __VIEWSTATEGENERATOR 看不到的數據一般都是在頁面的源碼中
# 我們觀察到其在頁面源碼中 所以我們需要獲取頁面源碼 然後進行解析就可以獲取瞭
# code是驗證碼


import requests

# 登錄url頁面

url = 'https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
}
response = requests.get(url=url, headers=headers)
# print(response.text)

# 解析頁面源碼 然後獲取__VIEWSTATE __VIEWSTATEGENERATOR

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'lxml')

# 獲取__VIEWSTATE
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')

# 獲取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

# print(viewstate)
# print(viewstategenerator)

# 獲取驗證碼圖片

code = soup.select('#imgCode')[0].attrs.get('src')
# print(code)

code_url = 'https://so.gushiwen.cn' + code

# print(code_url)

# 獲取驗證碼的圖片後 下載到本地 然後觀察驗證碼 觀察之後 然後在控制臺輸入這個驗證碼 就將這個值給code
# 怎麼下載???

# import urllib.request
# 此處和後面的請求不是同一個請求 驗證碼就變瞭
# urllib.request.urlretrieve(url=code_url, filename='code.jpg')
# request裡面有一個方法session() 通過session的返回值就能使請求變成一個對象
session = requests.session()
response_code = session.get(code_url)
# 註意此處使用二進制數據 因為我們要是圖片的下載
content_code = response_code.content

with open('code.jpg', 'wb') as fp:
    fp.write(content_code)

code_name = input('請輸入驗證碼:')

# 點擊登錄

url_post = 'https://so.gushiwen.cn/user/login.aspx?from=http%3a%2f%2fso.gushiwen.cn%2fuser%2fcollect.aspx'

data_post = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR': viewstategenerator,
    'from': 'http://so.gushiwen.cn/user/collect.aspx',
    'email': '13237153218',
    'pwd': 'wxm20010428',
    'code': code_name,
    'denglu': '登錄',
}

response_post = session.post(url=url_post, headers=headers, data=data_post)

with open('gushiwen.html', 'w', encoding='utf-8') as fp:
    fp.write(response_post.text)

首先我們打開這個古詩文網的登錄頁面(假設已經都註冊過瞭),現在我們要輸入正確的賬號,錯誤的密碼,正確的驗證碼,點擊登錄,但是在提示後不要點擊確定,否則頁面會跳轉,然後抓到這個登錄所需要的參數。

在這裡插入圖片描述

觀察參數後,先找到變化的參數,再試圖去獲取變化的參數,而且一般這種看不見的參數,一般就是在源碼中,我們點擊查看源碼,然後ctrl+F搜索看不見的參數,找到其位置。

然後我們模擬瀏覽器給服務器發送請求,獲取網頁源代碼後,使用bs4解析源代碼,然後相應變化的參數後,再發送請求即可!

在這裡插入圖片描述

此處會生成兩個文件,並且code.jpg,在運行的時候如果加載不出來,那就去項目的文件夾中查找。

自動識別驗證碼

超級鷹!下載python開發文檔,並且將.py和一個圖片復制到項目中!

在這裡插入圖片描述

打開後,看一下.py文件,更改用戶名和密碼上去!

在這裡插入圖片描述

根據其中的提示更改這個用戶ID

在這裡插入圖片描述

但是由於我沒有充錢,沒給我返回哈哈哈哈哈!

在這裡插入圖片描述

大傢可以去第三方平臺搞驗證碼識別平臺!!

到此這篇關於詳解基於pycharm的requests庫使用教程的文章就介紹到這瞭,更多相關pycharm requests庫 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: