我有两个Python文件: checkprice.py 和 test2.py 。
第二个包含函数getItemInfo()
,它基本上从网站获取项目的信息(特别是价格,称为item_price_edited_eur
)。我需要使用 checkprice.py 文件中的价格,因此我将item_price_edited_eur
变量设置为getItemInfo()
的返回值函数和我将变量item_price_edited_eur
的值赋给函数(在这个意义上:item_price_edited_eur = getItemInfo()
)。通过这种方式,我可以在函数外部使用变量,但它不起作用,我得到了这个错误:
Traceback (most recent call last):
File "checkprice.py", line 25, in <module>
item_price_edited_eur = getItemInfo()
TypeError: getItemInfo() missing 5 required positional arguments: 'item_url', 'item_name_xpath', 'item_game_xpath', 'item_price_xpath', and 'item_quantity_sold_xpath'
我该如何解决这个问题?
这是 test2.py 文件:
from selenium import webdriver
#from selenium.webdriver.common.keys import Keys
def getItemInfo(item_url,item_name_xpath,item_game_xpath,item_price_xpath,item_quantity_sold_xpath):
#info includes item name, game, quantity sold and price
from forex_python.converter import CurrencyRates
from selenium import webdriver
path_to_chromedriver = 'C:\\Users\\Emanuele-PC\\Desktop\\chromedriver\\chromedriver.exe'
browser = webdriver.Chrome(executable_path = path_to_chromedriver)
browser.get(item_url)
item_name = browser.find_element_by_xpath(item_name_xpath).text
item_game = browser.find_element_by_xpath(item_game_xpath).text
item_price = browser.find_element_by_xpath(item_price_xpath).text
item_quantity_sold = browser.find_element_by_xpath(item_quantity_sold_xpath).text
#item_price isn't an integer, it's a string, 'Prezzo iniziale: $' and 'USD' need to be cut with .replace, then converted to int with int()
#item_price_edited is the int() variable, ready to be used
item_price_cut1 = item_price.replace('Prezzo iniziale:','')
item_price_cut2 = item_price_cut1.replace('$','')
item_price_cut3 = item_price_cut2.replace('USD','')
item_price_edited_usd = float(item_price_cut3)
#the value of the price is USD, it needs to be converted to EUR
c = CurrencyRates()
#round arrotonda il valore con la virgola a due numeri decimali
item_price_edited_eur = round(c.convert('USD', 'EUR', item_price_edited_usd),2)
#print(item_name)
#print(item_game)
#print(item_price_edited_eur)
#print(item_quantity_sold)
return item_price_edited_eur
这是 checkprice.py 文件:
import mysql.connector
from test2 import getItemInfo
from time import gmtime, strftime
#getItemInfo requires as inputs(item_url,item_name_xpath,item_price_xpath,item_quantity_sold_xpath)
conn = mysql.connector.connect(host='localhost',user='user1',password='pass1',db='mm')
cursor = conn.cursor()
select_query = """SELECT * FROM items_basic_info"""
cursor.execute(select_query)
rows = cursor.fetchall()
for row in rows:
#row[0] is id
#row[1] is item_name
#row[2] is item_name_xpath
#row[3] is item_game
#row[4] is item_game_xpath
#row[5] is item_price_xpath
#row[6] is item_url
#row[7] is item_quantity_sold_xpath
getItemInfo(row[6],row[2],row[4],row[5],row[7])
date_time = strftime("%Y-%m-%d %H:%M:%S", gmtime())
#insert_query inserts price of items in items_price
update_query = """UPDATE items_price SET item_price = %s, last_updated = %s WHERE item_name = %s"""
item_price_edited_eur = getItemInfo()
cursor.execute(update_query,(item_price_edited_eur, date_time, row[1]))
conn.commit()
答案 0 :(得分:0)
基本上getItem()
中的test2.py
函数需要5个参数。
DEF getItemInfo(item_url,item_name_xpath,item_game_xpath,item_price_xpath,item_quantity_sold_xpath):
您没有在呼叫形式checkprice.py
中提供它们,而您正在调用它而没有参数
item_price_edited_eur = getItemInfo()
这就是python抛出的错误,在checkprice.py
的调用中你需要传递所有的参数。
编辑:
在这一行item_price_edited_eur = getItemInfo()
上,您再次调用该函数。
您需要做的是将此行getItemInfo(row[6],row[2],row[4],row[5],row[7])
更改为item_price_edited_eur
= getItemInfo(row[6],row[2],row[4],row[5],row[7])
并删除item_price_edited_eur = getItemInfo()
行,这样可能会让您排序。