网页抓取奖励 Table

Web Scraping Incentive Table

我正在尝试从下面的 URL 中抓取激励步骤跟踪器 table。我只对小型住宅存储感兴趣。

我得到了一些接近但不完全 table 的地方。请帮助完成我的代码并将结果转换为 CSV 格式,以便我可以保存到本地文件夹。

这是我的代码:

# import libraries
from bs4 import BeautifulSoup
import urllib.request
import csv

urlpage='https://www.selfgenca.com/home/program_metrics/'

page = urllib.request.urlopen(urlpage)
# parse the html using beautiful soup and store in variable 'soup'
soup = BeautifulSoup(page, 'html.parser')
print(soup)

table = soup.find('table',{'class': 'table'}).find_all('tbody',{'data-t': 'Small Residential Storage'})[0]
results = table.find_all('tr')
print(results)

这是我要抓取的table:

Ideal Output Table

我认为 pandas 可以完成,只需对上面的代码进行以下更改:

import pandas as pd

#get the headers
tab = soup.find('table',{'class': 'table'}).find_all('tr',{'class': 'head-row'})
headers=[]
for h in tab[0].find_all('td'):
   headers.append(h.text)

并创建数据框

final = []
for res in results:
    tmp = []
    for r in res:
        if not 'NavigableString' in str(type(r)):
            tmp.append(r.text.strip())
    final.append(tmp)

df = pd.DataFrame(final,columns=headers)
df

输出看起来像您想要的 table。

row1 = soup.find_all('table',{'class': 'table'})[1].find_all('tr',{'class': 'head-row'})[1]
line1=[]
for h in row1.find_all('td'):
   line1.append(h.text)
row2 = soup.find_all('table',{'class': 'table'})[1].find_all('tr',{'class': ''})[3]
line2=[]
for h in row2.find_all('td'):
   line2.append(h.text)
df1=pd.DataFrame([line1,line2], columns=headers)
df2=df.append(df1,ignore_index=True)
df2