【问题标题】:Web Scraping of nested div elements with repeating class names具有重复类名的嵌套 div 元素的 Web 抓取
【发布时间】:2021-10-14 15:20:06
【问题描述】:
<div class="information_row" id="dashboard">
                <a href="#statewise-data" class="state_link" title="Statewise">Statewise</a>
                <div class="info_title1">Cases Across India</div>
                <div class="active-case">
                   <div class="block-active-cases">
                     <span class="icount">3,86,351</span>
                     <div class="increase_block">
                                                <div class="color-green down-arrow">
                            2,157 <i></i>
                        </div>
                    </div>
                    </div>
                    <div class="info_label">Active Cases  
                       <span class="per_block">(1.21%)</span>
                     </div>
                   
                </div>
                
                

                <div class="iblock discharge">
                    
                    <div class="iblock_text">
                       <div class="info_label"> Discharged 
                           <div class="per_block">
                           (97.45%)
                           </div>
                        </div>
                        <span class="icount">3,12,20,981</span>
                        <div class="increase_block">
                                                <div class="color-green up-arrow">
                            40,013 <i></i>
                        </div>
                    </div>
                    </div>
                    
                </div>
                <div class="iblock death_case">
                    <div class="iblock_text">
                        
                        <div class="info_label">Deaths  
                          <div class="per_block">
                                (1.34%)
                          </div>
                        </div>
                        <span class="icount">4,29,179</span>
                        <div class="increase_block">
                                                <div class="color-red up-arrow">
                            497 <i></i>
                        </div>
                    </div>
                    </div> 
                </div>

            <div class="iblock t_case">
                    <div class="iblock_text">
                        <div class="info_label">Total Cases 
                            <div class="per_block"></div>
                        </div>
                        <span class="icount">3,20,36,511</span>
                        <div class="increase_block">
                                                <div class="color-red up-arrow">
                           38,353 <i></i>
                        </div>
                    </div>
                    </div>
                </div></div>

我正在使用 python 和 beautifulsoup 进行网络 scraping 项目。作为初学者,我无法解析我需要的数据(covid 上的数值统计),因为包含数值数据的类名是重复的,并且不是唯一的,例如 icountper_blockincrease_block。我想要的是仅将这些数值数据解析并存储在不同的变量中,如下所示-

  1. Total_cases = 3,20,36,511
  2. Total_cases_in_last_24_hrs = 38,353,对于所有其他类别也是如此(出院、死亡、活跃病例)

这是我的代码-

    URL = 'https://www.mygov.in/covid-19/'
    page = requests.get(URL,headers=headers)
    clean_data=BeautifulSoup(page.text,'html.parser')
    span=clean_data.findAll('span',class_='icount')
    #print(clean_data)  

    total_cases = clean_data.find("div",class_="iblock 
    t_case",attrs={'spanclass':'icount'}).get_text()
    print(total_cases)

我已经研究了很长时间,但找不到解决方案。请帮忙。 这是来自Click here to visit the website的参考代码。

谢谢。

【问题讨论】:

    标签: python parsing web-scraping beautifulsoup data-analysis


    【解决方案1】:

    一种可能的解决方案是从class="t_case" 中选择所有文本并拆分文本:

    import requests
    from bs4 import BeautifulSoup
    
    url = "https://www.mygov.in/covid-19/"
    
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    _, total_cases, new_cases = (
        soup.select_one(".t_case").get_text(strip=True, separator="|").split("|")
    )
    print(total_cases)
    print(new_cases)
    

    打印:

    3,20,36,511
    38,353
    

    或者:

    t_case = soup.select_one(".t_case")
    
    total_cases = t_case.select_one(".icount")
    new_cases = t_case.select_one(".color-red, .color-green")
    
    print(total_cases.get_text(strip=True))
    print(new_cases.get_text(strip=True))
    

    【讨论】:

    • 这对我有帮助。谢谢。如果你能给我解释一下,尤其是_,的使用,那对我来说会很好。
    • @YashShinde Variable _ 通常用于后面不需要的变量。 .split 返回包含三个值的列表,但我们只需要最后两个。
    • 现在我被困在将带有 div 元素的表格作为ind-mp_info 提取到 csv 文件中。展开 COVID-19 Statewise Status 选项卡时可以找到它。请帮忙
    猜你喜欢
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2019-04-10
    • 1970-01-01
    • 2014-11-25
    • 2022-11-01
    相关资源
    最近更新 更多