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

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

     import jsonfrom urllib import requestfrom urllib import parsepay_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":"999"}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":"999"}
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','123456')).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 requestsreq = 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':'123456'})#登陆请求
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':'123456'}) #发送登陆的请求
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)

转载于:https://www.cnblogs.com/feng0815/p/7856794.html

Python网络编程、爬虫之requests模块使用相关推荐

  1. Python网络编程:使用requests.post发送POST请求

    Python网络编程:使用requests.post发送POST请求 在Python中,requests是一个强大的库,它可以用于发送HTTP请求并且处理响应.requests.post()函数是这个 ...

  2. python网络编程爬虫_Python爬虫--网络编程

    Python 网络编程 Python提供两个基本的Socket模块: Socket,提供了标准的BSD Sockets API SocketServer, 提供了服务器中心类,可以简化网络服务器的开发 ...

  3. python网络编程案例_Python 网络编程_python网络编程基础_python高级编程

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

  4. [转载] PYTHON 网络编程

    参考链接: Python | 使用openpyxl在Excel文件中进行三角运算 Socket 编程实战 文章目录 Socket库 0.1. 什么是 Socket? 0.2. socket()函数 0 ...

  5. python requests_Python爬虫之requests模块

    # requests模块 知识点: 掌握 headers参数的使用 掌握 发送带参数的请求 掌握 headers中携带cookie 掌握 cookies参数的使用 掌握 cookieJar的转换方法 ...

  6. python爬虫之requests模块2

    python网络爬虫之requests模块 session处理cookie proxies参数设置请求代理ip 基于线程池的数据爬取 一 获取验证码 步骤: ​ 1 注册云大码 http://www. ...

  7. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

  8. Python爬虫之Requests模块巩固深入案例

    爬虫之Requests模块巩固深入案例 requests实战之网页采集器 requests实战之破解百度翻译 requests实战之豆瓣电影爬取 requests实战之肯德基餐厅位置爬取 reques ...

  9. python网络编程(1):客户端与网络编程简介

    python网络编程(1):客户端与网络编程简介 很多情况下,网络编程就是选择并使用一个已经支持所需网络操作的库的过程. 1.使用pygeocoder实现地址和经纬度的转换 通过pipenv创建虚拟环 ...

  10. Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)

    文章目录 系列目录 原项目地址 第37课:并发编程在爬虫中的应用 单线程版本 多线程版本 异步I/O版本 总结 第38课:抓取网页动态内容 Selenium 介绍 使用Selenium 加载页面 查找 ...

最新文章

  1. python argparse模块_Python argparse模块应用实例解析
  2. android传输注册数据异常,android数据传值再获取的问题
  3. CentOS 7/8 安装 oniguruma 和 oniguruma-devel
  4. 【转】判断五张牌是不是一个顺子
  5. android用户界面-菜单
  6. Unity3D 5.x 简单实例 - 发射炮弹
  7. 从内存管理原理,窥探OS内存管理机制
  8. 照片上的人出来了!云从3D人体重建登顶三项榜单,一张照片就能生成3D形象
  9. matlab阶跃响应_状态空间模型及MATLAB指令计算
  10. Gradle简单使用
  11. HackerRank Shashank and List
  12. 新浪微博开放平台链接耗尽的情况分析
  13. 细思极恐:如果我是股东,我也不会再出钱
  14. 搜狗输入法界面简化设置
  15. 2020-12-04mscomm.ocx注册的问题
  16. 浅析redis雪崩击穿和穿透
  17. 3306端口被占用解决方式
  18. canvas - 基础知识 - 绘制剪纸图形
  19. 身份证识别OCR 应用技术及应用行业
  20. va_list的用法

热门文章

  1. java基础总结06-常用api类-Object和Objects
  2. hibernate 状态间转换及update,saveOrUpdte
  3. 深入学习 Intellij IDEA 调试技巧
  4. php-php异步网络通信引擎-服务发现-消息队列 案例
  5. 10)Thymeleaf 标记选择器语法
  6. 日志模块logging
  7. 通过sql脚本可以从数据库中查到数据,但是通过jdbc却获取不到
  8. CSS选择器 ~ +
  9. hdu1402(大数a*bfft模板)
  10. Not a git repository (or any of the parent directories): .git