【 Python足彩网站赔率数据文件自动下载(Tkinter+BeautifulSoup+Selenium隐藏浏览器界面,双线程)】

这篇具有很好参考价值的文章主要介绍了【 Python足彩网站赔率数据文件自动下载(Tkinter+BeautifulSoup+Selenium隐藏浏览器界面,双线程)】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python爬虫足彩网站赔率数据Excel文件自动定时下载(Tkinter+BeautifulSoup+Selenium隐藏浏览器界面,双线程)

朋友为了分析足彩的实时赔率,需要每隔一段时间自动下载网站上的excel数据。因此开发了这款软件。selenium 足球,python,beautifulsoup,selenium,爬虫
selenium 足球,python,beautifulsoup,selenium,爬虫
selenium 足球,python,beautifulsoup,selenium,爬虫

总共就3个代码块,以下是完整源代码。

1.第一步:创建应用程序界面

import tkinter as tk
from tkinter import messagebox
import tkinter.scrolledtext as scrolledtext
import auto_download
import threading

# 创建一个全局变量来存储线程对象
thread = None
running = False  # 用于控制线程是否继续执行的标志


def start_selenium(callback,download_callback):
    auto_download.main(time_entry.get(), callback,download_callback)
    update_progress('程序开始运行。')

def start_program():
    global thread, running
    try:
        duration = int(time_entry.get())
        if duration <= 0:
            raise ValueError
        start_button.config(state="disabled")
        time_entry.config(state="disabled")
        root.after(duration * 1000, enable_button)

        # 设置标志为True,表示线程可以继续执行
        running = True
        def download():
            while running:
                #传递回调函数
                start_selenium(update_progress,download_excel_callback)

        def run_in_thread():
            global thread
            thread = threading.Thread(target=download)
            thread.daemon = True  # 设置线程为守护线程,主线程退出后会自动退出子线程
            thread.start()

        run_in_thread()
    except ValueError:
        messagebox.showerror("错误", "请输入有效的定时时间(大于0的整数)!")
        time_entry.delete(0, tk.END)
        time_entry.focus()

def enable_button():
    start_button.config(state="normal")
    time_entry.config(state="normal")

def update_progress(info):
    text_widget.insert(tk.END, info + "\n")
    text_widget.see(tk.END)  # 滚动至最底部
    text_widget.update()  # 更新文本框
def download_excel_callback(info):  # 定义下载回调函数
    text_widget.insert(tk.END, info + "\n")
    text_widget.see(tk.END)  # 滚动至最底部
    text_widget.update()  # 更新文本框

def on_closing():
    global running
    # 在窗体关闭时修改标志为False,停止线程的执行
    running = False
    root.quit()  # 使用root.quit()代替root.destroy()

root = tk.Tk()
root.title("Selenium程序执行界面")
root.geometry("400x250")

# 定时时间标签和文本框
time_label = tk.Label(root, text="执行频率(min):")
time_label.grid(row=0, column=0, sticky="E", pady=10)

time_entry = tk.Entry(root, justify='right')
time_entry.insert(tk.END, '60')
time_entry.grid(row=0, column=1, padx=0, pady=10)

# 多行文本框
text_widget = scrolledtext.ScrolledText(root, height=10,width=51)
text_widget.grid(row=1, columnspan=2, padx=15, pady=5)

# 开始按钮
start_button = tk.Button(root, text="开始", command=start_program)
start_button.grid(row=2, columnspan=2, pady=10)

root.protocol("WM_DELETE_WINDOW", on_closing)
root.mainloop()

2第二步:获所有需要下载的URL并添加到列表。循环列表。

import requests
from bs4 import BeautifulSoup
import download_excel
import os
import datetime
import time

