鱼C论坛

 找回密码
 立即注册
查看: 9642|回复: 43

[技术交流] requests模块(一)

[复制链接]
发表于 2021-6-24 18:47:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wcq15759797758 于 2021-6-24 20:14 编辑

一. requests的使用  
  1. import requests    # 导入网络请求模块requests

  2. # 发送GET网络请求  (带params参数 发请求)   如不带参数就把 params=data 删除
  3. data = {'wd': '美女'}  #  百度搜索带有的参数
  4. response = requests.get('https://www.baidu.com/s?',params=data)   #GET 与POST的请求参数分别是params和data  不要参数填写错误
  5. print('响应状态码为:',response.status_code)  # 打印状态码
  6. print('请求的网络地址为:',response.url)          # 打印请求url
  7. print('头部信息为:',response.headers)      # 打印头部信息
  8. print('cookie信息为:',response.cookies)      # 打印cookie信息

  9. # 发送网络请求(进行编码)  进行编程中文才不会乱码
  10. response.encoding='utf-8'    # 对响应结果进行utf-8编码
  11. print(response.text)         # 以文本形式打印网页源码

  12. #发送百度图片链接 打印二进制数据 并生成图片
  13. response_img = requests.get('https://www.baidu.com/img/flexible/logo/pc/result.png')
  14. #print(response_img.content)                # 打印二进制数据
  15. with open('百度logo.png','wb')as f:   # 通过open函数将二进制数据写入本地文件
  16.     f.write(response_img.content)          # 写入
复制代码


二. requests的使用  (发送POST)
  1. import requests    # 导入网络请求模块requests
  2. import json        # 导入json模块

  3. # 字典类型的表单参数    注意:POST请求中data参数的数据的格式也可以是列表、元组或是JSON  实例如下
  4. #data字典形式
  5. data = {'1': '能力是有限的,而努力是无限的。','2':'星光不问赶路人,时光不负有心人。',}

  6. #data元组形式
  7. #data = (('1','能力是有限的,而努力是无限的。'),('2','星光不问赶路人,时光不负有心人'))

  8. #data列表形式
  9. #data = [('1','能力是有限的,而努力是无限的。'),('2','星光不问赶路人,时光不负有心人')]

  10. #请求头 UA设置
  11. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3870.400 QQBrowser/10.8.4405.400'}
  12. # 发送网络请求
  13. response = requests.post('http://httpbin.org/post',data=data,headers=headers)
  14. response_dict = json.loads(response.text)      # 将响应数据转换为字典类型
  15. print(response_dict)                             # 打印转换后的响应数据
复制代码


三.使用cookies 发起网络请求
  1. import requests  # 导入网络请求模块
  2. from lxml import etree  # 导入lxml模块
  3. #使用cookies 发起网络请求
  4. cookies = 'll="118205"; bid=VXEqP8os6CI; __utmz=30149280.1624499543.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); dbcl2="240485353:xkFCkBPvm00"; __gads=ID=939927e29325b086:T=1624499934:S=ALNI_MYGkDFzwid5_oXRDxzrT8Dqp65Hgg; push_noty_num=0; push_doumail_num=0; __utmv=30149280.24048; ck=Wvqu; __utmc=30149280; _pk_ses.100001.8cb4=*; ap_v=0,6.0; __utma=30149280.1504183362.1624499543.1624499543.1624513318.2; __utmt=1; _pk_id.100001.8cb4=3254b4dad66c2826.1624499542.2.1624513320.1624500856.; __utmb=30149280.4.10.1624513318'
  5. headers = {'Host': 'www.douban.com',
  6.            'Referer': 'https://www.baidu.com/',
  7.            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
  8.                          'AppleWebKit/537.36 (KHTML, like Gecko) '
  9.                          'Chrome/72.0.3626.121 Safari/537.36'}
  10. # 创建RequestsCookieJar对象,用于设置cookies信息
  11. cookies_jar = requests.cookies.RequestsCookieJar()
  12. for cookie in cookies.split(';'):
  13.     key, value = cookie.split('=', 1)
  14.     cookies_jar.set(key, value)  # 将cookies保存RequestsCookieJar当中
  15. # 发送网络请求
  16. response = requests.get('https://www.douban.com/',headers=headers, cookies=cookies_jar)
  17. if response.status_code == 200:  # 请求成功时
  18.     html = etree.HTML(response.text)  # 解析html代码
  19.     # 获取用户名  #这里用了xpath
  20.     name = html.xpath('//*[@id="db-global-nav"]/div/div[1]/ul/li[2]/a/span[1]/text()')
  21.     print(name[0])  # 打印用户名
