#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))