使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。

news2024/10/5 18:43:16

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

我以前用python写过一个程序,抓取网页源代码,然后提取关键想要的数据,5分钟定时获取一次;不过后来网站给封禁了,不能爬取数据了。估计有反爬虫措施。当时很想弄socket实时获取,不过没玩明白。

使用python3.9 抓取网站:“ada” 的WTI实时价格信息,采用完全模拟浏览器的方式(不能用几天被封禁),用socket实时获取数据,隔5秒钟print出来就行了;其它不用管。
在同样的网站:“adb”;使用同样的方法获取“原油连续”价格的实时数据。相当于print两组数据。
3.同时能连接网站:“adc” 按同样的要求获取“纽约原油”实时价格信息;作为功能备用。可以另写一套完整的程序。
4. 在同样的备用网站:“add” ,按同样的要求获取“燃料油连续”实时价格信息;相当于print两组数据。

所有的关于网络连接的部分代码要有注释,要让我这个二把手技术员能看懂的,方便我自己改品种。在哪里改品种也要注释好。

就这些要求,能隔5秒钟print出来就行。不能频繁连接,造成能被监测到的异常。要相当于跟浏览器正常开着访问一样的效果。请人工验证正常后发,我要能直接正常使用的代码。


ada:WTI:
https://quote.fx678.com/symbol/CONC

adb: 原油连续:
https://quote.fx678.com/exchange/INE

adc:新浪WTI:
https://finance.sina.com.cn/futures/quotes/CL.shtml

add:新浪原油连续:
https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_2

解决方案

  如下是上述问题的解决方案,仅供参考:

要完成你的需求,我们需要编写一个Python脚本,使用socket来获取网站的实时数据。不过,通常获取网页实时数据的做法是通过使用HTTP请求来模拟浏览器行为,而不是直接使用socket,因为大部分现代网站会通过HTTP或WebSocket协议来提供实时数据。

在这种情况下,我们将使用Python的requests库来模拟浏览器行为,并使用BeautifulSoup来解析HTML数据。同时,为了避免被反爬虫机制封禁,我们将使用随机的请求头和适当的等待时间(例如5秒)来模拟人类用户的浏览行为。

安装所需的Python库

你需要安装以下Python库来执行脚本:

pip install requests
pip install beautifulsoup4

Python代码示例

以下是使用Python编写的脚本,可以实时获取指定网站的WTI、原油连续等价格信息,每隔5秒输出一次。

import requests
from bs4 import BeautifulSoup
import time
import random

def get_headers():
    """
    模拟浏览器的请求头,防止被反爬虫检测。
    """
    user_agents = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3', 
        'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1 Safari/605.1.15', 
        'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
    ]
    headers = {
        'User-Agent': random.choice(user_agents),
        'Accept-Language': 'en-US,en;q=0.5'
    }
    return headers

def get_data(url, data_name):
    """
    根据给定的URL抓取网页数据。
    """
    try:
        response = requests.get(url, headers=get_headers())
        response.raise_for_status()  # 检查请求是否成功
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 根据网页结构提取数据,需要具体分析网页结构
        # 这里假设抓取的价格在类名为 'price' 的HTML元素中
        price = soup.find('span', class_='price').text.strip()
        
        print(f"实时{data_name}价格: {price}")
    
    except Exception as e:
        print(f"获取{data_name}数据时出错: {e}")

def main():
    # 定义各个网站的URL和对应的名称
    urls = [
        {"url": "https://quote.fx678.com/symbol/CONC", "name": "WTI"},
        {"url": "https://quote.fx678.com/exchange/INE", "name": "原油连续"},
        {"url": "https://finance.sina.com.cn/futures/quotes/CL.shtml", "name": "纽约原油"},
        {"url": "https://vip.stock.finance.sina.com.cn/quotes_service/view/qihuohangqing.html#titlePos_2", "name": "燃料油连续"}
    ]
    
    while True:
        for item in urls:
            get_data(item["url"], item["name"])
        
        # 隔5秒获取一次数据
        time.sleep(5)

if __name__ == "__main__":
    main()

