Невозможно извлечь тело вложенной таблицы с pandas из веб-страницы - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь извлечь вложенную таблицу из URL 'http://gsa.nic.in/report/janDhan.html', используя pandas с кодом:

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")

Однако печатается только заголовок таблицы. Пожалуйста, руководство. Я новичок ie и не хочу использовать Beautifulsoup. Если pandas не может выполнить намеченную задачу, то почему?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Таблица заполняется javascript, поэтому она не входит в HTML, которую pandas выбирает. Вы можете подтвердить это, просмотрев источник страницы в вашем браузере и выполнив поиск значений в таблице, таких как «PRADE SH.»

. Решение заключается в использовании библиотеки, такой как * 1003. * или selenium, чтобы очистить страницу, отображаемую javascript. Затем вы можете разобрать, что HTML с pandas.

from requests_html import HTMLSession

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

table = pd.read_html(r.html)[3]
0 голосов
/ 17 апреля 2020

Так, как указал Эри c, таблица заполняется JavaScript.

Однако довольно просто перехватить вызов API, выполняемый страницей внутри, с помощью разработчика Chrome. инструменты.

Go на вкладку сети и фильтр по 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



...