如何通过网络抓取将表格数据从网站写入 CSV

Posted

技术标签:

【中文标题】如何通过网络抓取将表格数据从网站写入 CSV【英文标题】:How to write table data from website to CSV through web scraping 【发布时间】:2019-09-18 16:49:45 【问题描述】:

我是网络抓取的新手,我正在尝试在登录后抓取网站上的表格数据。我希望将第 2 列乘以 10。

目前表格正在写入 csv,但我真正想要的工作是将第二列乘以 10 并写入 csv

我试过的是:

r2=session.post("http://www.example.com")
soup = BeautifulSoup(r2.text, "html.parser")
        csvFile=open('Table.csv','w')
        output = csv.writer(csvFile)
        for table in soup.find_all('table')[5:]:
            for row in table.find_all('tr'):
                col = map(cell_text, row.find_all(re.compile('t[dh]')))
                output.writerow(col)
            output.writerow([])
        csvFile.close()

例如,如果我在网站中有一个包含数据的表格:

Time    Pressure   Mass     Temp

0.00    1.01       21       23.09
1.00    2.0908     21.1      10.07
2.0     2.8666     22.3      13.6
0.555   2.6545     2.4       32.56

The data for writing csv file should be:



0.00    10.1       21       23.09
1.00    20.908     21.1      10.07
2.0     28.666     22.3      13.6
0.555   26.545     2.4       32.56

怎么做?

【问题讨论】:

【参考方案1】:

这取决于元素的放置方式,这里我有解决方案,你可以将它应用到 csv 上。

import pandas as pd
df = pd.read_csv("Table.csv")
df.Pressure = df.Pressure * 10
df.to_csv("Table_Updated.csv",index=False)
df.to_csv("DataExport.csv",index=False,header=False) # Store without header

【讨论】:

.如何直接从html表而不是从csv文件写入? 您可以在将数据框写入csv之前创建数据框,进行后处理并将其写入csv。我在这里添加了样本。 link 我已经更新了我的要求。我不想将标题写入 csv。如何在不写标题的情况下将第二列乘以 10? 你指的是表格提取吗?如果是这样,您可以在创建 Dataframe df = pd.DataFrame(table_data[1:],columns=table_data[0])df = pd.DataFrame(table_data[1:]) 时忽略该列 更新了答案,在 pandas 中导出时可以使用 header=False

以上是关于如何通过网络抓取将表格数据从网站写入 CSV的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 和 Beautifulsoup4 从抓取数据中写入和保存 CSV 文件

使用循环进行 Web 抓取并写入 csv

网页抓取 - Python;写入 CSV

抓取的网站数据未写入 CSV

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据

将从HTML表格抓取的数据写入CSV文件