一、python操作网络,也就是打开一个网站,或者请求一个http接口,使用urllib模块。

urllib模块是一个标准模块,直接import urllib即可,在python3里面只有urllib模块,在python2里面有urllib模块和urllib2模块。

     import json
from urllib import request
from urllib import parse
pay_url = 'http://szz.xxxx.cn/pay'
balance_url = 'http://szz.xxxx.cn/get_balance'
balance_data = {'user_id':1}
new_balance_data = parse.urlencode(balance_data)#把请求参数变成xx=11这样的
balance_req = request.urlopen(balance_url+'?'+new_balance_data)#发送get请求
print(balance_req.read().decode())
#获取接口返回的结果,返回的结果是bytes类型的,需要使用decode方法解码,变成一个字符串
pay_data ={"user_id":1,"price":""}
new_pay_data = parse.urlencode(pay_data)#把请求参数变成xx=11这样的
pay_req = request.urlopen(pay_url,new_pay_data.encode())#发送post请求,传入参数的话
#参数必须是bytes类型,所以需要先encode一下,变成bytes类型
print(pay_req.read().decode())#获取接口返回的结果,返回的结果是bytes类型的
#需要使用decode方法解码,变成一个字符串
res = json.loads(pay_req.read().decode())
#因为返回的是一个json传,想把json串转成字典的话,久使用json模块转成一个字典
print(res)

二、上面是使用python自带的urllib模块去请求一个网站,或者接口,但是urllib模块太麻烦了,传参数的话,都得是bytes类型,返回数据也是bytes类型,还得解码,想直接把返回结果拿出来使用的话,还得用json,发get请求和post请求,也不通,使用比较麻烦,还有一个比较方便的模块,比urllib模块方便很多,就是requests模块,它是基于python自带的urllib模块封装的,用来发送http请求和获取返回的结果,操作很简单,它使用比较方便,需要安装,pip install requests即可,下面是requests模块的实例

import requests
pay_url = 'https://www.cnblogs.com/feng0815/pay'
balance_url = 'https://www.cnblogs.com/feng0815/get_balance'
balance_data = {'user_id':1}
pay_data ={"user_id":1,"price":""}
balance_res = requests.get(balance_url,balance_data).text #发送get请求,并获取返回结果,text获取的结果是一个字符串
print(balance_res)
balance_res = requests.get(balance_url,balance_data).json() #发送get请求,并获取返回结果,json()方法获取的结果直接是一个字典
print(balance_res)
pay_res = requests.post(pay_url,pay_data).json()#调用post方法
print(pay_res)
#====入参是json串的====
url = 'http://api.xxxxx.cn/getmoney'
data = {"userid":1}
res = requests.post(url,json=data).json()#指定入参json
print(res)
#======添加cookie=====
url = 'http://api.xxxxxx.cn/setmoney2'
data = {'userid':1,"money":9999}
cookie = {'token':"token12345"}
res = requests.post(url,data,cookies=cookie).json()#使用cookies参数指定cookie
print(res)
#=====添加权限验证=====
url = 'http://api.xxxxxx.cn/setmoney'
data = {'userid':1,"money":91999}
res = requests.post(url,data,auth=('admin','')).json() #使用auth参数指定权限验证的账号密码,auth传的是一个元组
print(res)
#======发送文件=====
url = 'http://api.xxx.cn/uploadfile'
res = requests.post(url,files={'file':open('api11.py')}).json() #指定files参数,传文件,是一个文件对象
print(res)
#=====发送header======
url = 'http://api.xxx.cn/getuser2'
data = {'userid':1}
header = {'Content-Type':"application/json"}
res = requests.post(url,headers=header).json() #指定headers参数,添加headers
print(res)

beautifulsoup

import requests

