【问题标题】:I want to extract data from a website and then I went it to display on my webpage我想从网站中提取数据,然后将其显示在我的网页上
【发布时间】:2020-04-23 06:27:50
【问题描述】:

首先,我必须将其解压缩并保存在 CSV 文件中。这是我的代码

import requests
from bs4 import BeautifulSoup
import csv

result = requests.get("https://www.health.govt.nz/our-work/diseases-and-conditions/covid-19-novel-coronavirus/covid-19-current-situation/covid-19-current-cases")
src = result.content
soup = BeautifulSoup(src,'lxml')

cov19_table = soup.find("table", attrs={"class": "table-style-two"})
cov19_table_data = cov19_table.find_all("tbody")

headings = []
# gives me headings 
for th in cov19_table_data[0].find_all("th"): #3rows
    headings.append(th.text.replace('\n',' ').strip())
#print(headings)

t_data = []
for td in cov19_table_data[0].find_all("td"):
    t_data.append(td.text.strip())
print(t_data)

with open('data.csv', 'w', newline="") as new_file:
  csv_writer = csv.writer(new_file)
  csv_writer.writerows(t_data)

每当我打开 data.csv 文件时,我都会得到这些数据

原始表格如下所示:

【问题讨论】:

  • 简单地提供一个指向页面的链接,以便清楚数据的来源如何?
  • 只是为了让事情更清楚一点:你显示代码,你显示你得到的,你显示原始表格格式......但最后,你的问题是什么?您希望什么作为所需的输出格式以及您面临的问题是什么? How to Ask

标签: python web-scraping


【解决方案1】:

您的 t_data 只是一个列列表 - 您只有一行 - 阅读 writerows - 它需要一个行列表,每一行都是一个列列表。

使用

with open('data.csv', 'w', newline="") as new_file:
  csv_writer = csv.writer(new_file)
  csv_writer.writerows( [t_data] )  # fix here

最好不要转义数据并将其添加到您的页面而不注明来源。添加一个链接可以让人们阅读更多有关它的信息。

如果您的文本文件中偶尔引用的内容让您感到厌烦,您可能还想使用标题和其他一些分隔符。它现在必须引用所有包含',' 的字符串:

with open('data.csv', 'w', newline="") as new_file:
    csv_writer = csv.writer(new_file, delimiter='|')
    csv_writer.writerow(headings)
    csv_writer.writerows([t_data])

获得:

新西兰确诊病例数|疑似病例数|确诊和疑似病例数|目前住院病例数|康复病例数|死亡人数
1,112|-1|339|1|1,451|0|8|-3|1,065|29|16|2

【讨论】:

  • 我想在我的网页上显示这些数据,这样做的最佳方式是什么。
  • @robin 您的问题是关于将数据放入 csv 中。如何将 csv 放入您的页面是一个不同的问题。不知道您的主页是如何构建的 - 您需要将数据放入您用作主页的页面中,因此这取决于您使用的内容:Django、Grok、WebPy、Pyramid 和 Flask 或其他。试试看,如果不起作用,请提出一个新问题。
【解决方案2】:

在处理生成的数据时,您需要在添加之前将,从要转换为整数的字符串中删除.. 类似:

value = td.text.strip().replace(',', '')
t_data.append(int(value))

从此,事情变得有点简单,你的新 t_data 将如下所示:

[1112, -1, 339, 1, 1451, 0, 8, -3, 1065, 29, 16, 2]

我想你现在可以很容易地弄清楚写作了。另一件事是 csv 文件,它没有标题.. 将标题也写入它可能会很有趣。

【讨论】:

  • 通过引用值写入 csv 就地处理 , - 这都是 csv 写入器和读取器方法的内置内容。无需转换任何东西。
  • 好的。所以,你展示了代码,展示了你得到的东西,你展示了原始表格格式......但最后,你的问题并不清楚所需的输出格式/目标是什么。也许尝试阅读How to Ask,以便以社区能够提供帮助的方式重新表述您的问题……例如:“我希望我的 csv 的每一行都包含以下格式:NAME、TOTAL_VALUE、CHANGE "(并显示错误/试验代码)
  • 我把谁问和谁编辑了这个问题搞混了..对不起!
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 2011-11-07
相关资源
最近更新 更多