cari

Rumah  >  Soal Jawab  >  teks badan

Tukar. html log dengan jadual bersarang ke. fail csv

<p>Saya cuba menukar satu. html fail yang mengandungi log dalam bentuk jadual, yang mempunyai jadual bersarang. Saya menukarnya kepada . fail csv. Terdapat laporan ralat dalam salah satu lajur dan sebagai jadual baharu dalam lajur itu. Saya mahu menukar keseluruhan jadual kepada teks biasa. Cuba menggunakan beautifulsoup dalam python untuk mencapai ini tetapi masih belum berjaya. Data dalam jadual bersarang tersebar merentas semua lajur jadual induk, dan bukannya tetap dalam lajur asal. Adakah terdapat apa-apa yang boleh saya lakukan?<br /><br />Menggunakan python dengan perpustakaan beautifulsoup tidak memberikan output yang diingini</p><p><br /></ p>
P粉190883225P粉190883225514 hari yang lalu530

membalas semua(1)saya akan balas

  • P粉662614213

    P粉6626142132023-08-02 10:42:21

    Menukar fail HTML dengan jadual bersarang kepada CSV sambil mengekalkan struktur boleh menjadi agak sukar. BeautifulSoup ialah perpustakaan yang hebat untuk menghuraikan HTML, tetapi ia mungkin memerlukan operasi tambahan untuk mengendalikan jadual bersarang dengan betul.

    Untuk mendapatkan output yang diingini, BeautifulSoup boleh digunakan dengan beberapa kod Python tersuai untuk menghuraikan HTML, mengekstrak data dan menyusunnya dengan betul ke dalam format CSV. Berikut ialah kaedah langkah demi langkah untuk membantu anda mencapai matlamat ini:

    Gunakan BeautifulSoup untuk menghuraikan fail HTML.


    1. Cari jadual induk dan ekstrak pengepalanya.
    2. Cari semua baris dalam jadual induk.
    3. Untuk setiap baris, cari jadual bersarang dalam lajur yang berkaitan (jika wujud).
    4. Ekstrak data daripada jadual bersarang dan tambahkannya pada sel yang sepadan dalam jadual induk.

    Berikut ialah coretan kod Python untuk membantu anda bermula:

    from bs4 import BeautifulSoup
    import csv
    
    def extract_nested_table_data(table_cell):
        # Helper function to extract the data from a nested table cell
        nested_table = table_cell.find('table')
        if not nested_table:
            return ''
    
        # Process the nested table and extract its data as plain text
        nested_rows = nested_table.find_all('tr')
        nested_data = []
        for row in nested_rows:
            nested_cells = row.find_all(['td', 'th'])
            nested_data.append([cell.get_text(strip=True) for cell in nested_cells])
        
        # Convert nested_data to a formatted plain text representation
        nested_text = '\n'.join(','.join(row) for row in nested_data)
        return nested_text
    
    def convert_html_to_csv(html_filename, csv_filename):
        with open(html_filename, 'r', encoding='utf-8') as html_file:
            soup = BeautifulSoup(html_file, 'html.parser')
    
            parent_table = soup.find('table')
            headers = [header.get_text(strip=True) for header in parent_table.find_all('th')]
    
            with open(csv_filename, 'w', newline='', encoding='utf-8') as csv_file:
                csv_writer = csv.writer(csv_file)
                csv_writer.writerow(headers)
    
                rows = parent_table.find_all('tr')
                for row in rows[1:]:  # Skipping the header row
                    cells = row.find_all(['td', 'th'])
                    row_data = [cell.get_text(strip=True) for cell in cells]
    
                    # Extract data from nested table (if it exists) and append to the row
                    for idx, cell in enumerate(cells):
                        nested_data = extract_nested_table_data(cell)
                        row_data[idx] += nested_data
    
                    csv_writer.writerow(row_data)
    
    if __name__ == '__main__':
        html_filename = 'input.html'
        csv_filename = 'output.csv'
        convert_html_to_csv(html_filename, csv_filename)

    Kod ini menganggap bahawa data jadual bersarang anda dipisahkan koma Jika tidak, anda mungkin perlu melaraskan pemisah dengan sewajarnya, pertimbangkan pembatas lain jika jadual bersarang anda mengandungi koma.

    Ingat bahawa pengendalian struktur HTML yang kompleks mungkin memerlukan lebih lanjut. pelarasan pada kod ini, bergantung pada spesifik data anda, ini sepatutnya menjadi titik permulaan yang baik untuk menangani tugas.


    balas
    0
  • Batalbalas