介绍:使用requests可以模拟浏览器请求,requests库发送请求将网页内容下载下来后,并不会执行js代码,需要我们自己分析目标站点然后发起新的request请求
一.安装requests库
[Python] 纯文本查看 复制代码
1
|
pip3 install requests
|
各种请求方式:常用requests.get()和requests.post()
[Python] 纯文本查看 复制代码
1
2
3
|
import requests
r = requests.get( 'https://api.github.com/events' )
r1 = requests.post( 'http://httpbin.org/post' ,data = { 'key' : 'value' })
|
二.基于GET请求
基本参数 :method,url , params , data , json , headers , cookies
其它参数 :files , auth , proxies...
1、基于GET请求(无参数)
[Python] 纯文本查看 复制代码
1
2
3
4
5
|
import requests
response = requests.get( 'http://dig.chouti.com/' )
print (response)
print (response.text)
print (response.url)
|
2、带参数的GET请求-->params
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
#请求头内将自己伪装成浏览器,否则百度不会正常返回页面内容
import requests
#在headers请求头中将自己伪装成浏览器,否则百度不会正常返回页面内容;
#将参数直接写到请求url的后面,只能用于英文和数字,中文或者其它特殊字符必须使用params参数带值过去;
response = requests.get( 'https://www.baidu.com/s?wd=python&pn=1' ,
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' , })
print (response.text)
#如果出现关键词是中文或者其它特殊字符,即通过params带参数
wd = 'alck老师'
pn = 1
response_2 = requests.get( 'https://www.baidu.com/s' , params = { 'wd' :wd, 'pn' :pn },
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36' , })
print (response_2.text)
print (response_2.url)
|
二.基于POST请求
1.介绍#GET请求:
HTTP默认的请求方法就是GET,特点如下:
没有请求体 ;
数据必须在1K之内;
GET请求数据会暴露在浏览器的地址栏中;#GET请求常用的操作:
在浏览器的地址栏中直接给出URL,那么一定就是GET请求;
点击页面上的超链接也一定是GET请求;
提交表单时,表单默认使用GET请求,但可以设置为POST;
#POST请求
数据不会出现在地址栏中;
数据的大小没有上限;
有请求体;
请求体中如果存在中文,会使用URL编码;
requests.post()用法与requests.get()完全一致,特殊的是requests.post()有一个data参数,用来存放请求体数据。
2.发送post请求
[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
|
import requests
import json
#1、基本POST实例
url = 'https://api.github.com/some/endpoint'
payload = { 'key1' : 'value1' , 'key2' : 'value2' }
ret = requests.post(url = url,data = payload )
print (ret.text)
|
三.其他的请求方式
[Python] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
|
requests.get(url, params = None , * * kwargs)
requests.post(url, data = None , json = None , * * kwargs)
requests.put(url, data = None , * * kwargs)
requests.head(url, * * kwargs)
requests.delete(url, * * kwargs)
requests.patch(url, data = None , * * kwargs)
requests.options(url, * * kwargs)
# 以上方法均是在此方法的基础上构建
requests.request(method, url, * * kwargs)
|