1、发送post请求
1.1 哪些地方我们会用到POST请求:
(1)登录注册(post比get安全)
(2)需要传输大文本的时候(POST请求对数据长度没有要求)
爬虫也需要在这两个地方模拟浏览器发送post请求
用法:
response = requests.post("http://www.baidu.com/",data=data,headers=headers)
1.2 post请求传参
post请求一般通过参数data来提交参数;
data是一个字典与get请求中的params类似;
浏览器network中post请求所带的参数,常常有两种格式:一种是最常见的Form Data,这种格式的参数,用字典传参即可;
另一种是比较少见的Request Payload,这种格式的参数直接用引号将其括住,直接传给data即可(字符串传参)
在pycharm中格式化从浏览器中复制过来的data的方法
- ctrl+r打开搜索框
- 上搜索框:(.?): (.)
- 下搜索框:”$1”: “$2”,
- 勾上regest(使用正则匹配)
百度翻译案例用法:
data = {"name": "xiaoming", "page": 1}
response = requests.post("http://www.baidu.com/", data=data)
有反爬,401 ```python import requests
url = “https://fanyi.baidu.com/v2transapi“ headers = { “User-Agent”: “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36” } data = { “from”: “en”, “to”: “zh”, “query”: “resource”, “transtype”: “translang”, “simple_means_flag”: “3”, “sign”: “125214.330287”, “token”: “d980256379a8ce61fd87448efd4e8487”, “domain”: “common” } res = requests.post(url, headers=headers, data=data) print(res.status_code) print(res.text)
<a name="z9fqd"></a>
### 1.3 代理IP
为什么要使用代理ip?<br />1 让服务器以为不是同一个客户端在请求;<br />2 防止我们的真实地址被泄露,防止被追究;
<br />参数:proxies,也是字典形式,**键:请求所用的协议,值是ip及端口号**
用法
```python
proxies = {
"http": "123.7.17.237:8060"
}
注意:可以将相同协议的ip端口号写入列表中组成ip池,然后通过随机选取,放入proxies中(字典键重复时,取后重复的值),并且要检查IP的可用性,检查方式:1.可以使用requests检查;2.在线代理IP质量检查的网站;
案例
import requests
url = "https://www.baidu.com"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"
}
proxies = {
"http": "123.7.17.237:8060"
}
res = requests.get(url, headers=headers, proxies=proxies)
print(res.status_code)
print(res.text)