我正在尝试将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,但这是同一回事。
答案 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")