Соскоб веб-сайт - PullRequest
       13

Соскоб веб-сайт

0 голосов
/ 06 апреля 2019

У меня есть это:

 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]), я получаю это: , Villarreal

Entrenador: Хавьер Каллеха Югадорес: 1 Серхио Асеньо 13 Андрес Фернандес 25 МарианоБарбоза ...

И моя проблема в том, что я хочу взять тег:

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

И тег:

1 Серхио Асеньо

И положить его в базу данных. Как я могу это принять?Спасибо

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

Вы можете создать словарь названий команд в качестве ключей со списками [entrenador, Players] в качестве значений

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)
0 голосов
/ 07 апреля 2019

Вы можете извлечь первый <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'})

Затем добавьте h2 и jugadores к многомерному списку.

Полный код:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...