python - 抓取数据以存储到熊猫数据框中
问题描述
我正在尝试从该网站https://en.wikipedia.org/wiki/List_of_chemical_elements中抓取“化学元素列表”表
然后我想将表数据存储到熊猫数据框中,以便我可以将其转换为 csv 文件。到目前为止,我已经将表的标题抓取并存储到数据框中。我还设法从表中检索每一行数据。但是,我无法将表的数据存储到数据框中。以下是我到目前为止所拥有的
from bs4 import BeautifulSoup
import requests as r
import pandas as pd
response = r.get('https://en.wikipedia.org/wiki/List_of_chemical_elements')
wiki_text = response.text
soup = BeautifulSoup(wiki_text, 'html.parser')
table = soup.select_one('table.wikitable')
table_body = table.find('tbody')
#print(table_body)
rows = table_body.find_all('tr')
cols = [c.text.replace('\n', '') for c in rows[1].find_all('th')]
df2a = pd.DataFrame(columns = cols)
df2a
for row in rows:
records = row.find_all('td')
if records != []:
records = [r.text.strip() for r in records]
print(records)
解决方案
在这里,我找到了所有列数据,其中它分为两部分,第一列和第二列数据
all_columns=soup.find_all("tr",attrs={"style":"vertical-align:top"})
first_column_data=[i.get_text(strip=True) for i in all_columns[0].find_all("th")]
second_column_data=[i.get_text(strip=True) for i in all_columns[1].find_all("th")]
现在因为我们需要 16 列,所以取适当的列并将数据添加到new_lst
列表中,即列列表
new_lst=[]
new_lst.extend(second_column_data[:3])
new_lst.extend(first_column_data[1:])
现在我们必须找到行数据遍历所有并找到相应 的,它将返回表数据列表tr
并附加到attrs
td
main_lst
main_lst=[]
for i in soup.find_all("tr",attrs={"class":"anchor"}):
row_data=[row.get_text(strip=True) for row in i.find_all("td")]
main_lst.append(row_data)
输出:
Atomic numberZ Symbol Name Origin of name[2][3] Group Period Block Standardatomicweight[a] Density[b][c] Melting point[d] Boiling point[e] Specificheatcapacity[f] Electronegativity[g] Abundancein Earth'scrust[h] Origin[i] Phase atr.t.[j]
0 1 H Hydrogen Greekelementshydro-and-gen, 'water-forming' 1 1 s-block 1.008 0.00008988 14.01 20.28 14.304 2.20 1400 primordial gas
....
推荐阅读
- python - 在 PySpark 中为 KeyVal RDD 中的每个键收集前 N 个条目
- html - Visual Studio Code:如何删除 html 标签并同时写入多行?
- php - 视图中未定义的变量
- raspberry-pi - 如何使用 python 3 控制树莓派的音量?
- html - `overflow-wrap: break-word` 和 `word-break: break-word` 的行为是否有所不同?
- javascript - 如何使元素始终位于结束标签上
- google-chrome - Windows Docker 容器中的 Chrome 安装失败:非零代码 3221225781
- javascript - 我将字符串发布到后端,但后端返回状态码 500:查看函数未返回响应
- c++ - 从变量转换时出现 std::chrono::time_point 编译器错误
- python - 如何找到组中两个事件之间的时间差