Webscraping: вывод отличается от исходных данных - PullRequest
3 голосов
/ 17 апреля 2019

Я пытаюсь создать веб-сайт, показывающий таймер обратного отсчета (цель состоит в том, чтобы в конечном итоге создать диссон-бота, который отображает оставшееся время, оставшееся на таймере по запросу). Однако при печати данных вывод отличается от исходного источника.

Оглядываясь вокруг, я не мог найти решение своей проблемы. Я уверен, что я что-то упустил, но не знаю, что это такое (я делаю это только как личный проект, очень мало предыдущего опыта работы с python)

import requests
from bs4 import BeautifulSoup

result = requests.get("https://www.wowclassiccountdown.com/")
result.status_code
result.headers

c = result.content

soup = BeautifulSoup(c)

samples = soup.find_all("div", "fusion-digit")
samples[0]

data = {}
for div in samples:
    title = div.string.strip()
    data[title] = div.attrs['class']

    # displays data
    print(data)

Я не могу сказать вам, каков ожидаемый результат, поскольку он всегда меняется, но он явно не должен быть равным 0. Может кто-нибудь объяснить это мне?

Ответы [ 2 ]

2 голосов
/ 17 апреля 2019

Веб-сайт, который вы пытаетесь удалить, использует Javascript для обратного отсчета (попробуйте отключить Javascript в своем веб-браузере, и вы увидите, что обратный отсчет установится на 0) . Что, к сожалению, делает невозможным использование библиотеки запросов.

1 голос
/ 17 апреля 2019

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

import requests 
from bs4 import BeautifulSoup as bs
import datetime
from dateutil.relativedelta import relativedelta

r = requests.get('https://www.wowclassiccountdown.com/')
soup = bs(r.content, 'lxml')
end = soup.select_one('#fusion-countdown-1')['data-timer']
ends = datetime.datetime.strptime(end, '%Y-%m-%d-%H-%M-%S')
start = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
starts = datetime.datetime.strptime(start, '%Y-%m-%d-%H-%M-%S')
diff = ends - starts
diff

Для меня также существует разница во времени в 9 часов, которую необходимо учитывать.

...