复制代码

四.使用Session回话请求
  1. # 使用Session回话请求
  2. import requests        # 导入requests模块
  3. s = requests.Session()  # 创建会话对象
  4. data={'LoginForm[username]': 'asd112233', 'LoginForm[password]': 'asd445566'}  # 创建用户名、密码的表单数据
  5. # 发送登录请求
  6. response =s.post('https://www.xbiquge.la/login.php?jumpurl=https://www.xbiquge.la/',data=data)
  7. response2=s.get('https://www.xbiquge.la/modules/article/bookcase.php')   # 发送登录后页面请求 (我的书架)
  8. print('登录信息:',response.text)                # 打印登录信息
  9. print('登录后页面信息如下:\n',response2.text)    # 打印登录后的页面信息
复制代码


五.访问网页是弹出的登录验证
  1. import requests          # 导入requests模块
  2. from requests.auth import HTTPBasicAuth  # 导入HTTPBasicAuth类
  3. #访问网页的时候 跳出的登录界面
  4. # 定义请求地址
  5. url = 'http://sck.rjkflm.com:666/spider/auth/'
  6. ah = HTTPBasicAuth('admin','admin')      # 创建HTTPBasicAuth对象,参数为用户名与密码
  7. response = requests.get(url=url,auth=ah) # 发送网络请求
  8. if response.status_code==200:            # 如果请求成功
  9.     print(response.text)                 # 打印验证后的HTML代码
复制代码


六.网络超时与异常
  1. import requests  # 导入网络请求模块
  2. # 导入requests.exceptions模块中的三种异常类
  3. from requests.exceptions import ReadTimeout,HTTPError,RequestException
  4. # 循环发送请求50次
  5. for a in range(0, 50):
  6.     try:    # 捕获异常
  7.         # 设置超时为0.1秒
  8.         response = requests.get('https://www.baidu.com/', timeout=0.1)
  9.         print(response.status_code)                                        # 打印状态码
  10.     except ReadTimeout:                                                     # 超时异常
  11.         print('timeout')
  12.     except HTTPError:                                                       # HTTP异常
  13.         print('httperror')
  14.     except RequestException:                                               # 请求异常
  15.         print('reqerror')
复制代码


七.使用requests上传文件
  1. import requests                   # 导入网络请求模块
  2. bd = open('百度logo.png','rb')     # 读取指定文件
  3. file = {'file':bd}                 # 定义需要上传的图片文件
  4. #设置UA
  5. headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3870.400 QQBrowser/10.8.4405.400'}
  6. # 发送上传文件的网络请求
  7. response = requests.post('http://httpbin.org/post',files = file,headers=headers)
  8. print(response.text)     #能看到传上去的图片转换为了Base64的编码形式          # 打印响应结果
复制代码


后续附上requests(二)介绍 代理IP UA浏览器伪装     requests(三)介绍高级网络模块请求  

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
nizitao + 5 + 5 + 3

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 19:06:41 | 显示全部楼层

回帖奖励 +1 鱼币

sofa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-24 19:28:36 | 显示全部楼层

回帖奖励 +1 鱼币

不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 10:17:11 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-25 10:30:29 | 显示全部楼层

回帖奖励 +1 鱼币

学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 10:56:36 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 11:10:39 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 11:44:01 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-25 13:31:28 | 显示全部楼层

回帖奖励 +1 鱼币

参考一下谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 06:23:14 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-26 09:42:59 | 显示全部楼层

回帖奖励 +1 鱼币

学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 09:59:57 | 显示全部楼层

回帖奖励 +1 鱼币

感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-26 13:42:16 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 15:17:30 | 显示全部楼层

回帖奖励 +1 鱼币

感谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-26 15:42:05 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-27 00:06:35 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-2 11:50:20 | 显示全部楼层

回帖奖励 +1 鱼币

厉害!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-3 16:03:20 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-3 16:15:11 | 显示全部楼层

回帖奖励 +1 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-3 16:17:54 | 显示全部楼层

回帖奖励 +1 鱼币

yyds
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-25 07:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表