我正在尝试将table刮入数据框中。我的尝试仅返回表名,而不返回每个区域的行内的数据。
这是我到目前为止所拥有的:
from bs4 import BeautifulSoup as bs4
import requests
url = 'https://www.eia.gov/todayinenergy/prices.php'
r = requests.get(url)
soup = bs4(r.text, "html.parser")
table_regions = soup.find('table', {'class': "t4"})
regions = table_regions.find_all('tr')
for row in regions:
print row
我想要得到的理想结果:
region | price
---------------|-------
new england | 2.59
new york city | 2.52
感谢您的帮助。
答案 0 :(得分:2)
如果您检查html响应(汤),您将看到在此行table_regions = soup.find('table', {'class': "t4"})
中获得的表标签在包含所需信息的行(包含td和类名:dn d1和s1。
那么如何使用像这样的原始td标签:
from bs4 import BeautifulSoup as bs4
import requests
import pandas as pd
url = 'https://www.eia.gov/todayinenergy/prices.php'
r = requests.get(url)
soup = bs4(r.text, "html.parser")
a = soup.find_all('tr')
rows = []
subel = []
for tr in a[42:50]:
b = tr.find_all('td')
for td in b:
subel.append(td.string)
rows.append(subel)
subel = []
df = pd.DataFrame(rows, columns=['Region','Price_1', 'Percent_change_1', 'Price_2', 'Percent_change_2', 'Spark Spread'])
请注意,我只使用了结果的a[42:50]
片,因为其中包含了网站的所有td。如果需要,您也可以使用其余的东西。