【问题标题】:Webscraping: output different to original dataWebscraping:输出与原始数据不同
【发布时间】:2019-09-07 12:03:43
【问题描述】:

我正在尝试抓取一个显示倒数计时器的网站(目标是最终制作一个不和谐的机器人,在请求时显示计时器上剩余的时间)。但是在打印数据时,输出与原始来源不同。

环顾四周,我找不到解决问题的方法。我确定我错过了一些东西,但对它是什么一无所知(我只是将其作为个人项目进行,以前很少有 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。有人可以向我解释一下吗?

【问题讨论】:

    标签: python html web-scraping beautifulsoup python-requests


    【解决方案1】:

    您尝试抓取的网站正在使用 Javascript 进行倒计时(尝试在您的网络浏览器中禁用 Javascript,您会看到倒计时将自己设置为 0)时间>。遗憾的是,这使得使用请求库无法抓取

    【讨论】:

      【解决方案2】:

      你可以自己计算。倒计时的目标结束日期时间在请求的响应中。您可以获取当前日期时间并有所作为。我没有在下面添加小时、分钟,但从几秒钟开始就很容易了

      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 小时的时差需要考虑。

      【讨论】:

      • 这样做仍然没有给我完全相同的结果,但我很满意。当涉及到 javascript 时它变得更加复杂,没有指望这一点,所以感谢编辑:哎呀忘了添加分钟,它现在完美运行哈哈
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 2021-03-31
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多