req = requests.get('http://www.xxx.cn',data={'username':'xxx'},cookies={'k':'v'},
headers={'User-Agent':'Chrome'},verify=False,timeout=3) #发送get请求,data是请求数据,
# cookies是要发送的cookies,headers是请求头信息,verify=False是https请求的时候要加上,要不然会报错。
#timeout参数是超时时间,超过几秒钟的话,就不再去请求它了,会返回timeout异常
#这些都可以不写,如果有的话,可以加上
req2 = requests.post('http://www.xxx.cn',data={'username':'xxx'},cookies={'k':'v'},
headers={'User-Agent':'Chrome'},files={'file':open('a.txt')},timeout=3) #发送post请求,data是请求数据,
# cookies是要发送的cookies,headers是请求头信息,files是发送的文件,verify=False是https请求的时候要加上,
# 要不然会报错,timeout参数是超时时间,超过几秒钟的话,就不再去请求它了,会返回timeout异常
#这些都可以不写,如果有的话,可以加上
req3 = requests.put('http://www.xxx.cn') #put方式请求
req4 = requests.patch('http://www.xxx.cn')#patch方式请求
req5 = requests.delete('http://www.xxx.cn')#delete方式请求
req6 = requests.options('http://www.xxx.cn')#options方式请求,用法和上面的get、post都一样 print(req.status_code) #获取返回状态码
print(req.content)#获取返回的内容,二进制格式,一般下载图片、视频用这个
print(req.text) #获取返回的内容,字符串格式
print(req.json())#获取返回的内容,json格式,这个必须是返回的是json才可以使用,否则会报错
print(req.headers)#获取响应头
print(req.cookies)#获取返回的cookie
print(req.encoding)#获取返回的字符集

http权限认证

有一些网站,比如说下载东西的时候有http的权限验证,没有验证话就返回401 请求未经授权这种错误的。一般都是需要http权限验证,下面是怎么添加http权限验证。

当然这个http权限认证是http本身的,和你那些登陆请求那些不一样,比如说你要调一个登陆接口,传入的账号密码,和那个不是一回事,要区别开。

举个例子呢就是商场的大门上的锁就是这个http权限验证,这个锁是人家商场的,而你的店铺的锁才是你登陆接口,你输入的账号密码。一般你一打开一个网站直接弹出来一个窗口让你输入账号密码,你都看不到页面,这种就是http权限验证。而那种你打开网站之后,直接就能看到页面,你要登录的时候,输入账号密码然后点登录的,这种的就是正常的登陆请求。这种http权限验证的比较少见。

import requests
from requests.auth import HTTPBasicAuth
#导入HTTPBasicAuth req = requests.post('http://www.cnblogs.com',data={'username':'xxx'},auth=HTTPBasicAuth('username','password'))
#使用的时候加上auth参数,然后使用HTTPBasicAuth,传入账号和密码即可。其他的都是和以前一样用
print(req.status_code) 

http会话保持

什么是会话保持,就是有一些操作需要登录之后才操作的,你得先登录,然后才能做其他的操作。那咱们做的时候怎么做,先发送登陆的请求,获取到登录的cookie信息,(因为登录之后它的身份验证信息都是放在cookie里面的),然后把cookie传给下一个你要请求的url,这样就ok了,看下面代码。

正常的话咱们要

import requests
r1=requests.post('https://www.cnblogs.com/feng0815/login',data={'username':'chenshifeng','password':''})#登陆请求
login_cookies = r1.cookies #获取到登陆请请求返回的cookie
r2 = requests.post('https://www.cnblogs.com/feng0815/create_user',
data={'title':'测试测试','content':'发送文章测试'},
cookies=login_cookies)
#把登陆获取到的cookie,传给发表文章的这个请求,就ok了
print(r2.text)

这么做,requests模块给咱们提供了更简单的方式,就是使用requests.session这个方法,它会自动帮咱们管理cookie,不需要咱们自己再获取到登陆的cookie,传给创建文件的请求,代码如下:

import requests
r=requests.session()
login_req = r.post('https://www.cnblogs.com/feng0815/login',data={'username':'chenshifeng','password':''}) #发送登陆的请求
r1 = r.post('https://www.cnblogs.com/feng0815/create_user',
data={'title':'测试测试','content':'发送文章测试'}) #发送创建文件的请求
print(r1.text)#获取返回的结果

http代理设置

我们在写爬虫的时候,如果都用同一个ip访问多次访问某个网站,经常ip会被封,这样我们就访问不了了,那怎么解决呢,就得用ip代理了,代理的意思就是咱们把请求先发到代理上,然后再由代理帮咱们把请求发送出去,这样最终访问网站的ip就不是咱们自己的ip了。网上代理有很多,大多数收费的代理网站上每天都会有几个免费的代理,我先从https://www.kuaidaili.com/free/inha/ 这个里面找了几个免费的代理,设置代理的代码如下

