検索

ホームページ  >  に質問  >  本文

div が存在しない場合は BeautifulSoup を使用してデータを抽出します

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

リーリー

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

P粉818306280P粉818306280330日前485

全員に返信(1)返信します

  • P粉463291248

    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/男'}

    返事
    0
  • キャンセル返事