PYTHON 七月 31, 2019

6.request请求的简单使用

文章字数 7k 阅读约需 6 mins. 阅读次数 1000000

  • 概述:
    requests框架基于urllib封装的一个请求框架,、几乎包含urllib所有的请求功能,在其基础上进行了深度的拓展

  • 安装requests

    pip install requests

  • requests的响应类
    res = requests.get(url)   #res即为resquests的响应类
    属性 说明
    encoding requests从响应的header自动猜测出响应页面编码方式,该值默认为ISO-8859-1
    apparent_encoding requests从响应页面猜测响应页面编码方式
    url 响应的url
    status_code 响应的http状态码
    cookies 响应的cookies
    elapsed 发送请求到收到响应消耗的时间
    headers 响应的headers
    history 请求历史
    headers 响应的headers
    content 页面源码,二进制的页面源码
    text 也是页面源码,unicode,requests自动解码,返回str源码
  • 请求方法:
    • requests.get(url, params=None, **kwargs) params={‘’:’’}
    • requests.post(url, data=None, json=None, **kwargs) data = {‘’:’’}
    • requests.head(url, **kwargs)
    • requests.put(url, data=None, **kwargs)
    • requests.patch(url, data=None, **kwargs)
    • requests.delete(url, **kwargs)
    • requests.request(method, url, **kwargs)

以上就是requests全部的访问方法,并且全部都返回Request对象

  • 请求参数**kwargs
参数 说明
params 自动构建url,get请求时使用
data 提交表单,post请求时使用
headers 请求headers
cookies 请求cookies
timeout 超时时间
proxies ip代理
json 发送json
file 发送文件(Multipart-Encoded)
allow_redirects
auth
verify
stream
cert
  • 实例1:
import requests

# requests本身就是一个请求对象
res = requests.get("http://www.baidu.com/")
print(res) #<Response [200]>

url = "https://www.baidu.com/s?"
# 加请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}
# 创建参数
data = {
    "wd":"日本美女"
}

# 用requests对象发起请求
res = requests.get(url=url,headers=headers,params=data)
# res是响应对象,包含响应头和响应体
# print(res.text) # 用字符串的格式提取出响应体
print(res.content)
print(res.headers)

# requests也不能解析js
import requests
from lxml import etree

# 登录
# post请求   账户密码   两个token值  验证码
# 用登录页把验证码和token值获取出来
login_url = "https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx?type=m"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
    'Referer': 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx?type=m'
           }
# 访问登录页
# login_html = requests.get(url=login_url,headers=headers) # requests无法保存cookie
s = requests.Session() # requests框架中会话信息用Session对象来保存
login_html = s.get(url=login_url,headers=headers)

# 解析出来验证码和token
html_tree = etree.HTML(login_html.text)
# 提取两个token值
a = html_tree.xpath("//input[@id='__VIEWSTATE']/@value")[0]
b = html_tree.xpath("//input[@id='__VIEWSTATEGENERATOR']/@value")[0]
print(a,b)
# 提取验证码
img_url = "https://so.gushiwen.org" + html_tree.xpath("//img[@id='imgCode']/@src")[0]
img = s.get(img_url)

with open("./yanzhengma.png","wb") as fp:
    fp.write(img.content)
# 验证码处理、人工智能识别、人工手动输入
code = input("请输入验证码:")
print(code)

# 登录
post_url = "https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx%3ftype%3dm "

data = {
    '__VIEWSTATE':    a,
    '__VIEWSTATEGENERATOR':b,
    'from':'http://so.gushiwen.org/user/collect.aspx?type=m',
    'email':'fanjianbo666@163.com',
    'pwd':'123456',
    'code':    code,
    'denglu':'登录'
}
res = s.post(url=post_url,headers=headers,data=data)
print(res.text)
import requests
from bs4 import BeautifulSoup
# 设置代理服务器列表
proxies = {"https":"122.4.29.15:27074"}


s = requests.Session()

login_page = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&logsubmit=yes"
# 加请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}

# 反爬:用户名和密码  设置隐藏域  post接口中某些参数是动态生成
# 请求登录页
# r = s.get(url=login_page,headers=headers,proxies=proxies)
r = s.get(url=login_page,headers=headers)

soup = BeautifulSoup(r.text,'lxml')
# 动态post接口
login_params = soup.select("form.cl")[0].attrs.get("action")
print(login_params)
# 解决formhash的动态生成
formhash = soup.select("[name=formhash]")[0].attrs.get("value")
print(formhash)
# 构造请求体
data = {
    'formhash':    formhash,
    'referer':'http://bbs.chinaunix.net/',
    'username':'MrFan666',
    'password':'f12345678',
    'loginsubmit':'true',
    'return_type':''
}
# 登录接口
login_url = "http://bbs.chinaunix.net/" + login_params
# 发起post请求登录
res = s.post(url=login_url,headers=headers,data=data)
print(res.text)

上一篇:
下一篇:
0%