Не удается получить информацию о сайте lxml с помощью Request и BeautifulSoup

Я пытаюсь сделать тестовый проект, который удаляет информацию о конкретном сайте, но безуспешно. Я следил за некоторыми учебными пособиями, которые я нашел, и даже за сообщением в stackoverflow. После всего этого я застрял!
помогите мне сводные братья, я начинающий программист на Python и не могу остановить свои проекты.

дополнительная информация: это сайт лотереи, который я пытался удалить и провести анализ, чтобы получить счастливый номер.

Я следовал этим урокам:
https://towardsdatascience.com/how-to-collect-data-from-any-website-cb8fad9e9ec5

https://beautiful-soup-4.readthedocs.io/en/latest/

Использование BeautifulSoup для поиска всех элементов «ul» и «li»

Всем вам моя благодарность!

from bs4 import BeautifulSoup as bs
import requests 
import html5lib
#import urllib3 # another attemp to make  another req in the url ------failed

url = '''https://loterias.caixa.gov.br/Paginas/Mega-Sena.aspx'''

#another try to take results in the <ul> but I have no qualified results  == None
def parse_ul(elem):#https://stackoverflow.com/questions/50338108/using-beautifulsoup-in-order-to-find-all-ul-and-li-elements
    result = {}
    for sub in elem.find_all('li', recursive=False):
        if sub.li is None:
            continue
        data = {k: v for k, v in sub.attrs.items()}
        if sub.ul is not None:
            # recurse down
            data['children'] = parse_ul(sub.ul)
        result[sub.li.get_text(strip=True)] = data
    return result

page = requests.get(url)#taking info from website

print(page.encoding)# == UTF-8

soup = bs(page.content,features = "lxml")#takes all info from the url and organizes it ==Beaultiful soup

numbers = soup.find(id='ulDezenas')#searcher in the content of this specific id// another try: soup.find('ul', {'class': ''})

result =  parse_ul(soup)#try to parse info, but none is found EVEN WITH THE ORIGINAL ONE

print(numbers)#The result is below:
'''<ul class = "numbers megasena" id = "ulDezenas">
<li ng-repeat = "dezena in resultado.listaDezenas ">{{dezena.length &gt; 2 ? dezena.slice(1) : dezena}}</li>
</ul>'''
print(result)# == "{}" nothing found

#with open('''D:\Documents\python\_abretesesame.txt''', 'wb') as fd:
#    for chunk in page.iter_content(chunk_size=128):
#        fd.write(chunk)
# =======printing document(HTML) in file still no success in getting the numbers
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема заключается в том, что контент предоставляется динамически с помощью JavaScript, но вы можете получить информацию по другому URL-адресу:

jsonData = requests.get('https://servicebus2.caixa.gov.br/portaldeloterias/api/megasena/').json()

даст вам следующее JSON:

{'tipoJogo': 'MEGA_SENA', 'numero': 2468, 'nomeMunicipioUFSorteio': 'SÃO PAULO, SP', 'dataApuracao': '02/04/2022', 'valorArrecadado': 158184963.0, 'valorEstimadoProximoConcurso': 3000000.0, 'valorAcumuladoProximoConcurso': 0.0, 'valorAcumuladoConcursoEspecial': 36771176.89, 'valorAcumuladoConcurso_0_5': 33463457.98, 'acumulado': False, 'indicadorConcursoEspecial': 1, 'dezenasSorteadasOrdemSorteio': ['022', '041', '053', '042', '035', '057'], 'listaResultadoEquipeEsportiva': None, 'numeroJogo': 2, 'nomeTimeCoracaoMesSorte': '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', 'tipoPublicacao': 3, 'observacao': '', 'localSorteio': 'ESPAÇO DA SORTE', 'dataProximoConcurso': '06/04/2022', 'numeroConcursoAnterior': 2467, 'numeroConcursoProximo': 2469, 'valorTotalPremioFaixaUm': 0.0, 'numeroConcursoFinal_0_5': 2470, 'listaDezenas': ['022', '035', '041', '042', '053', '057'], 'listaDezenasSegundoSorteio': None, 'listaMunicipioUFGanhadores': [{'posicao': 1, 'ganhadores': 1, 'municipio': 'SANTOS', 'uf': 'SP', 'nomeFatansiaUL': '', 'serie': ''}], 'listaRateioPremio': [{'faixa': 1, 'numeroDeGanhadores': 1, 'valorPremio': 122627171.8, 'descricaoFaixa': '6 acertos'}, {'faixa': 2, 'numeroDeGanhadores': 267, 'valorPremio': 34158.18, 'descricaoFaixa': '5 acertos'}, {'faixa': 3, 'numeroDeGanhadores': 20734, 'valorPremio': 628.38, 'descricaoFaixa': '4 acertos'}], 'id': None, 'ultimoConcurso': True, 'exibirDetalhamentoPorCidade': True, 'premiacaoContingencia': None}

Просто извлеките dezenasSorteadasOrdemSorteio и введите list comprehension:

[n if len(n) < 2 else n[1:] for n in jsonData['listaDezenas']]

Результат будет:

['22', '35', '41', '42', '53', '57']

Пример

import requests

jsonData = requests.get('https://servicebus2.caixa.gov.br/portaldeloterias/api/megasena/').json()
print([n if len(n) < 2 else n[1:] for n in jsonData['listaDezenas']])

Другие вопросы по теме