Питон, Красивый суп, <br>тег - PullRequest
0 голосов
/ 04 марта 2019

Итак, я просмотрел переполнение стека, но не могу найти ответ на свою проблему.Как получить текст, конкретный текст, после тега
?

Это мой код:

product_review_container = container.findAll("span",{"class":"search_review_summary"})
for product_review in product_review_container:
    prr = product_review.get('data-tooltip-html')
    print(prr)

Это вывод:

Very Positive<br>86% of the 1,013 user reviews for this game are positive.

Я хочу в этой строке только 86%, а также отдельно только 1,013.Так что только цифры.Однако это не int, поэтому я не знаю, что делать.

Вот откуда взялся текст:

   [<span class="search_review_summary positive" data-tooltip-html="Very Positive&lt;br&gt;86% of the 1,013 user reviews for this game are positive.">
</span>]

Вот ссылка, откуда я получаю информацию: https://store.steampowered.com/search/?specials=1&page=1

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Существует нерегулярный способ сделать это;по общему признанию несколько запутанный, но все еще забавный:

Сначала мы заимствуем (и изменим) эту замечательную функцию:

def split_and_keep(s, sep):
         if not s: return [''] # consistent with string.split()
         p=chr(ord(max(s))+1)
         return s.replace(sep, sep+p).split(p)

Затем мы пройдем некоторые стандартные шаги:

html = """
  [<span class="search_review_summary positive" data-tooltip-html="Very    Positive&lt;br&gt;86% of the 1,013 user reviews for this game are positive."></span>]
  """

from bs4 import BeautifulSoup as bs4
soup = bs4(html, 'html.parser')
info = soup.select('span')[0].get("data-tooltip-html")
print(info)

Вывод на данный момент:

Very Positive<br>86% of the 1,013 user reviews for this game are positive.

Далее мы идем:

data = ''.join(c for c in info if (c.isdigit()) or c == '%')
print(data)

Вывод немного лучше:

86%1013

Почти там;теперь число участников :

split_and_keep(data, '%')

Конечный результат:

['86%', '1013']
0 голосов
/ 04 марта 2019

Здесь необходимо использовать регулярное выражение!

import re

string = 'Very Positive<br>86% of the 1,013 user reviews for this game are positive.'
a = re.findall('(\d+%)|(\d+,\d+)',string)
print(a)

output: [('86%', ''), ('', '1,013')]
#Then a[0][0] will be 86% and a[1][1] will be 1,013

Где \ d - любой символ числа в строке, а + - это как минимум 1 или более цифр.

Есливам нужно более конкретное регулярное выражение, чем вы можете попробовать в https://regex101.com

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