为什么Beautiful Soup在HTML中找不到类?

时间:2020-05-19 20:23:14

标签: python beautifulsoup

我正在尝试将AJAX请求发送到URL,并且它成功返回了我尝试获取的内容。但是,当我尝试实际提取HTML的特定部分时,它始终返回None,或者如果我尝试find_all,则返回一个空列表。

这是我的代码:

import requests
from bs4 import BeautifulSoup

#AJAX URL to send the post to
url = "https://www.qualitycheck.org/ajax/QualityReport/ajax.aspx"

#Information being requested and BSNID vars (can be extended for additional information like GetAccreditationPrograms)
TJC_ID = '21'
payload = 'f=GetDemographicInfo&bsnid=' + TJC_ID

#Content Headers
headers = {
  'Content-Type': 'application/x-www-form-urlencoded'
}

#Post to TJC
response = requests.request("POST", url, headers = headers, data = payload)

#Clean up the response
soup = BeautifulSoup(response.text, 'lxml')

#testing something
# tryastring = soup.find_all(string="head")
# print(tryastring)

# Pull out the "head-loc" div class only
final = soup.find('div', class_="head-loc")
print(final)

#Print results to make sure it works
# print(final.prettyify())
# print(soup.prettify())

如果您取消注释# print(final.prettyify()),则不会返回任何内容。但是,如果您运行print(soup.prettify()),您将获得HTML并可以在其中看到该div类。

我尝试了许多不同的方法,并且开始认为我的问题不在我要寻找的地方。关于如何使该类仅具有“ head-loc”类的div的任何想法?我实际上想同时使用headname和head-loc,但是我可以在过桥之后弄清楚那一部分。

我也曾尝试使用html.parser而不是lxml,但这是同一回事。

1 个答案:

答案 0 :(得分:0)

原来,我需要首先解析JSON,然后才能解析HTML。

###
    site_response: dict = response.json()
    new_html: str = site_response.get('ResponseHtml')

    ###
    # Adding our new HTML to bs4
    ###
    soup = BeautifulSoup(new_html, 'html.parser')

    # Pull out the "head-loc" div class only
    final = soup.find('div', class_="head-loc")