【问题标题】:Python: I am trying to web scrape a page but I am not able to find the htmlPython:我正在尝试网页抓取页面,但我无法找到 html
【发布时间】:2019-08-06 16:53:57
【问题描述】:

我正在尝试抓取此页面 (https://www.polarislist.com/) 我正在尝试提取所有数据,例如班级规模、免费/减少午餐/学生/助教比例、按种族划分的学生人口统计百分比,以及普林斯顿大学承认的麻省理工学院、哈佛大学的相应人数。

但是,当我查看并检查页面源时,我无法找到包含此类信息的标签

我正在使用 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 能够获取已识别的标签并将其从站点中提取出来。但是,当我在 Inspect Page 元素中时,我找不到任何东西,

我在检查元素时看到了这一点,但无法获取 div 数据测试名称

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

【问题讨论】:

  • 很确定该网站是用 react 构建的。顺便说一句,有一个 json 端点。你会感兴趣吗? https://www.polarislist.com/api/high_schools_orange_cake

标签: python html web-scraping beautifulsoup scrapinghub


【解决方案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.

【讨论】:

  • 打扰一下 Andrej,您是如何发现 Chrome 中的数据是从 https://www.polarislist.com/api/high_schools_orange_cake 提取的?我知道如何进入开发者模式,但我只是用它来探索html代码
  • @JuanC 我使用 Firefox,但在 Chrome 中应该是一样的。当您打开 Network 选项卡时,您会看到页面发出请求的所有 URL:imgur.com/bnSjulQ 这个特定的 URL 包含 JSON 格式的所有数据。
  • 无法在 Chrome 中找到它,但在 Firefox 中找到了。在列表中的所有东西之间,您发现这是您必须寻找的东西,因为它是一个“大”尺寸的json?非常感谢!
  • 非常感谢 Andrej,您分享的知识帮助我解决了我在论文中发现的一个直到现在都无法克服的障碍。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 2018-09-01
  • 1970-01-01
相关资源
最近更新 更多