Для l oop каждый новый элемент добавляется в список, но вместо запятых появляется '\ n' - PullRequest
0 голосов
/ 08 мая 2020

EDIT: Спасибо всем за очень полезные ответы. В самом деле, как было сказано в ответах на этот пост, в school_list на самом деле не было сотен пунктов списка, а всего четыре. Это не помешало school.text захватить все сотни мест в тех четырех элементах, которые включали текст названия школы.

Исходное сообщение: Я пытаюсь перебрать каждое название школы на веб-странице, содержащей сотни названий школ, и добавить название каждой школы в список под названием list_of_names . Я использую библиотеку Python Selenium для доступа к веб-странице и нахожу элемент HTML, содержащий список названий школ.

driver.get('https://www.illinoisreportcard.com/SearchResult.aspx?SearchText=$high%20school$&type=NAME#High-schools')
school_list = driver.find_elements_by_class_name('container.col-sm-12.col-md-12')

list_of_names = []

for school in school_list:
    try:
        name = school.text    
        print(name)   
        list_of_names.append(name)

    except selenium.common.exceptions.NoSuchElementException:
        pass

Как вы можете видеть ниже, я включил Первые три из сотен результатов l oop успешно печатает названия школ и информацию об оценках (которую он получил из каждого указанного элемента кода HTML).

ALLEN JUNIOR HIGH SCHOOL
(4 - 8)
LA MOILLE CUSD 303
(BUREAU)
LA MOILLE
CENTRALIA JR HIGH SCHOOL
(4 - 8)

проблема в том, что эта строка кода - list_of_names.append (name) - это не , добавляющая каждое из названий школ в качестве элемента списка, окруженного запятыми в качестве разделителей, как я бы ожидали. Вместо этого он добавляет название каждой школы к одному элементу списка, который просто становится все длиннее и длиннее. И вместо запятых ставится '\ n'.

Ниже представлена ​​первая строка вывода команды print (list_of_names) :

['ALLEN JUNIOR HIGH SCHOOL\n(4 - 8)\nLA MOILLE CUSD 303\n(BUREAU)\nLA MOILLE\nCENTRALIA JR HIGH SCHOOL\n(4 - 8)\nCENTRALIA SD 135\n(MARION)\

(Я пробовал версии этого для меньших списков элементов за пределами HTML и, следовательно, без необходимости использования кода Selenium try / except в самом низу здесь, и это сработало. Но это все еще не приближает меня к возможности развернуть этот код на веб-странице с названиями школ .)

Что происходит? Почему этот код не добавляет название каждой школы к list_of_names как отдельные элементы в списке?

Благодарю за любую помощь!

1 Ответ

0 голосов
/ 08 мая 2020

Переменная "school_list" - это не список, а строка. По сути, for l oop запускается только один раз. «\ n» - это escape-последовательность для «новой строки», поэтому вы получаете вывод в операторе печати

Если вы хотите, чтобы переменный «list_of_names» имел элементы, как показано в вашем операторе печати, вы можно заменить для l oop на

for school in school_list.split('\n'):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...