def main(m,callback,download_callback):
    callback('程序开始...')
    n=0
    while True:
        n=n+1
        callback('开始第%s次尝试...'%n)
        url = 'https://trade.500.com/jczq/'
        callback(url)
        soup=None
        try:
            response = requests.get(url)
            response.raise_for_status()  # 检查请求是否成功,如果不是则抛出异常
            soup = BeautifulSoup(response.content, 'html.parser')

            # 进一步处理页面内容

        except requests.exceptions.RequestException as e:
            # 请求异常处理
            callback("请求发生异常:", e)

        except Exception as e:
            # 其他异常处理
            callback("发生异常:", e)
        table=soup.find_all('table')[2]
        print(table)
        callback('一级网页爬取成功。')
        detail_urls=[]
        links = table.find_all("a")
        for link in links:
            if "欧" in link.text and "shtml" in link["href"]:
                detail_urls.append(link["href"])

        callback('发现目标文件%s个'%len(detail_urls))
        print(detail_urls)
        if len(detail_urls)<1:
            callback('二级网页爬取失败。')
            time.sleep(int(m)*60)
            callback('待机中,%s分钟后继续扫描。' % m)
            callback('*************************************************')
            continue
        callback('二级网页获取成功。')
        # 获取当前时间
        current_time = datetime.datetime.now()

        # 将时间格式化为"20231222"的格式
        formatted_time = current_time.strftime("%Y%m%d%H%M%S")

        download_path = '.\\download\\' + formatted_time
        download_path=os.path.abspath(download_path)
        if not os.path.exists(download_path):
            # 如果文件夹不存在,则创建文件夹
            os.makedirs(download_path)
        i=0
        for d in detail_urls:
            i+=1
            callback('正在下载第%s个...'%i)
            callback(d)
            download_excel.download(d, download_path,download_callback)
            callback('第%s个下载完成。'%i)
        callback('待机中,%s分钟后继续扫描。'%m)
        callback('*************************************************')
        time.sleep(int(m)*60)


3第三步:下载Excel文件。因为是无头浏览器,所以不能直接用Selenium点击,要用Javascript。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import WebDriverException
import sys
import time
def download(url,download_path,callback):
    # 指定Chrome浏览器位置和驱动位置
    chrome_binary_path = '.\\chrome\\Application\\chrome.exe'
    chrome_driver_path = '.\\chrome\\Application\\chromedriver.exe'

    # 创建浏览器选项实例,并启用下载文件功能
    chrome_options = Options()
    # 切换为无头模式
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('–-disable-dev-shm-usage')
    chrome_options.add_argument('--disable-extensions')
    chrome_options.add_argument('--ignore-certificate-errors')
    chrome_options.add_argument("--test-type")
    chrome_options.binary_location = chrome_binary_path

    prefs = {'download.default_directory': download_path }  # 设置默认下载文件路径
    chrome_options.add_experimental_option('prefs', prefs)
    # 在浏览器选项中添加下面两行代码,指定下载路径和禁用PDF和Flash插件
    chrome_options.add_argument('--disable-plugins')
    chrome_options.add_argument('--disable-extensions')
    driver=None
    try:
        # 启动浏览器并打开目标网页
        driver = webdriver.Chrome(chrome_driver_path, options=chrome_options)
        driver.get(url)
    except WebDriverException as e:
        # 处理WebDriverException异常
        callback("启动浏览器或打开目标网页时发生异常:")
    callback('浏览器启动并成功获取页面。')
    btn_xpath = "//a[contains(text(), '赔率下载')]"
    wait_time = 10  # 最大等待时间,单位为秒

    wait = WebDriverWait(driver, wait_time)
    btn=None
    while True:
        try:
            btn = wait.until(EC.visibility_of_element_located((By.XPATH, btn_xpath)))
        except TimeoutException:
            callback('等待超时,未找到按钮。3秒后再次尝试...')
            time.sleep(3)
            continue

        callback('获取按钮。')
        driver.execute_script("arguments[0].click();", btn)
        callback('点击按钮。')
        callback('下载中,等待3秒。')
        time.sleep(3)
        driver.quit()
        callback('浏览器已关闭。')
        break


4.第四部:打包应用程序文章来源地址https://www.toymoban.com/news/detail-800273.html

pyinstaller --hidden-import=selenium --hidden-import=tkinter --hidden-import=auto_download --hidden-import=requests --hidden-import=bs4 form.py

