Теги скрипта синтаксического анализа Python BeautifulSoup - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь проанализировать содержимое тега сценария для извлечения определенных данных.В следующем коде используется действительная учетная запись xbox.

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import requests
import time
from bs4 import BeautifulSoup
import json
import re

email = 'email'
password = 'password'

driver = webdriver.Chrome()

driver.get(r'https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=13&rver=6.7.6643.0&wp=MBI_SSL&wreply=https:%2f%2faccount.xbox.com%2fen-us%2faccountcreation%3freturnUrl%3dhttps:%252f%252fwww.xbox.com:443%252fen-US%252f%26pcexp%3dtrue%26uictx%3dme%26rtc%3d1&lc=1033&id=292543&aadredir=1')
time.sleep(3)
driver.find_element_by_xpath(""" //*[@id="i0116"] """).send_keys(email)
time.sleep(5)
driver.find_element_by_xpath(""" //*[@id="idSIButton9"] """).click()
time.sleep(5)
driver.find_element_by_xpath(""" //*[@id="i0118"] """).send_keys(password)
time.sleep(5)
driver.find_element_by_xpath(""" //*[@id="idSIButton9"] """).click()
time.sleep(5)
driver.get(r'https://account.xbox.com/en-us/Friends?xr=mebarnav&rtc=1')
print('Grabbing Cookies')
time.sleep(5)


headers = {'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}

s = requests.Session()
s.headers.update(headers)

for cookie in driver.get_cookies():
    c = {cookie['name'] : cookie['value']}
    s.cookies.update(c)

#s.get('https://account.xbox.com/en-us/Friends?xr=mebarnav&rtc=1')


soup = BeautifulSoup(s.get('https://account.xbox.com/en-us/Profile?xr=mebarnav&activetab=tertiary:friendsTab&rtc=1').content, 'html.parser')

text = str(soup.find_all('script')[13])

value = re.findall(r'DisplayName', text)

print(value)

Я пытаюсь получить доступ к определенным данным, которые появляются после каждого «DisplayName», но мне не удается это сделать, поскольку вместо этого я просто получаю «DisplayName»его стоимости.Если вам нужна лучшая идея, вы можете напечатать переменную «text» и найти «DisplayName».Спасибо всем, кто ответил заранее.

1 Ответ

0 голосов
/ 21 ноября 2018

Таким образом, причина, по которой вы ничего не получаете, заключается в том, что вы говорите re, чтобы найти точную фразу.Вы не говорите, чтобы получить больше персонажей и где остановиться.В приведенном ниже примере я использую одинарные кавычки, но код можно настроить для двойных кавычек.Затем я re найду DisplayName, но .* найдет символы позади него, но остановится на одинарной кавычке '.Затем после этого он просто заменяет то, что вам не нужно.

import re

url = "DisplayName='PoppaBear4'"

info = re.findall(r"DisplayName=.*'", url)
print(str(info).replace("DisplayName='",'').replace("'","").replace('["','').replace('"]',''))
...