获取一项的元素,找到FindALL列表

时间:2019-04-05 12:13:17

标签: python web-scraping beautifulsoup python-requests

我试图在一个特定的无序列表中捕获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

2 个答案:

答案 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