Python:我正在尝试通过网页抓取网页,但找不到html

时间:2019-08-06 16:53:57

标签: python html web-scraping beautifulsoup scrapinghub

我正在尝试删除此页面(https://www.polarislist.com/) 我正在尝试获取所有数据,例如班级人数,免费/减少的午餐/学生/随班就读比率,按种族划分的学生人口百分比,以及MIT,哈佛和普林斯顿大学承认的各项数据。

但是,当我查看页面源代码时,却找不到包含此类信息的标签

我正在使用Python 3.7,Bs4 我已经检查了页面源代码

我到目前为止有什么:

#importing lbiraries
import requests
import bs4
from bs4 import BeautifulSoup

page_link = 'https://www.polarislist.com'
page_response = requests.get(page_link, timeout=5)

page_content = BeautifulSoup(page_response.content, "html.parser")
result_name_of_hs = page_content.find_all('div', attrs={'data-test': 'name'})
print(result_name_of_hs)

***输出为[]

我希望BS4获得标识的标签并将其从站点中拉出。但是,当我位于“检查页面”元素中时,我什么也找不到,

当我检查一个元素时看到了这个,但是无法获得div数据的测试名称

<div class="font-size-20 font-weight-semi-bold block-with-text" data-test="name">THOMAS JEFFERSON HIGH SCHOOL</div>

1 个答案:

答案 0 :(得分:1)

您看到的数据由页面异步加载。打开Firefox / Chrome开发人员工具时,您会看到数据是从其他URL(在这种情况下为https://www.polarislist.com/api/high_schools_orange_cake)中提取的。

要从JSON加载数据,您可以使用以下方法:

import json
import requests

url = 'https://www.polarislist.com/api/high_schools_orange_cake'

data = requests.get(url).json()

print(json.dumps(data, indent=4))

打印:

[
    {
        "id": 18450,
        "name": "THOMAS JEFFERSON HIGH SCHOOL",
        "city": "ALEXANDRIA",
        "state": "VA",
        "public": true,
        "num_senior": 423,
        "num_american_indian": 39,
        "num_asian": 1084,
        "num_hispanic": 34,
        "num_black": 24,
        "num_white": 530,
        "student_teacher_ratio": "16.93",
        "num_free_reduced_lunch": 33,
        "total_students": 1820,

    ... and so on.