Не могу удалить текст из класса (BeautifulSoup) - PullRequest
0 голосов
/ 21 октября 2018

У меня проблема с получением данных с веб-сайта с лотереей для статистики, я пробовал кучу разных парсеров, но каждый раз, когда он возвращает содержимое "none"

import requests
from bs4 import BeautifulSoup

url = "https://www.opap.gr/lotto-draw-results"
user = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36"}
req = requests.get(url, headers = user)
soup = BeautifulSoup(req.text, "html.parser")
i = 1
while i <= 6:
    for draw_num in soup.findAll("li", {"class": "draw-result-number-{}".format(i)}):
        print(draw_num.content)
        i += 1

кусок HTML-кодас сайта:

<ul class="circles"> <li class="draw-result-number-1">1</li> <li class="draw-result-number-2">2</li> <li class="draw-result-number-3">12</li> <li class="draw-result-number-4">14</li> <li class="draw-result-number-5">20</li> <li class="draw-result-number-6">49</li> <span class="plus_symbol" style="display: inline;">+</span> <li class="highlighted draw-result-number-bonus" style="display: inline-block;">8</li> </ul>

Буду признателен, если вы поможете мне.

Ответы [ 2 ]

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

На первый взгляд, данные не встраиваются в html, а извлекаются из дополнительного вызова API:

https://api.opap.gr/draws/v3.0/5103/last-result-and-active?status=results

Вы можете проанализировать их, чтобы получить выигрышные номера:

import requests
req = requests.get("https://api.opap.gr/draws/v3.0/5103/last-result-and-active?status=results")
data = req.json() 
print(data["last"]["winningNumbers"])

Кажется, что URL-адрес статичен, в JS он динамически создает URL-адрес, а 5103 означает, что это Lotto игр, см. этот файл

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

Вот как selenium может использоваться в вашем случае:

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

options = webdriver.ChromeOptions()
options.add_argument('headless')
capa = DesiredCapabilities.CHROME
capa["pageLoadStrategy"] = "none"
driver = webdriver.Chrome(chrome_options=options, desired_capabilities=capa)
driver.set_window_size(1440,900)
driver.get('https://www.opap.gr/lotto-draw-results')
time.sleep(15) # wait for the website to load in selenium process

plain_text = driver.page_source
soup = BeautifulSoup(plain_text, 'lxml')

Все ваши элементы будут содержаться в супе.

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