bs4 очищающий питон получает содержимое до определенного имени класса - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу наскрести этот сайт https://www.eduvision.edu.pk/institutions-detail.php?city=51I&institute=5_allama-iqbal-open-university-islamabad и я хочу только данные бакалавра в этом URL, который находится под именем класса = 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)

1 Ответ

0 голосов
/ 05 сентября 2018

Мы можем проверить, является ли класс «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())
...