python-3.x - 如何为 pd.read_html() 重用请求 content.text
问题描述
现在我像这样刮一张桌子
tab_list = pd.read_html(f"{base_url}{page}.html")
df = tab_list[0]
df.dropna(axis=0, inplace=True)
df.to_csv(f"{folder}/{page}.csv", index=False, sep=";", encoding="iso-8859-1")
但我想按日期保存文件,我想通过请求从页面中抓取这些文件。所以我想我可以在 pd.read_html() 函数中使用 content.text ,但这不起作用:
content = requests.get(f"{base_url}{page}")
tab_list = pd.read_html(content.text())
df = tab_list[0]
df.dropna(axis=0, inplace=True)
df.to_csv(f"{folder}/{page}.csv", index=False, sep=";", encoding="iso-8859-1")
导致
TypeError:“str”对象不可调用
我需要先保存 content.text() 吗?我目前的解决方法是先运行 requests.get() 并第二次使用 pd.read_html() 抓取网站。
解决方案
您遇到的问题与类型有关。是的,python 是鸭子类型语言,但重要的是要了解何时可以发送字符串以及必须在哪里提供字节。尤其是在处理 IO 操作时。
在您的情况下,您应该使用content.content
(response as bytes) 而不是 content.text()
(response as string)
所以,代码应该是这样的:
content = requests.get(f"{base_url}{page}")
tab_list = pd.read_html(content.content)
df = tab_list[0]
df.dropna(axis=0, inplace=True)
df.to_csv(f"{folder}/{page}.csv", index=False, sep=";", encoding="iso-8859-1")
推荐阅读
- laravel - 从 laravel 中的控制器获取 for 循环中 $i 的所有值以显示在视图中
- javascript - Onchange JavascripCode 无法正常工作
- php - 产品列表 - 产品标题正在切割 - Advada 主题,wordpress
- c - 为什么标准 C 库不需要分为头文件和实现文件?
- objective-c - 有没有办法在 NSApplicationMain 之前修改参数?
- ios - 在 iOS 上,是否可以仅为包含应用程序设置 NEPacketTunnelProvider VPN?
- node.js - PM2 命令未在 PowerShell 脚本下运行
- css - 透视在 FireFox 上不起作用
- java - 使用增删词的索引和内容更新原句
- python - python 2相当于带有pandas df的get_dummies