bs4 抓取 python 获取内容直到特定 class 名称

bs4 scraping python get contents until specific class name

我想抓取这个网站 https://www.eduvision.edu.pk/institutions-detail.php?city=51I&institute=5_allama-iqbal-open-university-islamabad 我只想要这个 url 中的学士数据,它位于 class name=academicsList 下,我不想要低于 MS(MASTERS) 的数据。 我希望我的抓取工具在 ms 数据之前停止。我的逻辑是,我们可以在 class=academicsHead 上设置临时增量器,它应该在获得第二个 academicsHead

时停止
   import requests
from bs4 import BeautifulSoup
from fake_useragent import  UserAgent
ua          = UserAgent()
header      = {'user-agent':ua.chrome}
response   = requests.get('https://www.eduvision.edu.pk/institutions-detail.php?city=51I&institute=5_allama-iqbal-open-university-islamabad',headers=header)
soup = BeautifulSoup(response.content, 'html.parser')
disciplines = soup.findAll("ul", {"class": "academicsList"})
#temp = soup.findAll("ul",{"class":"academicsHead"})
#stop at second academicsHead
for d in disciplines:
    print(d.findAll('li')[0].text)

我们可以检查 class 是否为 'academicsHead',如果它只是检查文本是否为 BACHELOR(如果不打破循环)。 像这样的东西会起作用:

disciplines = soup.findAll('ul',attrs={'class':re.compile(r'academics+(.)+')})

for i in disciplines:
    if i['class'][0] == 'academicsHead':
        if i.find('li').text.strip() != 'BACHELOR':
            break
    else:
        print(i.find('li').text.strip())