代码说明

  1. get_headers函数:随机选择常见的浏览器User-Agent来模拟请求,避免被反爬虫措施检测到。
  2. get_data函数:接受一个URL和数据名称作为输入,发送请求获取网页数据,并使用BeautifulSoup解析HTML以获取价格信息。注意:实际数据的提取逻辑需要根据网页结构进行调整。
  3. main函数:定义需要获取数据的URL列表,并使用一个循环每隔5秒获取一次数据。

注意事项

  1. 调整解析逻辑:实际网页的结构可能不同,你需要根据网页的实际HTML结构调整BeautifulSoup的解析逻辑(例如class_='price')。
  2. 频率控制:虽然我们使用了随机User-Agent和定时获取数据,但依然需要小心防止被网站检测到为爬虫行为。可以适当增加time.sleep()的时间间隔。
  3. 异常处理:脚本中增加了异常处理,确保即使在获取数据时发生错误也不会中断程序运行。

后续步骤

请尝试运行这个脚本,并根据网页实际情况调整数据解析的逻辑。如果还有任何问题或者需要进一步的定制,请告诉我!

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【可视化大屏】echarts介绍

使用echarts的步骤: 1.下载并引用echarts.js文件 2.准备一个具体宽高的容器 3.初始化echarts实例对象 // 实例化对象var myChart echarts.init(document.querySelector(".bar .chart"));4.指定配置项和数据 // 指定配置和数据var option {color: [&qu…

系统架构设计师⑥:知识产权与标准化

系统架构设计师⑥:知识产权与标准化 知识产权保护的范围与对象 知识产权保护期限 知识产权人确定 侵权判定 中国公民、法人或者其他组织的作品,不论是否发表,都享有著作权。 开发软件所用的思想、处理过程、操作方法或者数学概念不受保护。 …

信号检测理论(Signal Detection Theory, SDT)

信号检测理论(Signal Detection Theory, SDT)模拟是一种实验设计,用于研究和理解在存在噪声或不确定性的情况下如何做出决策。在心理学、认知科学、工程学和许多其他领域,信号检测理论都非常重要。 一、基础概念: 在信…

Mac ToDesk 无法连接网络

描述 网络连接的是 Wi-Fi,打开浏览器能跟正常浏览内容,说明 Wi-Fi 是正常的。 现象:显示网络连接失败,一直无法登陆! 检查防火墙是没有阻止ToDesk 的任何连接,说明防火墙也是正常的。 解决 检查登录项&a…

3dsMax添加天空盒

点击渲染,环境 , 点击位图 找到要设置的天空HDR,可以使用HDR(EXR)贴图 一个可以下载HDR贴图的网站 https://polyhaven.com/hdris在渲染的时候不要使用使用微软输入法,3dsmax会卡死, 在渲染的时候不要使用使用微软…

胤娲科技:AI重塑会议——灵动未来,会议新纪元

你是否曾经历过这样的会议场景:会议纪要不准确,人名张冠李戴;错过会议,却无从回顾关键内容;会议效率低下,时间白白流逝? 这些问题仿佛成了现代会议的“顽疾”。然而,随着AI技术的飞速…

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类 苹果荔枝柠檬梨柿子数据集 名称 苹果荔枝柠檬梨柿子数据集 (Apple, Litchi, Lemon, Pear, Persimmon Dataset) 规模 图像数量:1498张图像。类别:5种水果类别。标注个数&#xff…

linux基础指令的认识

在正式学习linux前,可以简单认识一下linux与win的区别 win:是图形界面,用户操作更简单;在刚开始win也是黑屏终端 指令操作,图形界面就是历史发展的结果。Linux:也存在图形界面比如desktop OS;但…

Redis实现点赞

部分实体类 TableId(value "id", type IdType.AUTO)private Long id;/*** 商户id*/private Long shopId;/*** 用户id*/private Long userId;/*** 用户图标*/TableField(exist false)private String icon;/*** 用户姓名*/TableField(exist false)private String …

lxml安装失败的一个解决方案

