【问题标题】:Extracting multiple strings from different elements with the same class bs4 beautifulSoup从具有相同类 bs4 beautifulSoup 的不同元素中提取多个字符串
【发布时间】:2021-02-09 06:58:14
【问题描述】:

我正在尝试从具有不同 div 但类名相同的站点中抓取数据。

<div class="release-date-text-wrapper" >
                        <div class='release-date-title'><a href="/pharrell-x-adidas-nmd-hu-sesame">Pharrell x adidas NMD Hu Sesame</a></div>
                        <div class='release-date-style'>Sesame/Sand-Bright Red</div>
                    </div>
                </div>
            </div>
                                <div class='col-xs-6 col-sm-3 col-md-3 release-date-item-continer clear-padding'>
                <div class='release-date-item-wrapper'>
                    <div class="release-event-date-wrapper">
                        <div class="event-date ">
                            <div>
                                25&nbsp;Oct                            </div>
                            <div>2020</div>
                        </div>
                    </div>
                    <div class='release-date-image-wrapper'>
                                                <a href="/pharrell-x-adidas-nmd-hu-crystal-white" class='thumbnail'>
                                                        <img  src="https://4app.kicksonfire.com/kofapp/upload/events_master_images/thumb_ipad_pharrell-x-adidas-nmd-hu-crystal-white.jpg" alt="Pharrell x adidas NMD Hu Crystal White" class="img-responsive imagecache imagecache-kofapp_list"  width="250" height="200" />
                        </a>
                    </div>
                    <div class="release-date-text-wrapper" >
                        <div class='release-date-title'><a href="/pharrell-x-adidas-nmd-hu-crystal-white">Pharrell x adidas NMD Hu Crystal White</a></div>
                        <div class='release-date-style'>Crystal White/Clear Mint-Shock Yellow</div>

我正在尝试从 2 个 div 中提取“发布日期标题”,它们应该显示如下

Pharrell x adidas NMD Hu Sesame
Pharrell x adidas NMD Hu Crystal White

这是我当前使用的代码。

Name = soup.find('div',attrs={'class':'release-date-title'}).text

这给了我第一个没有问题,我遇到的麻烦是获得第二个。我尝试了 .find_next("div") 但它显示了类 'release-date-style'。

编辑: 我需要能够单独选择它们,因为稍后我会将它们添加到不和谐嵌入中,为每个标题添加颜色和日期。

【问题讨论】:

    标签: python beautifulsoup


    【解决方案1】:

    如果html_doc 是问题中的 HTML sn-p,则此脚本:

    soup = BeautifulSoup(html_doc, 'html.parser')
    
    for t in soup.select('.release-date-text-wrapper > div:nth-child(1)'):
        print(t.text)
    

    打印:

    Pharrell x adidas NMD Hu Sesame
    Pharrell x adidas NMD Hu Crystal White
    

    CSS 选择器.release-date-text-wrapper &gt; div:nth-child(1) 将直接选择class="release-date-text-wrapper" 元素下的第一个&lt;div&gt; 子元素


    或者:

    for t in soup.select('.release-date-title > a'):
        print(t.text)
    

    或者:

    for t in soup.select('.release-date-title'):
        print(t.text)
    

    【讨论】:

    • 虽然这可行,但我需要单独找到它们,因为我会将它们链接到嵌入颜色和日期的不和谐中,以与每个项目一起使用。
    【解决方案2】:

    不要使用返回单个项目的soup.find,而是使用返回所有匹配结果列表的soup.findAll。这样您就可以遍历结果以获得您需要的结果。

    Names = soup.findAll('div',attrs={'class':'release-date-title'})
    for name in Names:
        print(name.text)
    

    打印:

    Pharrell x adidas NMD Hu Sesame
    Pharrell x adidas NMD Hu Crystal White
    

    根据我们下面的 cmets,您将如何打印结果 #4:

    Names = soup.findAll('div',attrs={'class':'release-date-title'})
    print(Names[3].text) #Change this index to get the result you want, right now it is 3 since you wanted result #4
    

    【讨论】:

    • 虽然这可行,但我需要单独找到它们,因为我会将它们链接到嵌入颜色和日期的不和谐中,以与每个项目一起使用。
    • @Lukemul69 我不确定我是否理解您的意思。您可以通过您要查找的内容的索引将结果分开。例如:Names[0] 等于 Pharrell x adidas NMD Hu SesameNames[1] 等于 Pharrell x adidas NMD Hu Crystal White 这是你的意思吗?
    • 哦,好吧,那行得通。你能给我一个关于如何分离结果的例子吗?大约有20个左右的标题。因此,假设我想打印项目标题 4,我将如何在您发送的代码中编写它?
    • @Lukemul69 我编辑了我的评论以打印标题 4。希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2015-02-17
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多