*本文章仅供学习和交流

到了这里,关于【 Python足彩网站赔率数据文件自动下载(Tkinter+BeautifulSoup+Selenium隐藏浏览器界面,双线程)】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AERONET AOD 数据自动化下载 + PYTHON + SELENIUM

    目录 5.05更新 增加FMF、SSA数据下载(见GitHub) 4.10更新 通过CURL、WGET等方式下载目标数据 获取下载地址 Using Tools to Save Web Output as a File Wget Curl AERONET AOD 数据下载  利用 PYTHON + SELENIUM 自动化下载中国站点数据 获得站点URL列表  获取站点数据时间 下载数据 写在前面的小结:预

    2023年04月08日
    浏览(34)
  • Python实战之数据表提取和下载自动化

    在网络爬虫领域,动态渲染类型页面的数据提取和下载自动化是一个常见的挑战。本文将介绍如何利用Pyppeteer库完成这一任务,帮助您轻松地提取动态渲染页面中的数据表并实现下载自动化。 一、环境准备 首先,确保您已经安装了Python环境。接下来,我们需要安装 pyppeteer

    2024年02月11日
    浏览(30)
  • 【python】tkinter程序打包成exe可执行文件 全流程记录(windows系统)

    【需求背景】 Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。 我用python写了一个可视化界面,利用算法计算患COVID-19的概率。 现在需要将Python文件编译成exe文件,这样可以直接在Windows上运行,不需要再依赖Python环境,可以复制到其他电脑中直接

    2024年02月01日
    浏览(60)
  • python-数据可视化-下载数据-CSV文件格式

    数据以两种常见格式存储: CSV 和 JSON comma-separated values 0 USW00025333 1 SITKA AIRPORT, AK US 2 2018-01-01 3 0.45 4 5 48 6 38 csv.reader() :将前面存储的文件对象作为实参传递给它,创建一个与该文件相关联的阅读器对象 next() 返回文件中的下一行 第一次调用该函数,返回第一行,依次增加

    2024年02月10日
    浏览(27)
  • Python selenium与pyautogui控制浏览器实现modis数据自动下载

    目录 序言: 准备工作: 基本思路: 完整代码:         上次提到通过modis连接下载数据的方式有很多,本文选择selenium模拟登录的方式通过谷歌浏览器下载,但是并不推荐这种方法,只是恰好学习了selenium的一些操作,所以写这个代码做了一些测试。         本文章只需要

    2024年02月11日
    浏览(40)
  • 狗屁文章生成器-批量生成文章自动发布网站-免费下载

    狗屁文章生成器,什么是狗屁文章生成器,狗屁文章生成器从字面意思都能理解出来,就是生成的文章毫无逻辑感,胡乱生成,毫无可读性。只需要输入就能实现狗屁文章生成。狗屁文章生成器。火于2020年某老板喊一员工写3000字原创检讨,然后该员工就采用的这套狗屁

    2024年02月04日
    浏览(118)
  • python + Selenium 实现自动化查询问财数据及下载Excel数据并存入到mysql

    问财的数据海量及时,作为量化交易的数据来源也是一种不错的选择,之前也用过一些免费的api,但是数据不是很完整,时效性也不高,试了一下问财觉得很不错,不过下载有次数限制,非会员每天只能导出2次,会员每天200次。因为不想每天手工操作,所以想通过该方法实现

    2024年02月08日
    浏览(49)
  • 下载盗版网站视频并将.ts视频文件合并

    我们发现index.m3u8中储存着所有的.ts文件名在拼接上前面固定的url就可以获取到.ts文件

    2024年02月07日
    浏览(54)
  • tkinter的下载

    tkinter是一个常用的第三方模块。  下载方法 第一步:打开python自带的cmd 第二步:输入下载命令,这里推荐使用清华源进行下载。不过我申明一下,不是在网页上打开的 这是清华源的链接: 这是我下载时用的命令: 然后就可以等待下载完成了,下载好后可以测试一下。 就像

    2024年02月08日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包