python——requests模块

news2024/11/19 13:30:30

        requests不是python的内置库,需要手动安装:

pip install requests

一. 一个类型和六个属性

        1.1 类型

        requests访问url后返回的对象类型为requests.models.Response类型。

        1.2 属性

        下面是requests.models.Response类型对象的方法。

  • text:以字符串的形式返回网站源码
  • encoding:访问或定制编码方式
  • url:获取请求的url
  • content:响应字节类型,返回二进制的网站内容。
  • status_code:响应的状态码
  • headers:响应的头信息

二. get请求

 使用requests.get(url, params, kwargs)方法:

        url:请求资源路径

        params:参数

        kwargs:字典。

        对比urllib,当有参数时,我们需要先进行请求对象的定制,在进行访问。而requests不需要进行请求对象的定制,可以将参数直接传入,并且requests的参数不需要urlencode进行编码,请求资源路径中参数前的'?'可以加,也可以不加。

三. post请求

         使用requests.post(url, data, json, args)方法:

        url:请求资源路径

        data:参数

        args:字典。

 四.代理

        由于get和post的第三个参数是一个字典。我们可以创建代理变量,然后将代理变量传入使用。

五.cookie登录古诗文网 

查看登录时的请求参数,有三个参数(__VIEWSTATE,__VIEWSTATEGENERATOR和code)是未知的,需要获取。

  •  获取__VIEWSTATE和__VIEWSTATEGENERATOR

        __VIEWSTATE和__VIEWSTATEGENERATOR存在于网页源代码中,我们需要先获取源代码。解析出这两个参数。使用bs5库的BeautifulSoup来进行解析

  • 获取code验证码

        code验证码在下图链接中,我们需要访问该链接并获取资源。我们会得到一张包含验证码的图片。在通过input函数来获取验证码。

 注意点:

        在下载资源时,我们不能使用urllib.request的urlretrieve函数来访问。原因是当访问获取到验证码之后,再去访问登录连接时,访问了两次,导致验证码刷新,获取的验证码失效了。这里我们就需要使用requests.session。

requests.session介绍:

        s = requests.session() 会实例化会话一个会话对象。

        作用:

  • 会话对象让你能跨请求保持这些参数。他也会在同一个Session实例发出的所有请求之间保持cookie
  • 会话对象具有主要的requests API的所有方法。你可以当成Request去使用。

遇到的问题:

        当我使用session来请求网站时,一直报验证码错误。后面通过查出来,原因是:session在访问后会保存cookie,在header中不需要加cookie了。 

#/usr/bin/python
#-*-coding:utf-8-*-

import requests

session = requests.Session()

url = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
header = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    #'Accept-Encoding':'gzip, deflate, br',
    #'Cookie':'BIDUPSID=12A8FA6BD40E7BE30E844BCBACFF23AC; PSTM=1685503581; BAIDUID=F9BB5F4CEC7D6C4F12B75BEDA133E123:FG=1; BD_UPN=12314753; MCITY=-289%3A; BDUSS=2VDak14ZWdGQVpaMzJKTFhkcnV6Um1IeW51QmwyaUdwc0o2b3lHekFGb2d-dk5rSVFBQUFBJCQAAAAAAAAAAAEAAADqHDzIdGltZcG9xqy~1bDXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBxzGQgccxkT; BDUSS_BFESS=2VDak14ZWdGQVpaMzJKTFhkcnV6Um1IeW51QmwyaUdwc0o2b3lHekFGb2d-dk5rSVFBQUFBJCQAAAAAAAAAAAEAAADqHDzIdGltZcG9xqy~1bDXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBxzGQgccxkT; H_WISE_SIDS=234020_110085_259301_265864_266759_266777_268592_268634_259642_269390_269552_203519_269831_269904_270184_270532_270662_270969_271037_271171_271178_269730_267659_271319_271470_269610_270102_270875_269777_271673_268416_256151_8000073_8000118_8000129_8000139_8000162_8000174_8000179_8000186_8000189_8000191_8000196_8000204; H_WISE_SIDS_BFESS=234020_110085_259301_265864_266759_266777_268592_268634_259642_269390_269552_203519_269831_269904_270184_270532_270662_270969_271037_271171_271178_269730_267659_271319_271470_269610_270102_270875_269777_271673_268416_256151_8000073_8000118_8000129_8000139_8000162_8000174_8000179_8000186_8000189_8000191_8000196_8000204; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BDSFRCVID=exAOJeC62i1lporfpFYR2QBJEtn-wpTTH6aojIHQ7Y89EBl12yeKEG0PIx8g0KuMn57JogKK0eOTHk_F_2uxOjjg8UtVJeC6EG0Ptf8g0f5; H_BDCLCKID_SF=JnIqVCt5tKt3hD_RKb5o2bcH-UIsJnvlB2Q-5KL-2CjSqb74bl3DqtrX0t5Z0R3XH6vj-UbdJJjojlTS0jJZe5FkLxkDJJc-W2TxoUJYMInJhhvGXtIhjUIebPRiJPQ9QgbWMhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0M5DK0hC-le5-MjjoMMhoWK6kOHD7yWCvVahvcOR5Jj6KBqtcWQljhQPDLtRrI5qcN34P-SPTP3MA--t4ODf-O-tciKej7BIJGWx3Bsq0x0h3te-bQyPQaaPogJIOMahkM5l7xObv3QlPK5JkgMx6MqpQJQeQ-5KQN3KJmfbL9bT3tjjT3jH-Otj08JR3fL-08atn0qn7I5bJHK4QH-UIsybLjB2Q-5KL-0-cRqJQ4bR3AefvX0t5Z0x3r0G633MbdJJjoSPcsMR5JyRFrQqtthxrUK2TxoUJ85DnJhhvDXqopWfPebPRiJPQ9QgbWMhQ7tt5W8ncFbT7l5hKpbt-q0x-jLTnhVn0M5DK0MKt4j6Aaej5MKUbHJK6e2I600Tr2a-t3qRQoXU6qLT5X04-ehxtq5jRtQft-LloksJcg0J5b3h0njxQy0bQTLnbK5bcFMDbGsbosMUonDh8s2a7MJUntBRrT0l5O5hvvhb5O3M7OBUKmDloOW-TB5bbPLUQF5l8-sq0x0bOte-bQ2a_EtTLqfR4foKtQtC_5q-ov2bu_-P6Mbq7CWMT-0bFHBCjs-n7Ke4JDWqKK0fDpQqOXeRbjQNn7_JjO2qT1VD3Xe5rpL47LDlr-BMQxtNRAXInjtpvh8JuGjU6obUPUDMo9LUvWX2cdot5yBbc8eIna5h'
}
#获取网页源代码,来获取参数
req = session.get(url=url, headers=header)
print("first get cookie", session.cookies)
req.encoding = "utf-8"
content = req.text

