for 循环将每个新元素追加到列表中,但'n'代替逗号显示



编辑:感谢大家提供的非常有用的答案。事实上,正如对这篇文章的回应所表明的那样,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

正如你在下面看到的,我已经包含了数百个结果中的前三个,循环成功地打印了学校的名称和成绩信息(它从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_name(

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

(我已经在HTML之外的较小元素列表上尝试过这个版本,因此不需要Selenium try/except代码,它很有效。但这仍然没有让我更接近于在带有学校名称的网页上部署这个代码。(

发生了什么事?为什么这个代码不将每个学校名称作为列表中的单个项目附加到list_of_names中?

感谢您的帮助!

变量"school_list"不是列表,而是字符串。所以本质上for循环只运行一次。"\n"是"新行"的转义序列,这就是您在打印语句中获得输出的原因

如果您希望可变的"list_of_name"具有打印语句中显示的元素,则可以用替换for循环

for school in school_list.split('n'):

最新更新