【问题标题】:Python - scrapingPython - 抓取
【发布时间】:2021-02-01 02:44:03
【问题描述】:

我是 python 新手,我正在尝试在网站上进行一些网络抓取,以提取幸运抽奖中所选数字的历史记录。

网址是:https://www.bet.co.za/bet-games/

这个游戏叫《幸运7》。

我想提取所绘制数字的历史记录,看看我是否可以进行概率分析。 由于每 4 分钟进行一次平局,因此结果历史应该可以追溯到 1 周。 如果我也能从数字中提取颜色,那也很棒,但主要目的是获取数字的历史记录。

我希望结果显示在 excel/csv 电子表格中,日期和时间在 a 列中,数字从 B 列开始。

每次我打开 Excel 时,它都会自动更新以显示最新的抽奖结果。

请在下面查看我的代码 - 非常感谢任何帮助。

我正在使用可视化代码进行编码。

from bs4 import BeautifulSoup
import requests
class Scraper:
    def __init__(self):
        self.content = None
        self.soup = None
        self.samples = None
        self.lastSample = None
        self.numbers = None
    def download(self):
        result = requests.get("https://www.bet.co.za/bet-games/")
        if result.status_code == 200:
            self.content = result.content
        else:
            raise Exception("Download: Could not fetch data.")
    def findSoupSamples(self):
        self.soup = BeautifulSoup(self.content, "html.parser")
        self.samples = self.soup.find('div', {'class': 'game-result'})
    def getLastSample(self):
        allSamples = self.samples.findAll('div', {'class': 'flex'})
        lastSample = None
        for lotterySample in allSamples:
            lotterySample = lotterySample.find('div', {'class': 'game-result'})
            if lotterySample is None:
                break
            lastSample = lotterySample
        self.lastSample = lastSample.parent
    def extractDataFromSample(self):
        resultList = []
        dayTimeString = self.lastSample.find('last-results-item-time').text
        numbers = self.lastSample.findAll('div', {'class': 'game-result'})
        for number in numbers:
            resultList.append(number.text.strip().encode('ascii', 'ignore'))
        self.numbers = (dayTimeString, resultList)

【问题讨论】:

    标签: python web-scraping


    【解决方案1】:

    您可以在 URL https://sbtech.betgames.tv/web/v2/games/results/sbtech_bet_co_za/en/0/{date}/1/{page}/ 上使用他们的 API 来获取结果:

    import csv
    import requests
    from datetime import datetime, timedelta
    
    
    url = 'https://sbtech.betgames.tv/web/v2/games/results/sbtech_bet_co_za/en/0/{date}/1/{page}/'
    
    all_data = []
    n = datetime.now()
    for i in range(0, 7):      # <-- specify number of days you want to get history from now
        d = (n - timedelta(days=i)).strftime('%Y-%m-%d')
    
        p = 1
        while True:
            print('Getting page {} for date {}'.format(p, d))
            data = requests.get(url.format(date=d, page=p)).json()
            for r in data['items']['results']:
                all_data.append([r['run_time'], *['{} {}'.format(i['number'], i['color']) for i in r['results']]])
            if '00:00:00' in data['items']['results'][-1]['run_time']:
                break
            p += 1
    
    with open('data.csv', 'w', newline='') as csvfile:
        writer = csv.writer(csvfile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        for row in all_data:
            writer.writerow(row)
    

    打印:

    Getting page 1 for date 2020-06-21
    Getting page 2 for date 2020-06-21
    Getting page 3 for date 2020-06-21
    Getting page 4 for date 2020-06-21
    Getting page 5 for date 2020-06-21
    
    ...etc.
    

    并生成 data.csv(来自 LibreOffice 的屏幕截图):

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-20
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 2021-01-12
      • 2016-10-22
      相关资源
      最近更新 更多