数千の HTML ファイルまたはサイト データからテーブル データを抽出しようとしていますが、テーブルにはこれを簡単にする div がありません。また、美しいスープは初めてです。現在、CSV に変換されたすべての HTML を手動で編集し、データベースに入れてテーブルを作成していますが、むしろ既に持っているものをそのまま取得したいと考えています。
リーリーdiv を追加しようとしましたが、あまり成功しませんでした。
P粉4632912482024-02-27 00:58:21
BeautifulSoup を使用すると、div の外側のコンテンツを検索できます。
表示している HTML がランナーのようなものを取得したいと仮定すると、次のようなことができます。
bs4 インポート BeautifulSoup から
ファイルパス = 'scrap.html'
open(file_path, 'r',
coding='utf-8') as file: # .html ファイルを開くだけで HTML リクエストからの戻りをシミュレートします
html_content = file.read()
スープ = BeautifulSoup(html_content, 'html.parser')
table =Soup.find('table', {"class": "racetable"}) # 'racetable'クラスのテーブルを探しています
rows_table = table.find_all('tr')[1:] # 最初の行を除くテーブル内のすべての行
列名 = [
rows_table[0].find_all('td') の行の row.get_text()
] # リスト内の各列の名前を取得します
ランナー = []
for row in rows_table[1:]: # 列の名前が含まれる最初の行を除くすべての行で繰り返します
データ = [
row.find_all('td') の要素の elem.get_text().strip()
]
ランナー = {
"場所": データ[列名.index("場所")],
"名前": データ[列名.index("名前")],
"都市": データ[列名.index("都市")],
"bib_no": data[columns_name.index("bib_no")],
"年齢": データ[列名.index("年齢")],
"性別": データ[列名.index("性別")],
"年齢層": データ[列名.index("年齢層")],
"合計時間": データ[列名.index("合計時間")],
"ペース": データ[列名.index("ペース")]
}
プリント(ランナー)
ランナー.追加(ランナー)
印刷結果は次のようになります
{'place': '1', 'name': 'Runner 1', 'city': 'ANYTOWN PA', 'bib_no': '390', 'age': '52', 'gender': 'M', 'age_group': '1:Overall', 'total_time': '18:43.93', 'pace': '6:03/M'} {'place': '2', 'name': 'Runner 2', 'city': 'ANYTOWN PA', 'bib_no': '380', 'age': '33', 'gender': 'M' 、'年齢グループ': '1:19-39'、'合計時間': '19:31.27'、'ペース': '6:18/分'} {'place': '3', 'name': 'Runner 3', 'city': 'ANYTOWN PA', 'bib_no': '389', 'age': '65', 'gender': 'F' 、'年齢グループ': '1:全体'、'合計時間': '45:45.20'、'ペース': '14:46/分'} {'place': '4', 'name': 'Runner 4', 'city': 'ANYTOWN PA', 'bib_no': '381', 'age': '18', 'gender': 'F' 、'年齢グループ': '1: 1-18'、'合計時間': '53:28.84'、'ペース': '17:15/分'} {'place': '5', 'name': 'Runner 5', 'city': 'ANYTOWN PA', 'bib_no': '382', 'age': '41', 'gender': 'F' 、'年齢グループ': '1:40-59'、'合計時間': '53:30.48'、'ペース': '17:16/分'} {'place': '6', 'name': 'Runner 6', 'city': 'ANYTOWN PA', 'bib_no': '384', 'age': '14', 'gender': 'M' 、'年齢グループ': '1: 1-18'、'合計時間': '57:38.66'、'ペース': '18:36/分'} {'place': '7', 'name': 'Runner 7', 'city': 'ANYTOWN PA', 'bib_no': '385', 'age': '72', 'gender': 'F' 、'年齢グループ': '1:60-99'、'合計時間': '57:40.11'、'ペース': '18:36/男'}