01网络请求-requests库

安装和文档地址

直接使用pip可以非常方便的安装
pip install requests
中文文档:http://docs.python-requests.org/zh_CN/latest/index.html
github地址:https://github.com/requests/requests

发送get请求

  1. 最简单的发送get请求
import requests
response = requests.get('https://www.baidu.com/')
  1. respnse.text和response.content的区别
    • response.content:这个是直接从网络上抓取的数据,没有经过任何的解码,所以是bytes类型,其实在硬盘上和网络上的字符串都是bytes类型
    • response.text:这个是requests,将response.content进行解码的字符串,解码需要指定一个编码方式,requests对根据自己的猜测来判断解码的方式,所以有时候会产生乱码,这个时候就应该使用response.content.decode('utf-8')来进行手动解码
import requests

response = requests.get('https://www.baidu.com/')
# 这个返回的是Unicode格式的数据类型,也就是字符串,
# 但是使用这个有弊端,中文乱码,还不能自己指定打印出来的字符类型
print(type(response.text))
print(response.text)
# 这个返回的是字节流数据,也就是bytes类型,使用这个打印出来的
# 中文依然是乱码,但是这个可以进行解码,decode('utf-8')
print(type(response.content))
print(response.content.decode('utf-8'))
# 这是一些常用的方法
print(response.url) # 查看完整的url地址
print(response.encoding) # 查看响应头部的字符编码
print(response.status_code) # 查看响应码
  • text打印出来的.png
  • [图片上传失败...(image-2cf12e-1523456588525)]
  1. 添加headers和查询参数
    • 如果想添加 headers,可以传入headers参数来增加请求头中的headers信息
    • 如果要将参数放在url中传递,可以利用 params 参数
import requests
kw = {
    'wd':'山丘'
}

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()
resp = requests.get('http://www.baidu.com/s',params=kw,headers=headers)

# 这里写入的时候需要注意编码格式
with open('baidu.html','w',encoding='utf-8') as fp:
    # 写入的格式一般就是这样
    fp.write(resp.content.decode('utf-8'))
print(resp.url)

看到打印的url.png

发送post请求

  1. 最基本的POST请求可以使用post方法
response = requests.post("http://www.baidu.com/",data=data)
  1. 传入data数据
    • 这时候就不要再使用urlencode进行编码了,直接传入一个字典进去就可以了
#encoding: utf-8
import requests

url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false&isSchoolJob=0'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36',
    'Referer':'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
}

data = {
    'first':'true',
    'pn':3,
    'kd':'python'
}

resp = requests.post(url=url,data=data,headers=headers)
# 如果是json数据,直接可以调用json方法,返回的字典
print(resp.json())

获取到返回的json数据.png

使用代理

使用requests添加代理也非常简单,只要在请求的方法中(比如get或者post)传递proxies参数就可以了

#encoding: utf-8
import requests
url = 'https://httpbin.org/ip'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}

proxy = {
    'http':'117.28.144.33:21879'
}

resp = requests.get(url,headers=headers,proxies=proxy)
print(resp.text)

cookie

如果在一个响应中包含了cookie,那么可以利用cookies属性拿到这个返回的cookie

#encdoing: utf-8
import requests

resp = requests.get('https://www.baidu.com')
# 获取cookie信息
# print(resp.cookies)
# 以字典的形式获取cookie信息
print(resp.cookies.get_dict())

session

之前使用urllib库,是可以使用opener发送多个请求,多个请求之间是可以共享cookie的,
如果使用requests也要达到共享cookie的目的,那么这个时候就可以使用session对象

#encdoing: utf-8
import requests

url = 'http://www.renren.com/PLogin.do'
data = {'email':'15837503603','password':'python'}

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}

# 登陆,这个session中已经存了cookie信息,以后用session访问
session = requests.session()
session.post(url=url,headers=headers,data=data)

# 访问你想访问的个人主页
url2 = 'http://www.renren.com/880151247/profile'
resp = session.get(url=url2,headers=headers)
print(resp.content.decode('utf-8'))

处理不信任的SSL证书

对于那些已经被信任的SSL整数的网站,比如https://www.baidu.com/,那么使用requests直接就可以正常的返回响应

resp = requests.get('http://www.12306.cn/mormhweb/',verify=False)
print(resp.content.decode('utf-8'))
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容