0

我正在尝试使用带有代码的熊猫从 url ' http://gsa.nic.in/report/janDhan.html ' 中提取嵌套表:

import pandas as pd
url ="http://gsa.nic.in/report/janDhan.html"
table=pd.read_html(url)[3]
print(table)
table.to_excel("GSA.xlsx")

但是它只打印表格的标题。请指导。我是新手,不想使用beautifulsoup。如果熊猫不能完成预期的任务,那为什么?

4

2 回答 2

1

该表由 javascript 填充,因此它不在 pandas 获取的 HTML 中。您可以通过在浏览器中查看页面来源并搜索表中的值(例如“PRADESH”)来确认这一点。

解决方案是使用库,例如requests-html​​或selenium抓取 javascript 呈现的页面。然后你可以用 pandas 解析那个 HTML。

from requests_html import HTMLSession

s = HTMLSession()
r = s.get(url)
r.html.render()

table = pd.read_html(r.html)[3]
于 2020-04-17T16:57:00.270 回答
0

因此,正如 Eric 指出的那样,该表正在由 JavaScript 填充。

但是,使用 Chrome 的开发者工具很容易拦截页面内部执行的 API 调用。

转到网络选项卡并按 XHR 过滤,您将找到该页面正在调用的端点,即

http://gsa.nic.in/gsaservice/services/service.svc/gsastatereport?schemecode=PMJDY

在此处输入图像描述 然后像这样的简单脚本将为您提供格式良好的数据

import json
import pandas as pd
import requests


r = requests.get('http://gsa.nic.in/gsaservice/services/service.svc/gsastatereport?schemecode=PMJDY')
data = json.loads(r.json()['d'])
pd.DataFrame(data[0]['data'])

LGDStateCode    StateName   totalSaturatedVillage   villageSaturatedTillDate    TotalBeneficiaries  TotalBeneficiariesRegisteredTillDate    Saturation
0   28  ANDHRA PRADESH  305 305 27238   27238   100.00
1   12  ARUNACHAL PRADESH   299 283 42331   39999   94.49
2   18  ASSAM   3042    2375    648815  621878  95.85
3   10  BIHAR   635 544 92356   90131   97.5



于 2020-04-17T17:09:19.097 回答