当前位置: 首页 > 知识库问答 >
问题:

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

葛哲彦
2023-03-14

我试图向一个URL发送一个AJAX请求,它成功地返回了我试图抓取的内容。但是,当我试图实际拉出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())的注释,将看到它返回none。但是,如果运行print(Soup.prettify()),您将返回HTML并可以看到其中的div类。

我已经尝试了很多不同的方法,我开始觉得我的问题不在我所寻找的地方。有什么想法,我如何可以有这个拉动的div与类“head-loc”?我实际上想同时拉出头名和头锁,但我可以在这座桥过了之后把那部分弄清楚。

我也尝试使用html.parser而不是lxml,但情况是一样的。

共有1个答案

璩慎之
2023-03-14

结果我需要首先解析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")
 类似资料:
  • 问题内容: 我正在尝试解析一个网站,并通过BeautifulSoup.findAll获取一些信息,但它并没有全部找到。.我正在使用python3 代码是这个 它只打印一半… 问题答案: 不同的HTML解析器对损坏的HTML的处理方式不同。该页面提供了损坏的HTML,解析器对此的处理不佳: 标准库在此特定页面上的麻烦较少: 使用将其转换为您的特定代码示例,您将这样指定解析器:

  • 我正在使用Eclipse和Gradle。Twilio被列为依赖项。所有版本都是最新的。引用Gradle的代码将无法编译,并返回Twilio类不存在的错误消息。在线代码令人沮丧地过时了。我希望这里有人能帮忙。 我正在运行的代码非常基本:

  • 问题内容: 为什么我收到此PHP错误? 问题答案: 该PHPUnit文档 说 过去常说,包括/需要的PHPUnit / Framework.php,如下所示: 更新 从PHPUnit 3.5开始,有一个内置的autoloader类将为您处理此问题: 感谢Phoenix指出这一点!

  • 问题内容: 我创建了一个整数列表,并试图返回特定值的索引。该数组是3,8,2,5,1,4,7,6并且我想返回indexOf(3),应该为0。 导入java.util。*后,我在Eclipse Java Scrapbook中尝试了以下操作: 我也尝试过: 两者都返回-1。为什么?如何使它按预期工作? 问题答案: 它不是为了使它起作用。

  • 问题内容: 为什么在使用sudo时找不到命令“ bundle”: 但是在不使用sudo时确实存在: 我问的原因是我正在关注https://github.com/gitlabhq/gitlab- recipes/tree/master/install/centos ,它指出要使用sudo。 所述添加标志…引发’bundle:命令未找到’错误,但显示“此帐户当前不可用”。 问题答案: 使用和不检查的值

  • 为什么在使用sudo时找不到命令"bundle": 但不使用sudo时不存在: 我问的原因是我在https://github.com/gitlabhq/gitlab-recipes/tree/master/install/centos,它表示使用sudo。 我尝试添加一个标志,如使用$sudo bundle exec所述。。。引发“bundle:command not found”错误,但获取“此