Мой код обращается к странице, где каждая строка может иметь или не иметь раскрывающийся список с дополнительной информацией.
У меня есть оператор try и exclude, чтобы проверить это.
Прекрасно работает в строке 1, но не в строке 2?
import requests
from bs4 import BeautifulSoup as bs
import re
import pandas as pd
gg=[]
r = requests.get('https://library.iaslc.org/conference-program?product_id=24&author=&category=&date=&session_type=&session=&presentation=&keyword=&available=&cme=&page=2')
soup = bs(r.text, 'lxml')
sessions = soup.select('#accordin > ul > li')
for session in sessions:
jj=(session.select_one('h4').text)
print(jj)
sub_session = session.select('.sub_accordin_presentation')
try:
if sub_session:
kk=([re.sub(r'[\n\s]+', ' ', i.text) for i in sub_session])
print(kk)
except:
kk=' '
dict={"Title":jj,"Sub":kk}
gg.append(dict)
df=pd.DataFrame(gg)
df.to_csv('test2.csv')
Прекрасный ! Сделано тоже очень аккуратно!
Кстати, можно ли узнать автора/время подсессии? в своей колонке?
@VoidS Да, просто добавьте в словарь еще один ключ. Не забудьте также добавить значения
"None"
с новыми ключами, если подраздел не существует.Красиво, понял. В вашем примере вы сделали - Sub": sub_session.h4.get_text, где h4 - это имя тега. Мой вопрос: всегда ли это должно быть имя тега? Я спрашиваю, потому что что, если есть несколько тегов с одним и тем же именем. Будет ли класс имя также работает?
@VoidS Это всего лишь одна из форм выбора тега. Вы можете использовать
.find
или.select_one
. Зависит от вас.