div が存在しない場合は BeautifulSoup を使用してデータを抽出します
P粉818306280
P粉818306280 2024-02-26 16:22:47
0
1
449

数千の HTML ファイルまたはサイト データからテーブル データを抽出しようとしていますが、テーブルにはこれを簡単にする div がありません。また、美しいスープは初めてです。現在、CSV に変換されたすべての HTML を手動で編集し、データベースに入れてテーブルを作成していますが、むしろ既に持っているものをそのまま取得したいと考えています。

リーリー

div を追加しようとしましたが、あまり成功しませんでした。

P粉818306280
P粉818306280

全員に返信(1)
P粉463291248

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/男'}
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート