【问题标题】:Parsing multiple HTML files located in one folder into one or multiple CSV using Python使用 Python 将位于一个文件夹中的多个 HTML 文件解析为一个或多个 CSV
【发布时间】:2021-05-01 13:04:18
【问题描述】:

我有这个 Python 代码可以解析来自多个 HTML 文件的数据,然后我需要将它们写入一个单独的 CSV 文件(多个文件没关系)。但问题是只有最后一个 HTML 文件中的数据被保存到 CSV 中,我认为这是由于覆盖,因为它是同一个 CSV 文件,你能帮我解决这个问题吗?

folder = "Folder Path"
for filename in os.listdir(folder):
    if filename.endswith('.html'):
        fname = os.path.join(folder, filename)
        print('Filename: {}'.format(fname))

        with open (fname, 'r') as f:
            soup = BeautifulSoup(f.read(), 'html.parser')
            info = soup.find_all('div' ,class_= 'panel-body')

            dataName = []
            dataPhone = []
            dataAdd = []
            dataCity = []

            for i in info:
                name = i.find('h2')
                address = i.find('p')
                city = i.find('strong')
                phone = i.find('label')
                
                dataName.append(name.string) 
                dataAdd.append(address.string)  
                dataCity.append(city.string)
                dataPhone.append(phone.string)

                print(dataName)
                print(dataPhone)
                print(dataAdd)
                print(dataCity)

                df = pd.DataFrame({"Name and Surname": dataName, "Address": dataAdd, "City": dataCity, "Number": dataPhone})
                df.to_csv('DataText.csv')

【问题讨论】:

    标签: python html csv parsing beautifulsoup


    【解决方案1】:

    由于我现在很忙,所以完全未经测试,但请尝试以下方法。 基本上,在循环之前声明列表,然后在退出循环后写出 CSV。

    dataName = []
    dataPhone = []
    dataAdd = []
    dataCity = []
    
    folder = "Folder Path"
    for filename in os.listdir(folder):
        if filename.endswith('.html'):
            fname = os.path.join(folder, filename)
            print('Filename: {}'.format(fname))
    
            with open (fname, 'r') as f:
                soup = BeautifulSoup(f.read(), 'html.parser')
                info = soup.find_all('div' ,class_= 'panel-body')
    
                for i in info:
                    name = i.find('h2')
                    address = i.find('p')
                    city = i.find('strong')
                    phone = i.find('label')
                    
                    dataName.append(name.string) 
                    dataAdd.append(address.string)  
                    dataCity.append(city.string)
                    dataPhone.append(phone.string)
    
    df = pd.DataFrame({"Name and Surname": dataName, "Address": dataAdd, "City": dataCity, "Number": dataPhone})
    df.to_csv('DataText.csv')
    

    【讨论】:

    • 非常感谢您的快速修复,我可以确认它现在可以工作了 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 2023-01-18
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    相关资源
    最近更新 更多