Python 我可以在soup.find_all()函数中搜索多个HTML元素吗?

Python 我可以在soup.find_all()函数中搜索多个HTML元素吗?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试图在一个网站上搜索浏览量最大的标题。我想要的文本的类选择器与页面上的其他项共享常用词。例如,我想要标记和类“black_color”之间的文本。其他项目使用标签,并有类“颜色\黑色悬停\颜色\灰色\ 90”,我不希望这些包括在内。我想我可以使用更多的HTML元素来更具体,但我不知道如何合并它们 from bs4 import BeautifulSoup def getHeadlines(): url = "https://www.bostonglobe.com/&quo

我正试图在一个网站上搜索浏览量最大的标题。我想要的文本的类选择器与页面上的其他项共享常用词。例如,我想要标记和类“black_color”之间的文本。其他项目使用标签,并有类“颜色\黑色悬停\颜色\灰色\ 90”,我不希望这些包括在内。我想我可以使用更多的HTML元素来更具体,但我不知道如何合并它们

from bs4 import BeautifulSoup

def getHeadlines():
    url = "https://www.bostonglobe.com/"

    source_code = requests.get(url)

    plainText = source_code.text

    soup = BeautifulSoup(plainText, "html.parser")

    #results = soup.find_all("h2",{"class":"headline"})
    results = soup.find_all("a",{"class":"black_color"})
    

    with open("headlines.txt", "w", encoding="utf-8") as f:
        for i in results:
            f.write(str(i.text + ' \n' + '\n'))
        

getHeadlines()

我认为查看
标记实际上可能比在匹配的
中使用更难,后者有一个
'headline'

试试这个:

soup = BeautifulSoup(source_code.text, "html.parser")

for headline in soup.find_all("h2", class_="headline"):
    print(headline.text)
输出:

Boston College outbreak worries epidemiologists, students, community
Nantucket finds ‘community spread’ of COVID-19 among tradespeople The town’s Select Board and Board of Health will hold an emergency meeting at 10 a.m. Monday to consider placing restrictions on some of those trades, officials said Friday. 
Weddings in a pandemic: Welcome to the anxiety vortexNewlyweds are spending their honeymoons praying they don’t hear from COVID‐19 contact tracers. Relatives are agonizing over “damned if we RSVP yes, damned if we RSVP no” decisions. Wedding planners are adding contract clauses specifying they’ll walk off the job if social distancing rules are violated. 
Fauci says US should plan to ‘hunker down’ for fall and winter
Of struggling area, Walsh says, ‘We have to get it better under control’ 
...
在看了一会儿之后,我认为
标记实际上可能动态添加了一些类,而BS不会选择这些类。只需搜索
color\u black
类,并排除
color\u black hover\u color\u gray\u 90
类,就可以得到您不想要的标题类(例如“Sports”),即使当我查看实际的网页源代码时,我发现它与您指出的方式不同


这通常是对页面进行加载后CSS更改的一个好迹象。(我可能错了,但不管是哪种情况,我都希望
方法能满足您的需要。)

我认为查看
标记实际上可能比在匹配的
类中使用要难,因为它有一个
'headline'

试试这个:

soup = BeautifulSoup(source_code.text, "html.parser")

for headline in soup.find_all("h2", class_="headline"):
    print(headline.text)
输出:

Boston College outbreak worries epidemiologists, students, community
Nantucket finds ‘community spread’ of COVID-19 among tradespeople The town’s Select Board and Board of Health will hold an emergency meeting at 10 a.m. Monday to consider placing restrictions on some of those trades, officials said Friday. 
Weddings in a pandemic: Welcome to the anxiety vortexNewlyweds are spending their honeymoons praying they don’t hear from COVID‐19 contact tracers. Relatives are agonizing over “damned if we RSVP yes, damned if we RSVP no” decisions. Wedding planners are adding contract clauses specifying they’ll walk off the job if social distancing rules are violated. 
Fauci says US should plan to ‘hunker down’ for fall and winter
Of struggling area, Walsh says, ‘We have to get it better under control’ 
...
在看了一会儿之后,我认为
标记实际上可能动态添加了一些类,而BS不会选择这些类。只需搜索
color\u black
类,并排除
color\u black hover\u color\u gray\u 90
类,就可以得到您不想要的标题类(例如“Sports”),即使当我查看实际的网页源代码时,我发现它与您指出的方式不同


这通常是对页面进行加载后CSS更改的一个好迹象。(我可能错了,但无论哪种情况,我都希望
方法能满足您的需要。)

您能提供一些示例数据和所需的提取输出吗?很难知道“我想要标记和类之间的文本”是什么意思——类是标记的属性。例如,在您的代码中,您使用类
'black\u color'
搜索
标记。他们之间的文字是什么意思?“使用标记并具有类”的其他项的示例有哪些?我希望在此处嵌入文本:。此代码也存在于页面上,我不希望这些结果包含在我的输出中:您能提供一些示例数据和所需的提取输出吗?很难知道“我想要标记和类之间的文本”是什么意思——类是标记的属性。例如,在您的代码中,您使用类
'black\u color'
搜索
标记。他们之间的文字是什么意思?“使用标记并具有类”的其他项的示例有哪些?我希望在此处嵌入文本:。此代码也存在于页面中,我不希望这些结果包含在我的输出中:感谢您的回复。如果你看我的代码,我已经注释掉了h2,class=headline部分,尝试另一种方法。搜索那个元素和类很好,它只会返回很多结果,并包含我不想要的其他内容。我希望只抓取“浏览次数最多”的列表,这样我只能得到大约10个结果,而不是50多个。浏览次数最多的列表是通过一些数据库拉取、发布页面加载动态呈现的。那就意味着我们不能看到它。您可以对此进行测试-包含查看次数最多的
具有特定的
id
值,在我的负载上,该值为
c0fhKlnQperj1CT
。因此,一旦有了
soup
对象,运行:
soup.find(id=“c0fhKlnQperj1CT”).contents
。您将看到,只有一个
标记分配了
'spacer'
类。但是,如果您在浏览器中查看实际网页中的HTML,您将看到间隔符
,但也会看到一大堆额外的代码,这些代码会加载浏览量最大的表。感谢您的回复。如果你看我的代码,我已经注释掉了h2,class=headline部分,尝试另一种方法。搜索那个元素和类很好,它只会返回很多结果,并包含我不想要的其他内容。我希望只抓取“浏览次数最多”的列表,这样我只能得到大约10个结果,而不是50多个。浏览次数最多的列表是通过一些数据库拉取、发布页面加载动态呈现的。那就意味着我们不能看到它。您可以对此进行测试-包含查看次数最多的
具有特定的
id
值,在我的负载上,该值为
c0fhKlnQperj1CT
。因此,一旦有了
soup
对象,运行:
soup.find(id=“c0fhKlnQperj1CT”).contents
。您将看到,只有一个
标记分配了
'spacer'
类。但是,如果您在浏览器中查看实际网页中的HTML,您将看到间隔符
,但也会看到加载浏览量最大的表的大量额外代码。