因此,我一直试图一个一个地刮取一个值,这意味着我使用了一个for循环来刮取一个选定的类,然后尝试逐项打印出一个值。 HTML正在寻找:
我想做的是以下代码:
select_tags = bs4.find_all('select', {'autocomplete': 'off'})
test = []
for select_tag in select_tags:
if select_tag.select("option.disabled.ReminderRevealButton"):
continue
else:
print(select_tag)
test.append(select_tag.text)
我得到的输出是:
['\nPlease select number\n\n (Number 1) \n\n (Number 2) \n\n (Number 3) \n\n (Number 4) \n\n (Number 5) \n\n (Number 6) \n\n (Number 7) \n\n (Number 7) \n\n (Number 8) \n\n (Number 9) \n\n (Number 10) \n\n (Number 11) \n']}
确实可以打印出名称。但是,问题在于它全部打印为一行,而不是(HTML代码中的数字)一张一张地打印出来。
我需要做些什么才能解决,这样才能一一打印出数字1,2,3,4,5 ..
答案 0 :(得分:1)
它打印一行,因为您正在循环select
标签而不是option
标签。 :not
不被BeautifulSoup支持。
select_tags = bs4.find_all('select', {'autocomplete': 'off'})
test = []
for select_tag in select_tags:
for option in select_tag.select('option'):
# if set(['ReminderRevealButton', 'disabled']) == set(option.get('class')):
if "disabled ReminderRevealButton" in str(option):
# print(str)
# <option class="disabled ReminderRevealButton"> (Number 1) </option>
continue
else:
print(option.get('class'))
test.append(option.text.strip())
我不使用option['class']
或option.get('class')
,因为它返回类的数组,如果类的长度相同,则可以使用set()
比较其他需要循环。