Как я могу получить конкретную словосочетание из супа слова с красивым супом? - PullRequest
0 голосов
/ 25 апреля 2018

Я уже отсортировал свой код с BeautifulSoup и получил следующее:

<bound method Tag.prettify of <script type="text/javascript">var LifeTimeStats = [{"Key":"Top 3","Value":"31"},{"Key":"Top 5s","Value":"36"},{"Key":"Top 3s","Value":"13"},{"Key":"Top 6s","Value":"27"},{"Key":"Top 12s","Value":"76"},{"Key":"Top 25s","Value":"58"},{"Key":"Score","Value":"99,788"},{"Key":"Matches Played","Value":"502"},{"Key":"Wins","Value":"9"},{"Key":"Win%","Value":"2%"},{"Key":"Kills","Value":"730"},{"Key":"K/d","Value":"1.48"}];</script>>

Я пытаюсь получить конкретное значение "730" из этого:

{"Key":"Kills","Value":"730"}

Поскольку нет HTML-тегов, по которым я могу отсортировать.Я понятия не имею, как получить это конкретное значение.У вас есть идеи?

Может быть, есть другое решение, чтобы добраться туда ... Вот полный код:

#----WEB INPUT BASIC----

    #import bs4
    from urllib.request import urlopen as uReq
    from urllib.request import Request, urlopen
    from  bs4 import BeautifulSoup as soup


    #setting my url
    url = 'https://fortnitetracker.com/profile/psn/Rehgum'

    #making my https page work
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

    web_byte = urlopen(req).read()
    webpage = web_byte.decode('utf-8')
    urlopen(req).close()

    #html parsing
    page_soup = soup(webpage, "html.parser")

    lifetime = page_soup.findAll("script",{"type":"text/javascript"})

    stats = lifetime[3]

    specific = stats.prettify

    value = specific.text

    #from here there is just code to put that value in a .txt file

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Я наконец-то все заработал!То, что произвело мои ошибки, было "def loop ():" part.

Вот окончательный рабочий код:

def loop():
    from urllib.request import Request, urlopen
    from  bs4 import BeautifulSoup as soup
    import json
    import re
    import time


    #setting my url
    url = 'https://fortnitetracker.com/profile/psn/Rehgum'

    #making my https page work
    req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})

    web_byte = urlopen(req).read()
    webpage = web_byte.decode('utf-8')
    urlopen(req).close()

    #html parsing
    page_soup = soup(webpage, "html.parser")

    lifetime = page_soup.findAll("script",{"type":"text/javascript"})

    stats = lifetime[3]

    stats_var = re.findall(r'var.*?=\s*(.*?);', stats.text)[0]

    vals = json.loads(stats_var)

    for val in vals:
        if val['Key'] == 'Kills':
            num_kills = val['Value']
            break

    print('Num kills = {}'.format(num_kills))

    with open('lifetime_wins.txt', 'w') as fd:
        fd.write(str(num_kills))

    time.sleep(30)

    loop()


for i in range(1,2):
        loop()

while i<1:
    print ("Ende")

Большое "Спасибо" @kazbeel.Вы спасли мой день!+ Респ

0 голосов
/ 25 апреля 2018

Это просто представление о том, что вы можете сделать:

  1. Извлечение кода JS в переменную Python.
  2. Создание операции регулярного выражения, извлекающей значение переменной.
  3. «JSONify» значение такой переменной.
  4. Извлечение необходимых данных.

В качестве извлечения:

a = '''var LifeTimeStats = [{"Key":"Top 3","Value":"31"},{"Key":"Top 5s","Value":"36"},{"Key":"Top 3s","Value":"13"},{"Key":"Top 6s","Value":"27"},{"Key":"Top 12s","Value":"76"},{"Key":"Top 25s","Value":"58"},{"Key":"Score","Value":"99,788"},{"Key":"Matches Played","Value":"502"},{"Key":"Wins","Value":"9"},{"Key":"Win%","Value":"2%"},{"Key":"Kills","Value":"730"},{"Key":"K/d","Value":"1.48"}];'''

b = re.findall(r'var.*?=\s*(.*?);', a)[0]
c = json.loads(b)

См. фиктивный полный код Я написал.

ОБНОВЛЕНИЕ

После просмотра полного кода ... Это может быть решением для вашегопроблема.

...