无法从网页中提取带Pandas的嵌套表体

2024-06-26 12:42:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pandas和以下代码从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。如果熊猫不能完成预期任务,为什么


Tags: 代码inimportreporthttpurlpandasread
2条回答

正如Eric指出的,这个表是由JavaScript填充的

然而,通过使用Chrome的开发工具,可以很容易地截获页面内部正在进行的API调用

转到“网络”选项卡并按XHR进行筛选,您将找到页面正在调用的端点,即

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

enter image description here 然后,像这样一个简单的脚本将为您提供格式良好的数据

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



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

解决方案是使用诸如requests-htmlselenium之类的库来刮取javascript呈现的页面。然后你可以用pandas解析HTML

from requests_html import HTMLSession

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

table = pd.read_html(r.html)[3]

相关问题 更多 >