通过 API 将英镑价格从网站转换为捷克克朗

问题描述 投票:0回答:1

我正在Python中进行网络抓取,我想使用API将网站价格(英镑)转换为捷克克朗,但价格显示了不同的结果。看起来像是将英镑转换为英镑,有谁知道我的代码中可能存在问题吗?

#importovani knihoven

from bs4 import BeautifulSoup
import requests
import csv
import pandas as pd

#funkce pro ziskani aktualnich kurzu men z API
def get_exchange_rates():
    response = requests.get("https://api.exchangerate-api.com/v4/latest/CZK")
    data = response.json()
    return data['rates']

#funkce pro prevod z GBP na CZK
def convert_to_czk(price_gbp, exchange_rate):
    price_czk = price_gbp * exchange_rate
    return round(price_czk, 2)

#aktualni kurz GBP vuci CZK
exchange_rates = get_exchange_rates()
exchange_rate_gbp = exchange_rates['GBP']

books_data = [] #slouzi pro ukladani informaci o knihach 

#Projde veskere stranky u kazde knihy, nebot na jedne strance se nachazi pouze 20 zaznamu
for page_num in range(1, 51):
    page_url = f'https://books.toscrape.com/catalogue/page-{page_num}.html'
    response = requests.get(page_url)
    soup = BeautifulSoup(response.content, 'html.parser')

    books = soup.find_all('h3')

    for book in books:
        book_href = book.find('a')['href']
        book_url = f"https://books.toscrape.com/catalogue/{book_href}"
        book_response = requests.get(book_url)
        book_soup = BeautifulSoup(book_response.content, 'html.parser')

        title = book_soup.find('h1').text
        category = book_soup.find('ul', class_='breadcrumb').find_all('a')[2].text.strip()
        rating = book_soup.find('p', class_='star-rating')['class'][1]
        price_gbp = float(book_soup.find('p', class_='price_color').text.strip().replace('£', ''))
        price_czk = convert_to_czk(price_gbp, exchange_rate_gbp)
        availability = book_soup.find_all('p', class_=['instock', 'availibility'])[0].text.strip()

        #Zíkání prvních 8 znaků textu dostupnosti
        availability_in_out = availability.strip()[:8]
        
        # Získání 11. až 12. znaku textu dostupnosti
        availability_sum = availability[10:12]

        data = [title, category, rating, price_czk, availability_in_out, availability_sum]
        books_data.append(data)

# Prevod list od lists do df
df = pd.DataFrame(books_data, columns=['Title', 'Category', 'Rating', 'Price_CZK', 'Availability', 'Available Quantity'])

#kategorii ze zadani SKODA
desired_categories = ["Travel", "Mystery", "Historical Fiction", "Sequential Art", "Classics"]

#filtrovani dataframu na zaklade kategorii ze zadani od SKODA
filtered_df = df[df['Category'].isin(desired_categories)]

#ulozeni dataframu do CSV souboru
filtered_df.to_csv('books_scrapinggg.csv', index=False)
print("The CSV file books_scraping.csv was successfully created.")```

python web-scraping currency-exchange-rates
1个回答
0
投票

问题出在货币兑换上。 1 英镑 = 29.49 捷克克朗,而您的做法不正确。

尝试下面的代码片段。

#funkce pro ziskani aktualnich kurzu men z API
def get_exchange_rates():
    response = requests.get("https://api.exchangerate-api.com/v4/latest/GBP")
    data = response.json()
    return data['rates']

#funkce pro prevod z GBP na CZK
def convert_to_czk(price_gbp, exchange_rate):
    price_czk = price_gbp * exchange_rate
    return round(price_czk, 2)

#aktualni kurz GBP vuci CZK
exchange_rates = get_exchange_rates()
exchange_rate_gbp = exchange_rates['CZK']
© www.soinside.com 2019 - 2024. All rights reserved.