Как сделать, чтобы красивый суп захватывал только то, что находится между набором "[:" ":]" на веб-странице? - PullRequest
0 голосов
/ 12 июня 2019

Добрый день! Как заставить Beautifulsoup захватывать только то, что находится между несколькими наборами "[:" и ":]" Пока у меня есть вся страница в моем супе, но, к сожалению, у нее нет тегов.

Как это выглядит до сих пор

Я уже пробовал пару вещей:

  • soup.findAll(text="[")
  • keys = soup.find("span", attrs = {"class": "objectBox objectBox-string"})

    import bs4 as bs
    import urllib.request
    
    source = urllib.request.urlopen("https://login.microsoftonline.com/common/discovery/keys").read()
    soup = bs.BeautifulSoup(source,'lxml')
    
    # ---------------------------------------------
    
    #  prior script that I was playing with trying to tackle this issue
    
    import requests
    import urllib.request
    import time
    from bs4 import BeautifulSoup
    
    # Set URL to scrape new certs from
    newcerts = "https://login.microsoftonline.com/common/discovery/keys"
    
    # Connect to the URL
    response = requests.get(newcerts)
    
    # Parse HTML and save to BeautifulSoup Object
    soup = BeautifulSoup(response.text, "html.parser")
    
    keys = soup.find("span", attrs = {"class": "objectBox objectBox-string"})
    

Конечной целью является получение открытых ключей PKI с веб-сайта Azure по адресу https://login.microsoftonline.com/common/discovery/keys

Ответы [ 2 ]

1 голос
/ 12 июня 2019

Не уверен, что это то, что вы хотели захватить. Попробуйте скрипт ниже:

import json
import requests

url = 'https://login.microsoftonline.com/common/discovery/keys'

res = requests.get(url)
jsonobject = json.loads(res.content)
for item in jsonobject['keys']:
    print(item['x5c'])
0 голосов
/ 12 июня 2019

Данные, которые вы получаете по этому URL, уже структурированы в формате Json или python dict.Я получаю эти данные с запросами и преобразую их из строки в формат dict с помощью ast.

Позвольте мне показать пример:

import requests, ast

# get the response data
response = requests.get("https://login.microsoftonline.com/common/discovery/keys")

#convert from string to dict with ast
my_dict = ast.literal_eval(response.text)

#see here the output info in your dict
print(my_dict)
#check that it's a dict 
print(type(my_dict))

с этого момента вы можете получить доступ к каждому значению с помощьюнемного знаний о диктантах в питоне.

...