Извлечение данных между BR Tag с BeautifulSoup - PullRequest
4 голосов
/ 04 февраля 2020

как мне извлечь INFO1 и INFO2 из следующего html кода с Beautifulsoup?

веб-сайт: https://swisswrestling.ch/wrestlers?id=91

Я также пытаюсь извлечь данные для боев, но это работает для меня с помощью bs4.

    <tr>
<td>
<span class="text-danger font-weight-bold"><br/>
<b>Notice</b>:  Undefined index: HTTP_ACCEPT_LANGUAGE in <b>/srv/www/chroot/site05/web/app/bootstrap.php</b> on line <b>159</b><br/>
wrestlers_club</span> INFO1<br/>
<span class="text-danger font-weight-bold">wrestlers_birthday</span> INFO2<br/><br/>
<span class="text-danger font-weight-bold">wrestlers_licence_number</span> wrestlers_licence_no_licence<br/>
<span class="text-danger font-weight-bold">wrestlers_club_dl</span> wrestlers_licence_no_dl                                                
                    </td>

Мой код выглядит сейчас:

info = soup.find('div', id='content')
club = info.findAll('span')
for clubs in club:
 test = clubs.text
 print(test)

И результат:

Уведомление :

 Undefined index: HTTP_ACCEPT_LANGUAGE in /srv/www/chroot/site05/web/app/bootstrap.php on line 159

wrestlers_club

wrestlers_birthday

wrestlers_licence_number

1030 * wrestlers_club_dl 1032 * Как я могу извлечь данные за wreslters_club (INFO1) и wrestlers_birthday (INFO2)?

Спасибо за ваша помощь!

Ответы [ 3 ]

2 голосов
/ 04 февраля 2020

Используйте следующие Css selector и find_next_sibling(text=True)

    import requests
    from bs4 import BeautifulSoup

    res=requests.get("https://swisswrestling.ch/wrestlers?id=91")
    soup=BeautifulSoup(res.text,'lxml')
    print(soup.select_one('span.text-danger:nth-of-type(1)').find_next_sibling(text=True).strip())
    print(soup.select_one('span.text-danger:nth-of-type(2)').find_next_sibling(text=True).strip())

Выход :

RC Willisau Lions
29 (1990)
1 голос
/ 04 февраля 2020

Вы можете попробовать это, он дал мне запрошенный результат:

     info = soup.find('div', id='content')
     club = info.select('#content-element-94 > div.row.border.mx-0 > div > table > tbody > tr > td:nth-child(1)')
     for clubs in club:
       test = clubs.text
       print(test)

вывод:

       wrestlers_club RC Willisau Lions
       wrestlers_birthday 29 (1990)
       wrestlers_licence_number wrestlers_licence_no_licence
       wrestlers_club_dl wrestlers_licence_no_dl   
1 голос
/ 04 февраля 2020

Это работает для вас? Я использовал ссылку, которую вы разместили, и она извлекает необходимую информацию.

import requests
import re
import lxml
import ssl
from bs4 import BeautifulSoup as bs
ssl._create_default_https_context = ssl._create_unverified_context
url = 'https://swisswrestling.ch/wrestlers?id=91'

strx = requests.get(url).text
regex = r"(wrestlers_club|wrestlers_birthday) (.*)\n"
soup = bs(strx, 'lxml')


for i in soup.find_all('td'):
    print (*re.findall(regex,i.text), sep="\n")

Вывод:

('wrestlers_club', 'RC Willisau Lions')
('wrestlers_birthday', '29 (1990)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...