🏆本文收录于《全栈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()
代码说明
get_headers
函数:随机选择常见的浏览器User-Agent
来模拟请求,避免被反爬虫措施检测到。get_data
函数:接受一个URL和数据名称作为输入,发送请求获取网页数据,并使用BeautifulSoup
解析HTML以获取价格信息。注意:实际数据的提取逻辑需要根据网页结构进行调整。main
函数:定义需要获取数据的URL列表,并使用一个循环每隔5秒获取一次数据。
注意事项
- 调整解析逻辑:实际网页的结构可能不同,你需要根据网页的实际HTML结构调整
BeautifulSoup
的解析逻辑(例如class_='price'
)。 - 频率控制:虽然我们使用了随机
User-Agent
和定时获取数据,但依然需要小心防止被网站检测到为爬虫行为。可以适当增加time.sleep()
的时间间隔。 - 异常处理:脚本中增加了异常处理,确保即使在获取数据时发生错误也不会中断程序运行。
后续步骤
请尝试运行这个脚本,并根据网页实际情况调整数据解析的逻辑。如果还有任何问题或者需要进一步的定制,请告诉我!
希望如上措施及解决方案能够帮到有需要的你。
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电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。