下载离线安装包,网址 https://pypi.org/simple/lxml/需要对应自己的python版本,网上教程很多,不再赘述 下载完成后将该文件,重命名(下面是下载好的文件,上面是重命名的文件,就是在第二个版本&a…

【Linux】进程周边之优先级

目录 一、优先级 1.为什么要有进程优先级? 2.什么是进程优先级? 3.优先级的初始设定 3.1 PRI 和 NI 3.2如何修改优先级?(sudo/root) 3.2.1 概念: 3.2.2 如何查看进程的优先级? 3.3.3 或…

【深度学习】自动微分——Autodiff or Autograd?

论文 [1].CSC321 Lecture 10: Automatic Differentiation [2].Automatic Differentiation in Machine Learning:a Survey 关键点总结: 雅可比矩阵:对于多变量函数 y ⃗ f ( x ⃗ ) \vec{y} f(\vec{x}) y ​f(x ),其梯度矩阵(…

GPT新功能Canvas!对普通用户最友好的功能!

原文链接:GPT4新功能Canvas!对普通用户最友好的功能! ChatGPT更新了一个极度优雅,对普通人极度友好的功能。 而且,顺带,又碾死了一批AI赛道里,做AI文本编辑和Code Copilot的初创企业,一波端掉…

自动驾驶核心技术:感知融合、规划决策、控制执行

1、前言 简单来说,实现自动驾驶需要解决三个核心问题:“我在哪?我要去哪?我该如何去?”能完整解决这三个问题就是真正的自动驾驶。 目前,自动驾驶汽车关键技术主要包括环境感知、精准定位、决策与规划、控制与执行、高精地图与车联网V2X以…

ZYNQ:GPIO 之 MIO 按键中断实验

实验目的 使用底板上的 PS 端的用户按键 PS_KEY1 通过中断控制核心板上 LED2 的亮灭 简介 Zynq 芯片的 PS 部分是基于使用双核 Cortex-A9 处理器和 GIC pl390 中断控制器的 ARM 架构。中断结 构与 CPU 紧密链接,并接受来自 I/O 外设(IOP&#xff09…

P4240 毒瘤之神的考验

毒瘤之神的考验 - 洛谷 定义 猜想与有关 发现上式1-1 上下两边乘gcd(i,j)有 带入1-1有 化简 n<m 经典代换Tke eT/k 然后化简不了了 这个时候我们可以把一部分看出一个整体 分析这两个函数&#xff0c;发现f(x) 可以在下预处理出来 g(x,y)有以下递推式 因此也可以在下处理…

三、流程控制

流程控制 选择结构&#xff08;if-else&#xff09;选择结构&#xff08;when&#xff09;循环结构&#xff08;for&#xff09;循环结构&#xff08;while&#xff09; 经过前面的学习&#xff0c;我们知道&#xff0c;程序都是从上往下依次运行的&#xff0c;但是&#xff0c…

事件抽取(Event Extraction, EE)

一、引言 事件抽取&#xff08;Event Extraction, EE&#xff09;是信息抽取领域中的一个重要任务&#xff0c;旨在从非结构化文本中识别和抽取事件相关的信息。事件抽取通常包括识别事件触发词、事件类型以及事件中的参与者、时间、地点等元素&#xff0c;最终将这些信息结构…

【进阶OpenCV】 (4)--图像拼接

文章目录 图像拼接1. 读取图片2. 计算图片特征点及描述符3. 建立暴力匹配器4. 特征匹配5. 透视变换6. 图像拼接 总结 图像拼接 图像拼接是一项将多张有重叠部分的图像&#xff08;这些图像可能是不同时间、不同视角或者不同传感器获得的&#xff09;拼成一幅无缝的全景图或高分…

论文翻译 | Model-tuning Via Prompts Makes NLP Models Adversarially Robust

摘要 近年来&#xff0c;NLP从业者集中于以下实践:(i)导入现成的预训练(掩码)语言模型;(ii)在CLS令牌的隐藏表示(随机初始化权重)上附加多层感知器;(iii)在下游任务(MLP-FT)上微调整个模型。这一过程在标准的NLP基准上产生了巨大的收益&#xff0c;但这些模型仍然很脆弱&#x…