Примечание: основные объяснения впереди.Если вы знаете это, перейдите непосредственно к списку возможностей
Чтобы преобразовать код в цикл, вам нужно посмотреть на ту часть, которая остается неизменной, и часть, которая меняется.В вашем случае вы найдете div
, получите текст и добавите его в список.
Атрибут class
объектов div
меняется каждый раз, как и список, к которому вы добавляете.Цикл for
работает, имея одну переменную, которой присваиваются разные значения на каждой итерации, а затем выполняется код внутри.
Мы получаем базовую структуру:
for div_class in <div classes>:
<stuff to do>
Теперь, в <stuff to do>
каждый раз у нас другой список.Нам нужен какой-то способ получить другой список в цикле.Для этого есть несколько возможностей:
- Поместить список в
dict
и использовать поиск элементов zip
списки с <div classes>
и перебирать их
Первые два будут связаны с использованием вложенных циклов, результат будет выглядеть примерно так:
list_1 = []
list_2 = []
list_3 = []
for div_class, the_list in zip(['div_cls1', 'div_cls2', 'div_cls3'], [list_1, list_2, list_3]):
for elem in bsObj.find_all('div', class_=div_class):
the_list.append(elem.get_text())
или
lists = {'div_cls1': [], 'div_cls2': [], 'div_cls3': []}
for div_class in lists: # note: keys MUST match the class of div elements
for elem in bsObj.find_all('div', class_=div_class):
lists[div_class].append(elem.get_text)
Конечно, внутренний цикл может бытьзаменен на понимание списка (работает для подхода dict
): lists[div_class] = [elem.get_text() for elem in bsObj.find_all('div', class_=div_class)]