Python---爬虫常用模块requests(第三方模块)

requests模块的各种请求方式

import requests

requests.get(url, params=None, **kwargs)            # 获取HTML网页的主要方法,对应于HTTP的GET
requests.post(url, data=None, json=None, **kwargs)  # 向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put(url, data=None, **kwargs)              # 向HTML网页提交PUT请求,对应于HTTP的PUT
requests.head(url, **kwargs)                        # 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.delete(url, **kwargs)                      # 向HTML页面提交删除请求,对应于HTTP的DELETE
requests.patch(url, data=None, **kwargs)            # 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.options(url, **kwargs)
requests.request(method, url, **kwargs)             # 以上方法均是在此方法的基础上构建 

r = requests.get("http://www.renren.com", params={'key':'value'})
r = requests.request(method="get", "http://www.renren.com", params={'key':'value'})  # 相当于上一行的get请求
r = requests.post("http://httpbin.org/post", data = {'key':'value'})
r = requests.request(method="post", "http://httpbin.org/post", data = {'key':'value'})  # 相当于上一行的post请求

# requests模块发送请求有data、json、params三种携带参数的方法。
# params在get请求中使用,data、json在post请求中使用。

# params可以接收的参数:可以是字典,可以是字符串,字典字符串都会被自动编码发送到url。可以是字节(必须是ascii编码以内)。
# data  可以接收的参数为:字典,字符串,字节,文件对象,data和json两者的区别在于data的请求体为name=alex&age=18格式而json请求体为‘{'k1': 'v1', 'k2': '水电费'}’(字符串)
# json:将json中对应的数据进行序列化成一个字符串,json.dumps(...)。然后发送到服务器端的body中,并且Content-Type是 {'Content-Type': 'application/json'}

requests模块的各种响应结果

import requests
import urllib

value = {'username': 'admin', 'password': '123'}
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
response = requests.get("http://www.baidu.com", params=value, headers=header)   # get形式提交参数

data = urllib.urlencode(value)
response = requests.get("http://www.baidu.com", data=data, headers=header)      # post形式提交参数

# 查看响应内容,response.text 返回的是Unicode格式的数据。响应内容的字符串形式,即返回的页面内容
print response.text
# 查看响应内容,response.content返回的字节流数据。响应内容的二进制形式
print response.content
# 查看请求的完整url地址
print response.url
# 查看响应头部字符编码,同时也可以设置编码:response.encoding = "utf-8"
print response.encoding
# 查看响应状态码
print response.status_code

# 查看响应头信息,返回的是一个字典对象。
print response.headers
# 查看响应头的具体的某个属性的信息
print response.headers['Content-Type']
# 查看请求头信息,返回的是一个字典对象,不修改的话,默认是python的请求头
print response.request.headers
# 查看响应对应请求的cookie 
print response.request.cookies 
# 查看响应的cookie信息(经过了set-cookie动作),返回的是一个字典对象
print response.cookies
print ';'.join(['='.join(item) for item in response.cookies.items()])  # 打印出具体的cookies信息

# 从内容中分析出的响应内容编码方式(备选编码方式)
print response.apparent_encoding
# 如果状态不是200,则引发异常
try:
    response.raise_for_status()
except:
    print("产生异常")

# 参考:https://blog.csdn.net/qq_36119192/article/details/82951408

requests模块的GET请求

import requests

kw = {"username": "liu", "password": "123"}
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# params 接收一个字典或者字符串的查询参数,字典类型自动转换为url编码,不需要urlencode()
response = requests.get("http://www.baidu.com/s?", params=kw, headers=headers)

# 查看响应内容,response.text 返回的是Unicode格式的数据
print response.text

requests模块的POST请求

import requests

formdata = {
    "i": "l love you",
    "doctype": "json",
    "keyfrom": "fanyi.web",
    }
url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
            "Content-Type": "application/x-www-form-urlencoded",  # 参数是data
            "Content-Type": "application/json"}                   # 参数是json
response = requests.post(url, data=formdata, headers=headers)

print response.text
print response.json() # 如果是json文件可以直接显示

requests模块的基本请求

import requests

