【问题标题】:Why can't I see/use the innerHTML of this site in my python interpreter?为什么我不能在我的 python 解释器中看到/使用这个站点的 innerHTML?
【发布时间】:2021-04-10 20:28:51
【问题描述】:

我正在使用 BS4 进行网络抓取项目,我正在尝试汇总大学学费数据。我使用网站tutorialtracker.org 作为数据源。一旦我导航到一所特定的大学,我想从网站上刮掉学费数据。当我检查元素时,我可以看到存储为 innerHTML 的学费数据,但是当我使用美丽的汤来查找它时,它会返回关于该位置的所有内容,但学费数据除外。

这是我试图从中抓取的网址:https://www.tuitiontracker.org/school.html?unitid=164580

这是我正在使用的代码:

import urllib.request
from bs4 import BeautifulSoup


DOWNLOAD_URL = "https://www.tuitiontracker.org/school.html?unitid=164580"


def download_page(url):
    return urllib.request.urlopen(url)

# print(download_page(DOWNLOAD_URL).read())

def parse_html(html):
    """Gathers data from an HTML page"""
    soup = BeautifulSoup(html, features="html.parser")
    # print(soup.prettify())
    tuition_data = soup.find("div", attrs={"id": "price"}).innerHTML
    
    print(tuition_data)

def main():
    url = DOWNLOAD_URL
    parse_html(download_page(DOWNLOAD_URL).read())


if __name__ == "__main__":
    main()

当我打印学费数据时,我看到页面上存储学费数据的相关标签,但没有数值。我尝试过使用 .innerHTML 和 .string,但它们最终会打印 None,或者只是一个空格。

真的很困惑,感谢您的澄清。

【问题讨论】:

  • 我永远无法理解为什么图像代码比纯文本代码更好复制。 o.O
  • 话虽如此,请阅读How to Ask 并编辑您的问题,使其类似于minimal reproducible example
  • 谢谢,这是我第一次使用堆栈溢出来提问。我将原始代码作为文本而不是图像包含在内。

标签: python html beautifulsoup innerhtml


【解决方案1】:

数据来自 API 端点,并由 JavaScript 动态呈现,因此您不会使用 BeautifulSoup 获取它。

但是,您可以查询端点。

方法如下:

import json

import requests

url = "https://www.tuitiontracker.org/school.html?unitid=164580"
api_endpoint = f"https://www.tuitiontracker.org/data/school-data-09042019/"
response = requests.get(f"{api_endpoint}{url.split('=')[-1]}.json").json()
tuition = response["yearly_data"][0]
print(
    round(tuition["price_instate_oncampus"], 2),
    round(tuition["avg_net_price_0_30000_titleiv_privateforprofit"], 2),
)

输出:

75099.8 30255.86

PS。 JSON 中还有很多内容。未来网络抓取工作的专业提示:你最喜欢的网络浏览器的开发者工具应该是你最好的朋友

这就是它的样子幕后

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多