python - 使用 Beautiful Soup 做一个简单的股票价格跟踪器
问题描述
我尝试制作一个股票价格跟踪机器人,但该网站的代码如下:
<div class="kurBox">
<span class="text">ALIŞ(TL)</span>
<span class="value up">7,8175</span>
</div>
<div class="kurBox">
<span class="text">SATIŞ(TL)</span>
<span class="value up">7,8240</span>
我需要在文本之后获取这两行的值。而当现在的价值低于今天的起始价值时,类别变为价值下降。
这是我使用的代码的一部分,该代码几乎可以完成我想要的所有工作,但它不会同时提取两个值,有时当其中一个类更改为值时,值会混淆。我该如何解决这个问题?
url = "http://bigpara.hurriyet.com.tr/doviz/dolar/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml-xml")
old_value = soup.find("span" ,attrs={"class":"value up"}).text
first_value = soup.find("span" ,attrs={"class":"value up"}).text
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print(" ")
print("******************************************")
print("|", current_time, "|", "Doların ilk fiyatı: ", first_value, "|")
print("******************************************")
print(" ")
print(" ")
bakiye = round(float(100.0000), 4)
dolar = int(0)
hold = time.sleep(0)
while True:
time.sleep(1)
url = "http://bigpara.hurriyet.com.tr/doviz/dolar/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml-xml")
new_value = soup.find("span" ,attrs={"class":"value up"}).text
解决方案
您需要.find_all()
按照建议使用。要处理类属性是否从value up
、 变为value down
,您可以使用正则表达式来获取具有包含 的类的元素value
。那会枯萎的。
不确定您是否想要输出,但这应该可以帮助您:
import requests
from bs4 import BeautifulSoup
from datetime import datetime
import re
url = "http://bigpara.hurriyet.com.tr/doviz/dolar/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "lxml-xml")
values_list = []
values = soup.find_all('span',{re.compile('value')})
for val in values:
text = val.find_previous('span').text
value = val.text
values_list.append((text,value))
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
print(" ")
print("******************************************")
print("|", current_time, "|", "Doların ilk fiyatı: ", values_list[0][1], "|")
print("******************************************")
print(" ")
print(" ")
print ('Second value: ', values_list[1][1])
输出:
******************************************
| 11:14:46 | Doların ilk fiyatı: 7,8240 |
******************************************
Second value: 7,8279
推荐阅读
- tsql - 如何在导入数据库之前使用 TSQL 操作文件
- javascript - manifest scope/start_url 和 ServiceWorkerModule.register 范围有什么区别?
- kubernetes - 如何使用 yamls 为部署在 K8s 集群上的 Prometheus 设置基本身份验证?
- azure - Azure 搜索索引 csv 文件
- google-chrome - Chrome 本地覆盖调试如何正常工作?
- android - 如何在 Android 上使用 MediaPlayer 将曲目的速度(BPM)更改为 int 值?
- php - PHP在将文本写入文件时防止额外的空行
- git - 确保在 Git 中提交时避免不当行为
- websocket - python asyncio 服务器中 websocket.send() 的性能问题
- ios - 在后台将加速度计数据从 Apple Watch 同步到 iOS 应用程序