##设置请求头
header = {'Host': 'www.baidu.com', 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)', 'Referer': 'http://www.baidu.com/login/'}
values = {'name': 'Tom', 'sex': 'Man', 'age': '26'}  # 设置提交的数据
proxy = {"http": "http://127.0.0.1:8088"}            # 设置代理
requrl = "http://www.baidu.com"                      # 请求的url

# 使用session保持会话请求
session = requests.session()
response = session.get("https://www.baidu.com", params=values, headers=header, timeout=3, proxies=proxy)
response = session.post("https://www.baidu.com", data=values, headers=header, timeout=3, proxies=proxy)
# GET请求
response = requests.get(url=requrl, params=values, headers=header, timeout=3, proxies=proxy)
# POST请求
response = requests.post(url=requrl, data=values, headers=header, timeout=3, proxies=proxy)

Cookies

import requests

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

# 返回CookieJar对象:
cookiejar = response.cookies
print cookiejar      # 结果:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiedict     # 结果:{'BDORZ': '27315'}

# 将字典转为CookieJar:
cookiejar = requests.utils.cookiejar_from_dict(cookiedict, cookiejar=None, overwrite=True)
print cookiejar      # 结果:<RequestsCookieJar[<Cookie BDORZ=27315 for />]>
import requests

session = requests.session()
session.get('http://www.baidu.com')

# 返回CookieJar对象:
cookiejar = session.cookies
print cookiejar      # 结果:<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

# 将CookieJar转为字典:
cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
print cookiedict     # 结果:{'BDORZ': '27315'}

# 将字典转为CookieJar:
cookiejar = requests.utils.cookiejar_from_dict(cookiedict, cookiejar=None, overwrite=True)
print cookiejar      # 结果:<RequestsCookieJar[<Cookie BDORZ=27315 for />]>

# 参考:https://www.cnblogs.com/R4v3n/articles/8964800.html
# 经典:https://www.jianshu.com/p/77993645fba3
# 经典:https://www.cnblogs.com/xiugeng/p/9877265.html

Session

import requests

#爬虫一定要使用代理 防止封IP
proxy = {"HTTP": "162.247.156.88", "HTTPS": "236.21.56.128"}

# 1. 处理 headers
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

# 2. 需要登录的用户名和密码
data = {"email": "qq账号", "password": "qq密码"}

# 3. 创建session对象,可以保存Cookie值
session = requests.session()

# 4. 发送附带用户名和密码的请求,并获取登录后的Cookie值,保存在session里
session.post("http://www.renren.com/PLogin.do", data=data, headers=headers, proxies=proxy)

# 5. session包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面。
response = session.get("http://www.renren.com/972013042/profile")

# 6. 打印响应内容
print response.text

# 参考:https://www.cnblogs.com/lingxia/p/9074620.html

Web客户端验证(auth认证)

import requests
from requests.auth import HTTPBasicAuth

auth = ("admin", "admin")
response = requests.get('http://162.256.54.121:8888/2fa86bd2', auth=auth)

response = requests.get('http://162.256.54.121:8888/2fa86bd2', auth=HTTPBasicAuth("admin", "admin"))

response.encoding = 'gbk'
print response.text

# 如果是Web客户端验证,需要添加 auth = (账户名, 密码)。BasicAuth 的认证方式。
# 认证设置:登陆网站是,弹出一个框,要求你输入用户名密码(与alter很类似),此时是无法获取html的。
# 但本质原理是拼接成请求头发送:r.headers['Authorization'] = _basic_auth_str(self.username, self.password)
# HTTPBasicAuth实际是向浏览器发一个带有Authorization:.................的请求
# 参考:https://www.jianshu.com/p/77993645fba3 与 https://www.cnblogs.com/wlx97e6/p/9950678.html

https://www.cnblogs.com/wlx97e6/p/9950678.html

https://www.cnblogs.com/lowmanisbusy/p/9065359.html

 

https://blog.csdn.net/qq_41804164/article/details/80993323

https://blog.csdn.net/imail2016/article/details/72381989

https://www.cnblogs.com/windyrainy/p/10593806.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章