【问题标题】:How to get div element under many divs using BeautifulSoup?如何使用 BeautifulSoup 在多个 div 下获取 div 元素?
【发布时间】:2021-06-20 13:14:57
【问题描述】:

所以我将 BeautfiulSoup4 与 Python 一起使用,并且我正在尝试获取一个带有“div 类”的元素。但是这个元素在许多 div 下,当我尝试将“find”与 BeautifulSoup 一起使用时,它只返回“None”。我想要获取的元素在屏幕截图中显示为“WhatIWant”类。这是网站html的截图: Screenshot

这是我用于获取该元素的代码

page = requests.get(URL)
soup = BeautifulSoup(page.content, "lxml")
element = soup.find_all("div", {"class": "WhatIWant"})

【问题讨论】:

  • 您没有提供 url,所以我们无法测试,但是您是否检查过 soup 确实有您要查找的 div,即如果站点使用 JavaSctipt,您将需要其他工具,例如 Selenium刮它
  • 因为div 有一个类mainRankingDescriptionText。您可以直接选择它。 element = soup.find_all("div", {"class": "mainRankingDescriptionText"})
  • @buran 我认为是这样。但是当我禁用 JavaScript 并重新加载页面时,一些图像消失了,但我正在寻找的文本仍然存在。那么这不是说明它不是因为 JavaScript 吗?
  • @Ram 我试过了,但它也返回“None”。
  • @bnighted 可能是网站使用 Javascript 加载。您可以按照@buran 的建议使用selenium。可以分享一下网址吗?

标签: python html web-scraping beautifulsoup pycharm


【解决方案1】:
import requests
from bs4 import BeautifulSoup
url = 'https://www.leagueofgraphs.com/summoner/tr/AvaIanche'
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.find('div', {'class':'leagueTier'}).text.strip())

输出:

Platinum I

【讨论】:

  • 非常感谢。但我对标题了解不多。每次浏览器(或网络驱动程序)更新时我是否必须更新该部分,或者我可以一直这样使用它?
  • 你可以传递任何你想要的用户代理。没有它你会得到 403 错误。如果需要,您可以传递更多标题。
【解决方案2】:

也许你请求的网页没有使用简单的请求加载那个元素,有些网页有 JavaScript,你不能用 Bs4 抓取它;使用 Selenium 可能会更好。

测试它,然后将响应发送到这里评论;最好将这个 URL 发送到这里。

【讨论】:

    猜你喜欢
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2022-06-29
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 2020-08-02
    相关资源
    最近更新 更多