首页 > 解决方案 > 如何为 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-3.xpandasweb-scraping

解决方案


您遇到的问题与类型有关。是的,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")

推荐阅读