首页 > 解决方案 > 使用 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

标签: pythonbeautifulsoup

解决方案


您需要.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

推荐阅读