首页 > 解决方案 > 如果任何数字是英镑,我如何从该输出中获得平均值并将货币转换为欧元?

问题描述

我尝试了很多方法,但总是出错。我只想将英镑转换为欧元,如果结果为以下任何一种,请排除:123、1234、12345,最后有 1 个输出;所有数字的平均值。

import requests
import re
from currency_converter import CurrencyConverter
c = CurrencyConverter()
from bs4 import BeautifulSoup

url = "https://www.donedeal.ie/cars/Ford/C-MAX"

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')

for price in soup.findAll('p', attrs={'class': 'card__price'}):
    price = price.text

到目前为止的输出如下所示:

€1,350
€17,950
€650
... (and so on)

现在进行货币转换..

    pound_price= re.compile(r'£+\d[0-9,.]+')
    if pound_price.findall(price):
        converted=price[0]#.replace('£','')
        converted=c.convert(price[0], 'GBP', 'EUR')
        print(converted)

它不返回任何输出,并且出现此错误:

Traceback (most recent call last):
  File "xx", line 32, in <module>
    converted=c.convert(price[0], 'GBP', 'EUR')
  File "..\AppData\Local\Programs\Python\Python36\lib\site-packages\currency_converter\currency_converter.py", line 358, in convert
    return self.cast(amount) / r0 * r1
ValueError: could not convert string to float: '£'
    price_only = re.compile(r'\d[0-9,.]+')
    just_price = price_only.findall(price)

    integer_price = [int(''.join(s[0:].split(','))) for s in just_price]

    def cal_average(num):
        sum_num=0
        for t in (num):
            sum_num= sum_num + t
        avg= sum_num / len(num)
        return avg

    print(int(cal_average(integer_price)))

输出如下所示:

1350
17950
650
19950
24368
Traceback (most recent call last):
  File "xx", line 60, in <module>
    print(int(cal_average(integer_price)))
  File "xx", line 57, in cal_average
    avg= sum_num / len(num)
ZeroDivisionError: division by zero
15950
7250
7500
5250
113
14500
314
13450
999

Process finished with exit code 1

标签: pythonaveragescreen-scrapingcurrencyprice

解决方案


推荐阅读