Как повторно использовать запросы content.text для pd.read_html()

#python-3.x #pandas #web-scraping

#python-3.x #панды #очистка веб-страниц

Вопрос:

на данный момент я очищаю таблицу следующим образом

 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")
 

Но я хотел бы сохранить файлы по дате, которую я хотел бы удалить со страницы с помощью запросов.
Поэтому я подумал, что могу использовать content.text в функции pd.read_html(), но это не работает:

 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")
 

приводит к

Ошибка типа: объект ‘str’ не вызывается

Нужно ли сначала сохранять content.text()? Моим текущим обходным решением было бы сначала запустить requests.get() и очистить сайт с помощью pd.read_html() во второй раз.

Ответ №1:

Проблема, с которой вы столкнулись, связана с типами. Да, python — это язык утиного ввода, но важно понимать, когда мы можем отправлять строку и где мы должны предоставлять байты. Особенно при работе с операциями ввода-вывода.

В вашем случае вы должны использовать content.content (ответ в виде байтов) вместо content.text() (ответ в виде строки)

Итак, код должен быть похож:

 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")