from bs4 import BeautifulSoup
soup = BeautifulSoup(content, 'lxml')
#获取__VIEWSTATE,放回是一个列表
viewstate = soup.select('#__VIEWSTATE')[0].attrs.get('value')
#获取__VIEWSTATEGENERATOR
viewstategenerator = soup.select('#__VIEWSTATEGENERATOR')[0].attrs.get('value')

code_addrs = soup.select('#imgCode')[0].attrs.get('src')
#print(code_addrs)
code_url = 'https://so.gushiwen.cn' + code_addrs
#print(code_url)
#获取验证码
#使用urllib下载资源
#这里会有一个问题,这里urllib请求了一次得到验证码,下面使用requests又请求了一次,验证码刷新了
#需要使用requests的session来实现
#import urllib.request
#urllib.request.urlretrieve(code_url, 'code.jpg')

code_req = session.get(url = code_url, headers=header)
print("first get cookie", session.cookies)
#注意要使用二进制数据,因为我们要使用的图片的下载
code_content = code_req.content

#wb是将二进制数据写入文件
with open("code.jpg", 'wb') as codefp:
    codefp.write(code_content)

code = input("请输入验证码:")
print(code)
denglu_url = "https://so.gushiwen.cn/user/login.aspx?from=http://so.gushiwen.cn/user/collect.aspx"
data = {
    '__VIEWSTATE': viewstate,
    '__VIEWSTATEGENERATOR':viewstategenerator,
    'from':'https://so.gushiwen.cn/user/collect.aspx',
    'email': '账号',
    'pwd': '密码',
    'code': code,
    'denglu': '登录',
}

#denglu_req = requests.post(url=url, data=data, headers=header)
denglu_req = session.post(url=denglu_url, data=data, headers=header)
print("first get cookie", session.cookies)
print("first get cookie", denglu_req.cookies)
#denglu_req.encoding = 'utf-8'
denglu_content = denglu_req.text
#print(denglu_req.text)

fp = open("gushi.html", 'w', encoding='UTF-8')

fp.write(denglu_content)
fp.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1141761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Javascript】json

目录 什么是json? 书写格式 json 序列化和反序列化 序列化 反序列化 什么是json? JSON(JavaScript Object Notation)是⼀种轻量级的数据交换格式,它基于JavaScript的⼀个⼦集,易于⼈的编写和阅读,也易于机器解析…

OSG开发笔记(二十九):OSG加载模型文件、加载3DMax三维型文件Demo

