我试图在一个特定的无序列表中捕获3个列表(li)项。使用findALL函数可以获取所需的内容。但是,尽管返回的列表包含3 li,但是返回的findALL列表中的所有内容都被视为1个元素。
我尝试使用findChild函数,它看到7个元素。我要尝试做的就是检索链接,以便可以使用findALL或findChild或其他任何方式检索它们的内容以及有序列表中包含的文本
这最初是我所做的:
focus=soup.findAll('ul',{'class':'sub-menu'})
#output
#[<ul class="sub-menu">
#<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
#item-20588" id="menu-item-20588"><a href="http://www.air-
#shows.org.uk/2018/06/uk-airshow-calendar-2019/">UK Airshow Calendar
#2019</a></li>
#<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
#item-22412" id="menu-item-22412"><a href="http://www.air-
#shows.org.uk/2018/07/european-airshow-calendar-2019/">European Airshow
#Calendar 2019</a></li>
#<li class="menu-item menu-item-type-taxonomy menu-item-object-category
#menu-item-18245" id="menu-item-18245"><a href="http://www.air-
#shows.org.uk/category/display-team-schedule/">Latest Display Team
#Dates</a></li>
#</ul>]
列表的长度为1。但是,使用findChild可以得到以下信息:
for i in soup.findChild('ul',{'class':'sub-menu'}):
print (i)
print('==='*10)
#output
==============================
#<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
#item-20588" id="menu-item-20588"><a href="http://www.air-
#shows.org.uk/2018/06/uk-airshow-calendar-2019/">UK Airshow Calendar
#2019</a></li>
==============================
==============================
#<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
#item-22412" id="menu-item-22412"><a href="http://www.air-
#shows.org.uk/2018/07/european-airshow-calendar-2019/">European Airshow
#Calendar 2019</a></li>
==============================
==============================
#<li class="menu-item menu-item-type-taxonomy menu-item-object-category
#menu-item-18245" id="menu-item-18245"><a href="http://www.air-
#shows.org.uk/category/display-team-schedule/">Latest Display Team
#Dates</a></li>
==============================
我所希望的是能够获得href中的网址以及这3个有序列表中的文本。
我正在寻找类似这样的东西:
www.air-shows.org.uk/2018/07/european-airshow-calendar-2019
UK Airshow Calendar 2019
www.air-shows.org.uk/2018/07/european-airshow-calendar-2019
European Airshow Calendar 2019
答案 0 :(得分:2)
你在这里。
from bs4 import BeautifulSoup
html='''
<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
item-20588" id="menu-item-20588"><a href="http://www.air-
shows.org.uk/2018/06/uk-airshow-calendar-2019/">UK Airshow Calendar 2019</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-post menu-
item-22412" id="menu-item-22412"><a href="http://www.air-
shows.org.uk/2018/07/european-airshow-calendar-2019/">European Airshow Calendar 2019</a></li>
<li class="menu-item menu-item-type-taxonomy menu-item-object-category
menu-item-18245" id="menu-item-18245"><a href="http://www.air-
shows.org.uk/category/display-team-schedule/">Latest Display Team Dates</a></li>'''
soup=BeautifulSoup(html,"html.parser")
for item in soup.find_all('a',href=True):
print("link : " + item['href'])
print("text : " + item.text)
答案 1 :(得分:1)
您还可以使用以下内容(我假设在实际页面中,文本或hrefs中没有\ n。这也假定从[]
生成的长度相等的列表)
.sub-menu li,.sub-menu a