У вас есть несколько проблем в игре здесь.
Для начала вы, кажется, нажали не тот URL.Во-вторых, вам нужно установить User-Agent в вашем запросе - в противном случае этот сайт вообще не возвращает никаких данных и код состояния 500. В-третьих: на этой странице 14 таблиц.Вам нужно выбрать правильный.
Я предлагаю начать так:
# when I hit the url given by you it redirects to the one below
import requests
from bs4 import BeautifulSoup
# you can set the number of rows to be returned with a max_rows-paramter
url = 'https://report.boonecountymo.org/mrcjava/servlet/SH01_MP.I00290s?max_rows=1000'
# set user-agent
header = {'User-Agent': 'Mozilla Firefox 50.0'}
# collect data
r = requests.get(url, headers=header)
soup = BeautifulSoup(r.text, 'lxml')
# so do some inspection with the dev tools
# the table you need is has these classes
# "collapse data-table shadow responsive"
# use css-selector to grab that one particular table
table = soup.select_one('table.collapse.data-table.shadow.responsive')
table_rows = table.find_all('tr')
# continue extracting data....
Так что первые 3 строки не содержат данных.Интересующие вас данные на самом деле напоминают словари, так как имеют атрибут ('data-sh'), который содержит ключ для содержимого в тд.Это верно для всех тдс, кроме того, который содержит href.Для этого тд атрибут == "".Таким образом, простая логика для извлечения данных будет выглядеть примерно так:
base_url = "https://report.boonecountymo.org/mrcjava/servlet/"
user_list = []
for row in table_rows[3:]:
tds = row.find_all('td')
user_dict = {}
for td in tds:
key = td.get('data-th')
value = td.get_text().strip()
# if key == "", the td contains the href
if key == "":
key = "link"
value = base_url + td.find('a').get('href')
user_dict[key] = value
user_list.append(user_dict)
Это даст список диктов, содержащих все необходимые данные.Экспортировать Dicts легко, используя CSV-модуль или используя панд
Если ваш выбор - это pandas, вам нужно только сделать это:
import pandas as pd
df = pd.DataFrame(user_list)
df.to_excel("outfile.xlsx", encoding="utf-8", index=False)
Надеюсь, что это поможет вам в дальнейшем.