python - 使用请求进行 Web 抓取 - Python
问题描述
我正在尝试使用 Resquest 库获取数据,但我做错了。我的解释,手动搜索:
网址 - https://www9.sabesp.com.br/agenciavirtual/pages/template/siteexterno.iface?idFuncao=18
我填写“Informe o RGI”字段,然后单击 Prosseguir 按钮(如 Next):
我得到这个结果:
在编码之前,我进行了手动搜索并检查了表单数据:
然后我用这段代码试了一下:
import requests
data = { "frmhome:rgi1": "0963489410"}
url = "https://www9.sabesp.com.br/agenciavirtual/block/send-receive-updates"
res = requests.post(url, data=data)
print(res.text)
我的输出是:
<session-expired/>
我究竟做错了什么?
非常感谢。
解决方案
当您使用浏览器访问该站点时,会创建一个会话并将其存储在您机器上的 cookie 中。当您发出 POST 请求时,cookie 会随请求一起发送。您收到session-expired
错误消息,因为您没有随请求发送任何会话数据。
试试这个代码。它首先请求入口页面并存储 cookie。然后 cookie 与 POST 请求一起发送。
import requests
session = requests.Session() # start session
# get entry page with cookies
response = session.get('https://www9.sabesp.com.br/agenciavirtual/pages/home/paginainicial.iface', timeout=30)
cks = session.cookies # save cookies with Session data
print(session.cookies.get_dict())
data = { "frmhome:rgi1": "0963489410"}
url = "https://www9.sabesp.com.br/agenciavirtual/block/send-receive-updates"
res = requests.post(url, data=data, cookies=cks) # send cookies with request
print(res.text)
推荐阅读
- ruby-on-rails - 运行 rspec 时失败/错误,没有将字符串隐式转换为哈希
- java - 如果可以处理 100 个连接,如何测试分布式 P2P 游戏?
- c# - 如何遍历格式错误的 CSV 文件
- android - 包含 platform.js 后,Nativescript 应用程序无法构建
- oracle - 我选择 int 作为列数据类型,但数字已保存
- ruby-on-rails - PSQL 数据库传输和错误
- c - GCC:优化内存加载和存储
- python - 在哪里放置 break 语句或如何更改我的代码?
- apache-spark - 如何在 Arch 中使用 Apache Spark?
- python-3.x - Python 日志记录将处理程序设置为不同级别