84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
数千の HTML ファイルまたはサイト データからテーブル データを抽出しようとしていますが、テーブルにはこれを簡単にする div がありません。また、美しいスープは初めてです。現在、CSV に変換されたすべての HTML を手動で編集し、データベースに入れてテーブルを作成していますが、むしろ既に持っているものをそのまま取得したいと考えています。
div を追加しようとしましたが、あまり成功しませんでした。
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/男'}
BeautifulSoup を使用すると、div の外側のコンテンツを検索できます。
表示している HTML がランナーのようなものを取得したいと仮定すると、次のようなことができます。
印刷結果は次のようになります