如何通过网络抓取将表格数据从网站写入 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? 你指的是表格提取吗?如果是这样,您可以在创建 Dataframedf = pd.DataFrame(table_data[1:],columns=table_data[0])
到 df = pd.DataFrame(table_data[1:])
时忽略该列
更新了答案,在 pandas 中导出时可以使用 header=False以上是关于如何通过网络抓取将表格数据从网站写入 CSV的主要内容,如果未能解决你的问题,请参考以下文章
使用 python 和 Beautifulsoup4 从抓取数据中写入和保存 CSV 文件