import requests
#不带账号密码的代理
posix = {
'http':'http://119.187.75.46:9000', #http
'https':'http://112.95.18.133:9000',#https
}
res = requests.get('http://www.xxx.cn',proxies=posix).text
print(res) #带账号密码的代理
posix = {
'http':'http://user:password@127.0.0.1:9000', #http
'https':'http://user:password@127.0.0.1:9000',#https
}
res = requests.get('http://www.cnblogs.com',proxies=posix).text
print(res)

Python网络编程、爬虫之requests模块使用的更多相关文章

  1. python网络编程——SocketServer/Twisted/paramiko模块

    在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...

  2. Python学习(22)python网络编程

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  3. Day07 - Python 网络编程 Socket

    1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...

  4. Python 网络编程相关知识学习

    Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...

  5. python 网络编程 TCP/IP socket UDP

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  6. 28、Python网络编程

    一.基于TCP协议的socket套接字编程 1.套接字工作流程 先从服务器端说起.服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客 ...

  7. Python 网络编程Ⅱ

    客户端 接下来我们写一个简单的客户端实例连接到以上创建http://www.weixiu3721.com/的服务.端口号为 12345. socket.connect(hosname, port )  ...

  8. 孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块

    孤荷凌寒自学python第六十七天初步了解Python爬虫初识requests模块 (完整学习过程屏幕记录视频地址在文末) 从今天起开始正式学习Python的爬虫. 今天已经初步了解了两个主要的模块: ...

  9. Python爬虫练习(requests模块)

    Python爬虫练习(requests模块) 关注公众号"轻松学编程"了解更多. 一.使用正则表达式解析页面和提取数据 1.爬取动态数据(js格式) 爬取http://fund.e ...

  10. 《Python网络编程》学习笔记--使用谷歌地理编码API获取一个JSON文档

    Foundations of Python Network Programing,Third Edition <python网络编程>,本书中的代码可在Github上搜索fopnp下载 本 ...

随机推荐

  1. Jupyter notebook 中常用的快捷键

    1.注释和缩进 注释一行或多行: Ctrl + / 多行同时缩进:Tab 或者 Ctrl + ] 多行取消缩进: Shift + Tab 或者 ctrl + [ 2.编辑和运行 Enter : 转入编 ...

  2. Transformer---BERT模型

    一.BERT介绍 论文地址:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding  BERT ...

  3. Ubuntu 出现access denied by server while mounting

    3516cv500板端nfst调试时如此配置 虚拟机: #vi /etc/exports  添加 /home/"待分享文件路径"   *(rw,sync,no_root_squas ...

  4. 201871010102-常龙龙《面向对象程序设计(java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  5. BZOJ4241:历史研究(回滚莫队)

    题意:给定N个数字,Q次询问,询问这个区间的最大加权众数是多少. 加权众数是指出现次数*数字大小.N,Q<1e5. 思路:不难发现可以N*sqrtN*logN的思路做,但是应该过不了. 这个Ns ...

  6. 06-cmake语法-include

    用来载入CMakeLists.txt文件,也用于载入预定义的cmake模块. include(cmake/OpenCVMinDepVersions.cmake) .cmake 是一个文本,定义了一个模 ...

  7. html2canvas@^1.0.0-rc.1

    这个版本的html2canvas是我在npm找到的,有严重问题,如截图后字体变小,解决方法就是官网找个min.js的版本,放到项目中引用就好 https://html2canvas.hertzen.c ...

  8. restQL 微服务查询语言

    restQL 是一个强大的微服务查询语言,类似sql,支持并行.链式.过滤.同时官方也提供了多种语言的实现 而且还有一个manger 与 graphql 以及Falcor的比较 以下是来自官方的比较说 ...

  9. Redis有哪些数据结构

    String 这应该是应用最广泛的了,简单的 key-value 类型.value 不仅可以是 String,也可以是数字.还可以享受 Redis 的定时持久化(可以选择 RDB 模式或者 AOF 模 ...

  10. of_property_read_string_index(转)

    https://biscuitos.github.io/blog/DTS-of_property_read_string_index/ 源码分析 of_property_read_string_ind ...