Получить отдельный текст в одной строке BS4 - PullRequest
0 голосов
/ 07 октября 2018

Используя красивый суп, как я могу получить названия команд и очки в разных списках из следующего списка:

[<div class="name">Man. City<span class="record">19 pts</span></div>,
 <div class="name">Liverpool<span class="record">19 pts</span></div>,
 <div class="name">Chelsea<span class="record">17 pts</span></div>,
 <div class="name">Tottenham<span class="record">18 pts</span></div>,
 <div class="name">Arsenal<span class="record">18 pts</span></div>,
 <div class="name">Man. United<span class="record">13 pts</span></div>,
 <div class="name">Bournemouth<span class="record">16 pts</span></div>,
 <div class="name">Leicester City<span class="record">12 pts</span></div>,
 <div class="name">Wolverhampton<span class="record">15 pts</span></div>,
 <div class="name">Watford<span class="record">13 pts</span></div>,
 <div class="name">Everton<span class="record">12 pts</span></div>,
 <div class="name">West Ham<span class="record">7 pts</span></div>,
 <div class="name">Crystal Palace<span class="record">7 pts</span></div>,
 <div class="name">Brighton<span class="record">8 pts</span></div>,
 <div class="name">Southampton<span class="record">5 pts</span></div>,
 <div class="name">Newcastle<span class="record">2 pts</span></div>,
 <div class="name">Burnley<span class="record">8 pts</span></div>,
 <div class="name">Fulham<span class="record">5 pts</span></div>,
 <div class="name">Huddersfield<span class="record">3 pts</span></div>,
 <div class="name">Cardiff City<span class="record">2 pts</span></div>]

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Вы можете разделить очки и названия команд следующим образом:

teams = []
s = bs(html)
for i in s.findAll("div"):
    teams.append(''.join(i.text))

point = []
name = []

for team in teams:
    count = 0
    for char in team:
        if (ord(char) >= 48) & (ord(char) <= 59):
            point.append(team[count:])
            name.append(team[:count])
            break
        count = count + 1

print(point)
print(name)

Для Выходов это выглядит так:

['19 pts', '19 баллов ',' 17 баллов ',' 18 баллов ',' 18 баллов ',' 13 баллов ',' 16 баллов ',' 12 баллов ',' 15 баллов ',' 13 баллов ',' 12 баллов ','7 баллов ',' 7 баллов ',' 8 баллов ',' 5 баллов ',' 2 балла ',' 8 баллов ',' 5 баллов ',' 3 балла ',' 2 балла ']

['Мужчина.Сити »,« Ливерпуль »,« Челси »,« Тоттенхэм »,« Арсенал »,« Человек.Юнайтед »,« Борнмут »,« Лестер Сити »,« Вулверхэмптон »,« Уотфорд »,« Эвертон »,« Вест Хэм »,« Кристал Пэлас »,« Брайтон »,« Саутгемптон »,« Ньюкасл »,« Бернли »,«Фулхэм», «Хаддерсфилд», «Кардифф Сити»]

0 голосов
/ 07 октября 2018

Я думаю, я просто отвечу на другой вопрос, кстати, вы можете сделать что-то вроде этого ...

import requests
from bs4 import BeautifulSoup
r = requests.get('https://projects.fivethirtyeight.com/soccer-predictions/premier-league/')
soup = BeautifulSoup(r.content, 'html.parser')
table = soup.find_all('table', attrs={'class':'forecast-table'})
for i in table:
    tr = i.find_all('tr')
    for x in tr:
        try:
            name = x.find('div', attrs={'class':'name'})
            pts = x.find('span', attrs={'class':'record'})
            print('Name:', name.next, 'Pts:', pts.next)
        except:
            pass

Вывод:

Name: Man. City Pts: 19 pts
Name: Liverpool Pts: 19 pts
Name: Chelsea Pts: 20 pts
Name: Tottenham Pts: 18 pts
Name: Arsenal Pts: 18 pts
Name: Man. United Pts: 13 pts
Name: Bournemouth Pts: 16 pts
Name: Leicester City Pts: 12 pts
Name: Wolverhampton Pts: 15 pts
Name: Watford Pts: 13 pts
Name: Everton Pts: 12 pts
Name: West Ham Pts: 7 pts
Name: Crystal Palace Pts: 7 pts
Name: Brighton Pts: 8 pts
Name: Southampton Pts: 5 pts
Name: Newcastle Pts: 2 pts
Name: Fulham Pts: 5 pts
Name: Burnley Pts: 8 pts
Name: Huddersfield Pts: 3 pts
Name: Cardiff City Pts: 2 pts
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...