Как извлечь некоторые конкретные строки из списка и сохранить их в переменных в beautifulsoup? - PullRequest
0 голосов
/ 17 февраля 2019

Я хотел бы извлечь определенные строки из списка из нескольких элементов, содержащих несколько тегов (и строк).И сохраните их в переменных.

from bs4 import BeautifulSoup
from requests_html import HTMLSession
session = HTMLSession()
r = session.get('https://www.khanacademy.org/profile/DFletcher1990/')
r.html.render(sleep=5)

soup=BeautifulSoup(r.html.html,'html.parser')

user_socio_table=soup.find_all('div', class_='discussion-stat')
print(user_socio_table)

Вот предполагаемый вывод print(user_socio_table):

[<div class="discussion-stat">
            4<span class="discussion-light"> questions</span>
</div>, <div class="discussion-stat">
            444<span class="discussion-light"> votes</span>
</div>, <div class="discussion-stat">
            718<span class="discussion-light"> answers</span>
</div>, <div class="discussion-stat">
            15<span class="discussion-light"> flags raised</span>
</div>, <div class="discussion-stat">
            10<span class="discussion-light"> project help requests</span>
</div>, <div class="discussion-stat">
            38<span class="discussion-light"> project help replies</span>
</div>, <div class="discussion-stat">
            208<span class="discussion-light"> comments</span>
</div>, <div class="discussion-stat">
            11<span class="discussion-light"> tips and thanks</span>
</div>]
  • Я хотел бы сохранить 4 в переменной с именем questions,
  • Я хотел бы сохранить 444 в переменной с именем votes,
  • Я хотел бы сохранить 718 в переменной с именем answers,
  • Я хотел бы сохранить 15 в переменной с именем flags,
  • Я хотел бы сохранить 10 в переменной с именем help_requests,
  • Я хотел быдля хранения 38 в переменной с именем help_replies,
  • Я хотел бы сохранить 208 в переменной с именем comments,
  • Я хотел бы сохранить 11 впеременная с именем tips_thanks.

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

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете получить значения по одному и добавить их в массив json

data = {}
for gettext in user_socio_table:
   category = gettext.find('span')
   category_text = category.text.strip()  ## get text in span
   number = category.previousSibling.strip() ## get value before span tag
   data[category_text] = number ## add it


print(data)

ВЫХОД:

{'questions': '4', 'votes': '444', 'answers': '718', 'flags raised': '15', 'project help requests': '10', 'project help replies': '38', 'comments': '208', 'tips and thanks': '11'}

Вы можете получить значение со специальным единицей

print(data['questions'])

ВЫХОД:

4
...