如何使用动态 HTML (Python) 从网页中抓取数据?

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

这是数据类型:

http://img4.mukewang.com/646f29c500010c8311560612.jpg

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


我过去使用seleniumand做过类似的事情PhantomJS,但我不知道如何在 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])


炎炎设计
浏览 95回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript