首页 > 解决方案 > 如何用漂亮的汤处理班级变化

问题描述

我只是想在谷歌新闻页面中抓取一些随机新闻标题,当我检查我得到的新闻标题时

Class = mCBkyc JQe2Ld nDgy9d

但是当我尝试使用 Beautifulsoup 时,这个类不存在,它会改变从响应中获取的内容

Class = BNeawe UPmit AP7Wnd

我知道这可能是由于 JS 但我该如何正确处理它

低于我尝试过的

from bs4 import BeautifulSoup
import requests

content = requests.get(
    "https://www.google.com/search?q=beautiful+soup+get+text+a&safe=active&rlz=1C1GCEB_enIN960IN960&source=lnms&tbm=nws&sa=X&ved=2ahUKEwjNzsv-iaTzAhX6yzgGHfeBDzgQ_AUoA3oECAEQBQ&biw=1707&bih=770&dpr=1.13").content

soup = BeautifulSoup(content, features="html.parser")

with open("d.txt", "w") as file:
    file.write(soup.prettify())

for a in soup.find_all('div', class_='BNeawe vvjwJb AP7Wnd'):  # in this line if kept class =  mCBkyc JQe2Ld nDgy9d none is returned 
    print(a)

标签: pythonpython-3.xweb-scraping

解决方案


我不知道您实际上在寻找什么,但是:当您使用如下选择器时: div[role='text']

例子: soup.select("div[role='text']")

您将在页面上获得所有新闻: 在此处输入图像描述

如您所见,页面上有 10 个这样的项目(在我的例子中都是新闻)。然后你可以继续休息 - 在每个项目中找到所有需要的数据。

编辑:不幸的是,您可能会被阻止这样做。因为这个: 在此处输入图像描述

我的建议 - 使用 Selenium


推荐阅读