1. 程式人生 > 實用技巧 >請求庫之requests庫

請求庫之requests庫

一 介紹

#介紹:使用requests可以模擬瀏覽器的請求,比起之前用到的urllib,requests模組的api更加便捷(本質就是封裝了urllib3)

#注意:requests庫傳送請求將網頁內容下載下來以後,並不會執行js程式碼,這需要我們自己分析目標站點然後發起新的request請求

#安裝:pip3 install requests

#各種請求方式:常用的就是requests.get()和requests.post()
>>> import requests
>>> r = requests.get('https://api.github.com/events
') >>> r = requests.post('http://httpbin.org/post', data = {'key':'value'}) >>> r = requests.put('http://httpbin.org/put', data = {'key':'value'}) >>> r = requests.delete('http://httpbin.org/delete') >>> r = requests.head('http://httpbin.org/get') >>> r = requests.options('
http://httpbin.org/get') #建議在正式學習requests前,先熟悉下HTTP協議 http://www.cnblogs.com/linhaifeng/p/6266327.html

二 基於GET請求

1、基本請求

import requests
response=requests.get('http://dig.chouti.com/')
print(response.text)

2、帶引數的GET請求->params

請求地址中攜帶資料(兩種方式,推薦第二種)

方式一:

import requests

header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
', } res=requests.get('https://www.baidu.com/s?wd=美女',headers=header) print(res.text)

方法二:通過params引數

import requests

header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36',
}

res=requests.get('https://www.baidu.com/s',headers=header,params={'wd':'美女'})
print(res.url)  # https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
print(res.text)

如果就想把搜尋的引數放在url中,最好用urlencode進行一下編碼再進行拼接,如下:

#如果查詢關鍵詞是中文或者有其他特殊符號,則不得不進行url編碼
import requests
from urllib.parse import urlencode,unquote  # url的編碼和解碼
wd='egon老師'    # egon%E8%80%81%E5%B8%88
encode_res=urlencode({'k':wd},encoding='utf-8')
keyword=encode_res.split('=')[1]
print(keyword)

# 然後拼接成url
url='https://www.baidu.com/s?wd=%s&pn=1' %keyword

response=requests.get(url,
                      headers={
                        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
                      })
print(response.url)
print(response.text)