Как извлечь значения из тегов - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь очистить данные шансов с сайта.Пытаясь упростить ситуацию, вот где я сейчас нахожусь:

Я успешно подключаюсь и извлекаю содержимое страниц, поэтому я пропущу предыдущие шаги, чтобы перейти прямо к точке

[...]
page_response = requests.get(page_link, timeout=5)
# parse html
page_content = BeautifulSoup(page_response.content, "html.parser")

rows = []
rows_list = page_content.find_all('tr')

(показывает только первую строку, просто для простоты)

rows_list[1]

возвращает это

<tr><td class="h-text-left"><a class="in-match" href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/"><span><strong>Constantine</strong></span> - <span>MO Bejaia</span></a></td><td class="h-text-center"><a href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/">1:0</a></td><td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td><td class="table-main__odds" data-odd="3.18"></td><td class="table-main__odds" data-odd="4.75"></td><td class="h-text-right h-text-no-wrap">27.01.</td></tr>

выбор тегов

row = rows_list[1].find_all('td')
row

возвращает

[<td class="h-text-left"><a class="in-match" href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/"><span><strong>Constantine</strong></span> - <span>MO Bejaia</span></a></td>,
<td class="h-text-center"><a href="/soccer/algeria/ligue-1/constantine-mo-bejaia/84nzpMc0/">1:0</a></td>,
<td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td>,
<td class="table-main__odds" data-odd="3.18"></td>,
<td class="table-main__odds" data-odd="4.75"></td>,
<td class="h-text-right h-text-no-wrap">27.01.</td>]

Данные, которые мне нужны, находятся здесь, и для всех строк с атрибутом «текст» легко получить

row[0].text
'Constantine - MO Bejaia'

row[1].text
'1:0'

, но для этих других строк я не могу понять, какчтобы получить значения «data-odd»

row[2]
<td class="table-main__odds colored"><span><span><span data-odd="1.73"></span></span></span></td>

row[3]
<td class="table-main__odds" data-odd="3.18"></td>

row[4]
<td class="table-main__odds" data-odd="4.75"></td>

, которые были бы 1.73, 3.18 и 4.75

Спасибо за ваше время

Ответы [ 3 ]

0 голосов
/ 30 января 2019

Эти вещи называются атрибутами тегов.Если моя память хорошо работает, вы можете получить значение data-odd для вашей конкретной строки, выполнив что-то вроде этого:

row[2]['data-odd']
1.73
0 голосов
/ 30 января 2019

Работает как dict.Вы можете использовать

row[x].get('key') 

или

row[x]['key']
0 голосов
/ 30 января 2019

Вы можете получить это как row['your index']['yourtag'] В вашем вопросе:

row[3]['data-odd']
row[4]['data-odd']

Я понимаю, что ваш row[2] 'data-odd находится в теге span.так что вы получите промежуток, а затем проанализируйте data-odd как:

    for a in row[2].findAll('span')[1] : ## [1] means getting the second span tag
        print a['data-odd']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...