网络抓取数据框

web scraping a dataframe

我目前正在尝试通过网络抓取网站中的数据框(关于公司的 sstack 交换),以便在 python 此数据中创建新的数据框。 我试图废弃数据帧的行以便存储在 csv 文件中并使用方法 pandas.read_csv()。 我遇到了一些麻烦,因为 csv 文件没有我想象的那么好。 我如何设法通过网络抓取在 python 中获得完全相同的数据框 这是我的代码:

from bs4 import BeautifulSoup
import urllib.request as ur
import csv
import pandas as pd

url_danone = "https://www.boursorama.com/cours/1rPBN/" 
our_url = ur.urlopen(url_danone)
soup = BeautifulSoup(our_url, 'html.parser')
with open('danone.csv', 'w') as filee:
    for ligne in soup.find_all("table", {"class": "c-table c-table--generic"}):
        row = ligne.find("tr", {"class": "c-table__row"}).get_text()
        writer = csv.writer(filee)
        writer.writerow(row)

The dataframe in the website The csv file

请试试这个 for 循环:

rows = []
headers = []

# loop to get the values
for tr in soup.find_all("tr", {"class": "c-table__row"})[13:18]:
    row = [td.text.strip() for td in tr.select('td') if td.text.strip()]
    rows.append(row)

# get the header
for th in soup.find_all("th", {"class": "c-table__cell c-table__cell--head c-table__cell--dotted c-table__title / u-text-uppercase"}):
    head = th.text.strip()
    headers.append(head)

这会以您想要的方式获取您的值和 header。请注意,由于表没有 ID 或任何唯一标识符,因此您需要考虑所有表来正确稳定您想要的行(请参阅上面代码中的 [13:18]) .

您可以检查您的内容,从 header 和行中创建一个简单的数据框,如下所示:

# write csv
df = pd.DataFrame(rows, columns=headers)
print(df.head())

希望对您有所帮助。

您可以使用pd.read_html阅读需要的table:

import pandas as pd

url = "https://www.boursorama.com/cours/1rPBN/"
df = pd.read_html(url)[1].rename(columns={"Unnamed: 0": ""}).set_index("")
print(df)
df.to_csv("data.csv")

打印并保存 data.csv(来自 LibreOffice 的屏幕截图):