网络抓取数据框
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 的屏幕截图):
我目前正在尝试通过网络抓取网站中的数据框(关于公司的 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 的屏幕截图):