​ 若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/134064988 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 红胖子(红模…

班主任必get,超实用的成绩发布方式

分享给老师们一个超级实用的教程,看看如何使用各种代码和Excel实现学生自主查询成绩的功能吧!不用再繁琐的手动操作,让学生和家长自己就能查到成绩! 成绩查询系统是什么? 成绩查询系统是一种方便学生查询考试成绩的应…

Android 和 iOS APP 测试的那些区别

目前市面上主流的移动操作系统就是 Android 和 iOS 两种,移动端测试本身就跟 Web 应用测试有自己的专项测试,比如安装、卸载、升级、消息推送、网络类型测试、弱网测试、中断测试、兼容性测试等都是区别于 Web 应用需要关注的测试领域。 那么&#xff0…

办公用品经营配送小程序商城的作用是什么

对办公人员来说,办公设备是不可缺少的,对办公用品经营商家来说,市场生意很高很多,但想要获取却也不容易,线下方式难以拓展,线上无平台,入驻第三方也有诸多限制与不足,私域是商家们增…

关键词搜索1688商品数据接口(标题|主图|SKU|价格|优惠价|掌柜昵称|店铺链接|店铺所在地)

1688商品列表接口是一个用于获取1688网站上商品列表信息的接口。通过该接口,您可以获取到1688网站上不同类别的商品列表,包括商品的名称、价格、图片等信息。 要使用1688商品列表接口,您需要按照以下步骤进行操作: 登录1688网站…

Linux 磁盘挂载2(文件系统格式化、磁盘挂载、VFS虚拟化文件系统)

目录 Linux文件系统 文件系统类型 Linux如何保存文件 VFS虚拟文件系统 文件格式化命令 mkfs 格式化文件系统 磁盘挂载命令 mount 临时挂载命令 umount 卸载文件系统 vim /etc/fstab 永久挂载 Linux文件系统 Linux 磁盘挂载1(硬盘分区)_linux磁…

高效遮挡!一键隐藏Logo标志,让您的内容更自由!

亲爱的用户,您是否曾经因为在营销、宣传、推广等领域使用的图片或视频中,存在不合适的Logo标志而感到烦恼?现在,我们向您推荐一款高效的遮挡工具,让您轻松隐藏Logo标志,让您的内容更自由! 第一…

面试题:为什么HashMap 使用的时候指定容量?

文章目录 前言正文为什么要指定容量? 前言 其实可以看到我写了这么久的博客,很少去写hashMap的东西。 为什么?因为这个东西感觉是java面试必备的,我感觉大家都看到腻了,所以一直没怎么去写hashMap相关的。 本篇内容&…

eclispe项目中静态文件出现错误解决方法

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 很多时间…

C++项目——云备份-⑧-客户端各模块实现

文章目录 专栏导读1.客户端数据管理模块实现2.客户端文件检测模块实现3.客户端文件备份模块设计4.客户端文件备份模块实现 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿…

创建一个具有背景轮播和3D卡片翻转效果的个人名片网页

目录 项目展示 图片展示 前言 项目目标 项目目标 步骤 3:CSS 样式 步骤 4:JavaScript 动画 项目源码 知识点介绍 (大佬请绕道) HTML 结构的构建 2. CSS 样式的设计 3. JavaScript 动画的实现 4. 背景图轮播的逻辑 5…

java智慧工地云平台源码 人工智能AI+多系统集成+智能预警平台

智慧工地云平台源码 人工智能AI多系统集成智能预警平台 智慧工地企业级监管平台融入AIoT、移动互联网和物联网等领先技术,再结合工地“人、机、料、法、环”五大要素,劳务实名制管理、环境监测管理、安全施工管理、质量及能耗管理等智慧化应用&#xff0…

21.8 Python 使用BeautifulSoup库

BeautifulSoup库用于从HTML或XML文件中提取数据。它可以自动将复杂的HTML文档转换为树形结构,并提供简单的方法来搜索文档中的节点,使得我们可以轻松地遍历和修改HTML文档的内容。广泛用于Web爬虫和数据抽取应用程序中。 读者如果需要使用这个库&#x…

Leetcode---368周赛

题目列表 2908. 元素和最小的山形三元组 I 2909. 元素和最小的山形三元组 II 2910. 合法分组的最少组数 2911. 得到 K 个半回文串的最少修改次数 一、元素和最小的山形三元组I 没什么好说的,不会其他方法就直接暴力,时间复杂度O(n^3),代…

SpringCloudGateway 入门

目录 POM 依赖一、内容网关的作用Spring-Cloud-Gateway的核心概念 二、基于Ribbon的负载均衡三、核心概念详细3.1 断言 Predicate3.2 过滤器3.2.1 内置过滤器3.2.2 自定义过滤器构造器(原理)资源结构Route / Predicate 的构造器构造器的增强器整体协同关…

人大金仓(Kingbase)部署

点击上方蓝字关注我 1. 介质下载 下载地址:https://www.kingbase.com.cn/rjcxxz/index.htm 选择安装包及授权文件:根据对应的操作系统类型选择安装包 2. 部署环境配置 2.1 部署环境: 8C 16G KylinV10SP3系统 2.2 修改操作系统内核参数 sy…

什么是pmp证书,pmp证书有什么用,pmp项目管理证书的认证考试时间是什么时候啊?

PMP是项目管理证书,目标是项目经理。 英文全称是Project Management Professional,中文全称叫做项目管理专业人士资格认证。 它是由美国项目管理协会(PMI)在全球范围内推出的针对项目经理的资格认证体系,严格评估项目…

贪心算法总结(未完结)

贪心的定义(摘自百度百科) 贪心算法(greedy algorithm,又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的…

LeetCode刷题:26. 删除有序数组中的重复项

文章目录 写在前面⭐️26. 删除有序数组中的重复项⭐️🔐题目描述💡解题思路🔑代码 写在前面 本题的题解代码是用C语言编写的。 📒博客主页:2023Fighting的博客主页 🎉欢迎关注🔎点赞&#x1f…