如何使用动态HTMLPython从网页中抓取数据?

问题描述

我正在尝试找出如何从以下网址中抓取数据:https://www.aap.org/en-us/advocacy-and-policy/aap-health-initiatives/nicuverification/Pages/NICUSearch.aspx

以下是数据类型:

enter image description here

似乎所有内容都已从数据库填充并通过javascript加载到网页中。

我过去使用seleniumPhantomJS做过类似的事情,但是我不知道如何在Python中获取这些数据字段。

不出所料,我无法使用pd.read_html处理此类问题。

是否可以解析以下结果:

from selenium import webdriver

url="https://www.aap.org/en-us/advocacy-and-policy/aap-health-initiatives/nicuverification/Pages/NICUSearch.aspx"

browser = webdriver.PhantomJS()
browser.get(url)
content = browser.page_source

还是访问实际的基础数据?

如果没有,那么除了复制和粘贴几个小时以外,还有哪些其他方法

编辑:

以下面的答案为基础,我可以从@thenullptr访问材料,但只能访问第1页上的内容。我如何才能适应所有页面上的内容[建议正确解析]?我的最终目标是将其保存在熊猫数据框中

import requests
from bs4 import BeautifulSoup

r = requests.post(
    url = 'https://search.aap.org/nicu/',data = {'SearchCriteria.Level':'1','X-Requested-With':'XMLHttpRequest'},) #key:value
html = r.text

# Parsing the HTML
    soup = BeautifulSoup(html.split("</script>")[-1].strip(),"html")
div = soup.find("div",{"id": "main"})

div = soup.findAll("div",{"class":"blue-border panel list-group"})
def f(x):
    ignore_fields = ['Collapse all','Expand all']
    output = list(filter(bool,map(str.strip,x.text.split("\n"))))
    output = list(filter(lambda x: x not in ignore_fields,output))
    return output
results = pd.Series(list(map(f,div))[0])

解决方法

要继续我的最后评论,以下内容应为您提供一个良好的起点。在查看XHR呼叫时,您只想查看从每个数据发送和接收的数据,以查明所需的数据。以下是进行搜索时发送到API的原始POST数据,看来您需要至少使用一个,并包括最后一个。

{
    "SearchCriteria.Name": "smith","SearchCriteria.City": "","SearchCriteria.State": "","SearchCriteria.Zip": "","SearchCriteria.Level": "","SearchCriteria.LevelAssigner": "","SearchCriteria.BedNumberRange": "","X-Requested-With": "XMLHttpRequest"
}

这是一个简单的示例,说明如何使用请求库发送过帐请求,网页将用原始数据进行答复,因此您可以使用BS或类似方法对其进行解析以获取所需的信息。

import requests
r = requests.post('https://search.aap.org/nicu/',data = {'SearchCriteria.Name':'smith','X-Requested-With':'XMLHttpRequest'}) #key:value
print(r.text)

打印 <strong class="col-md-8 white-text">JOHN PETER SMITH HOSPITAL</strong>...

https://requests.readthedocs.io/en/master/user/quickstart/