搜寻网站

时间:2019-04-06 15:06:36

标签: python html web-scraping beautifulsoup

我有这个:

 from bs4 import BeautifulSoup
 import requests

 page = requests.get("https://www.marca.com/futbol/primera/equipos.html")
 soup = BeautifulSoup(page.content, 'html.parser')
 equipos = soup.findAll('li', attrs={'id':'nombreEquipo'})

 aux = []
 for equipo in equipos:
     aux.append(equipo)

如果我打印(aux [0]),我会得到:      ,            比利亚雷亚尔            

Entrenador:
     
哈维尔·卡雷亚
     
Jugadores:
                       
  • 1 塞尔吉奥·阿森霍
  •      
  • 13 AndrésFernández
  •      
  • 25 Mariano Barbosa
  •      ...

    我的问题是我想拿标签:

     <h2 class="cintillo">Villarreal</h2>
    

    和标记:      

  • 1 塞尔吉奥·阿森霍
  • 并将其放入bataBase 我该怎么办? 谢谢

    2 个答案:

    答案 0 :(得分:0)

    您可以像这样从<h2 class="cintillo">中提取第一个equipo元素:

    h2 = str(equipo.find('h2', {'class':'cintillo'}))
    

    如果只需要内部HTML(不带任何标签),请使用:

    h2 = equipo.find('h2', {'class':'cintillo'}).text
    

    您可以像这样从<span class="dorsal-jugador">中提取所有equipo元素:

    jugadores = equipo.find_all('span', {'class':'dorsal-jugador'})
    

    然后将h2jugadores附加到多维列表。

    完整代码:

    from bs4 import BeautifulSoup
    import requests
    
    page = requests.get("https://www.marca.com/futbol/primera/equipos.html")
    soup = BeautifulSoup(page.content, 'html.parser')
    equipos = soup.findAll('li', attrs={'id':'nombreEquipo'})
    
    aux = []
    for equipo in equipos:
            h2 = equipo.find('h2', {'class':'cintillo'}).text
            jugadores = equipo.find_all('span', {'class':'dorsal-jugador'})
            aux.append([h2,[j.text for j in jugadores]])
    
    # format list for printing
    print('\n\n'.join(['--'+i[0]+'--\n' + '\n'.join(i[1])  for i in aux]))
    

    输出样本:

    --Alavés--
    Fernando Pacheco
    Antonio Sivera
    Álex Domínguez
    Carlos Vigaray
    ...
    

    演示:https://repl.it/@glhr/55550385

    答案 1 :(得分:0)

    您可以创建一个团队名称字典作为键,并以[entrenador,玩家]列表作为值

    import requests
    from bs4 import BeautifulSoup as bs
    
    r = requests.get('https://www.marca.com/futbol/primera/equipos.html')
    soup = bs(r.content, 'lxml')
    
    teams = {}
    
    for team in soup.select('[id=nombreEquipo]'):
        team_name = team.select_one('.cintillo').text 
        entrenador = team.select_one('dd').text
        players = [item.text for item in team.select('.dorsal-jugador')]
        teams[team_name] = {entrenador : players}
    print(teams)