BeautifulSoup / Очистка- Python

#selenium #web-scraping #beautifulsoup

#селен #веб-очистка #beautifulsoup

Вопрос:

У меня есть код, который направляет меня на веб-сайт и печатает все заголовки, даты и время для каждого сеанса.

Однако, если вы нажмете на каждую сессию на веб-сайте, появится список подсессий, которые выпадают.

Я хочу напечатать каждый заголовок подсессии.

Вот код, который у меня есть

 from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import time
import requests
driver = webdriver.Chrome()
session=[]

driver.get('https://library.iaslc.org/conference-program?product_id=20amp;author=amp;category=amp;date=amp;session_type=amp;session=amp;presentation=amp;keyword=amp;available=amp;cme=amp;page=1')
time.sleep(3)
page_source = driver.page_source
soup = BeautifulSoup(page_source,'html.parser')
productlist=soup.find_all('div',class_='accordin_title')
for item in productlist:
    title=item.find('h4').text.strip()
    tim=item.find('span',class_='info_red').text.strip()
    dat=item.find('span',class_='info_blue').text.strip()
    dictionary={"Title":title,"Time":tim,"Date":dat}
    session.append(dictionary)
print(session)
 

Комментарии:

1. таким sub_accordin_presentation образом, у него есть детали, но он активируется, когда вы нажимаете на знак плюс, у которого есть класс sign . Вам нужно найти все классы и использовать selenium, чтобы щелкнуть по ним всем, затем получить HTML-страницу.

Ответ №1:

Попробуйте выполнить следующее, чтобы получить требуемый контент.

Чтобы получить заголовок сеанса вместе с заголовками их вложенных сеансов:

 import requests
from bs4 import BeautifulSoup

url = 'https://library.iaslc.org/conference-program?product_id=20amp;author=amp;category=amp;date=amp;session_type=amp;session=amp;presentation=amp;keyword=amp;available=amp;cme=amp;page=1'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
    r = s.get(url)
    soup = BeautifulSoup(r.text,"lxml")
    for items in soup.select("#accordin .accordin_details"):
        session_title = items.find_previous(class_="accordin_title").h4.get_text(strip=True)
        subsession_titles = [item.get_text(strip=True) for item in items.select(".accordin_list h4")]
        print(session_title,subsession_titles)
 

Чтобы получить только заголовки подсессий:

 for item in soup.select("#accordin .accordin_details .accordin_list h4"):
    print(item.get_text(strip=True))