问题描述
在尝试构建一个可以寻找价格折扣的 HTML 抓取工具时,我不断收到 IndentationError: unindent does not match any outer indentation level
错误。但是当将 int
转换为 float
时。
converted_price = float(price[0:5])
if(converted_price < 40.99):
send_mail()
print(converted_price)
print(title.strip())
if(converted_price > 40.99):
send_mail()
我收到错误消息。我做错了什么?
完整代码:
import requests
from bs4 import BeautifulSoup
import smtplib
URL = 'https://www.amazon.de/Toilettendeckel-Absenkautomatik-Antibakterieller-Urea-Duroplast-Edelstahlscharnier/dp/B0881PKQ2H/?_encoding=UTF8&smid=AKQL6N75FLK4O&pd_rd_w=hTIPC&pf_rd_p=d051a36d-9331-41c8-9203-e7d634b1ee23&pf_rd_r=3TS01EKWNMYSRC1147X1&pd_rd_r=d950f9b1-8e9a-4913-b266-9b7a36ad21f5&pd_rd_wg=GLsoO&ref_=pd_gw_unk'
headers = {"User-agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/87.0.4280.88 Safari/537.36'}
def check_price():
page = requests.get(URL,headers=headers)
soup = BeautifulSoup(page.content,'html.parser')
title = soup.find(id="productTitle").get_text()
price = soup.find(id="priceblock_saleprice").get_text
converted_price = float(price[0:5])
if(converted_price < 40.99):
send_mail()
print(converted_price)
print(title.strip())
if(converted_price > 40.99):
send_mail()
def send_mail():
server = smtplib.SMTP('smtp.gmail.com',587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('madbro88a@gmail.com','gsplmdqkaavnuxnb')
subject = 'Price fell down!'
body = 'https://www.amazon.de/Toilettendeckel-Absenkautomatik-Antibakterieller-Urea-Duroplast-Edelstahlscharnier/dp/B0881PKQ2H/?_encoding=UTF8&smid=AKQL6N75FLK4O&pd_rd_w=hTIPC&pf_rd_p=d051a36d-9331-41c8-9203-e7d634b1ee23&pf_rd_r=3TS01EKWNMYSRC1147X1&pd_rd_r=d950f9b1-8e9a-4913-b266-9b7a36ad21f5&pd_rd_wg=GLsoO&ref_=pd_gw_unk'
msg = f"Subject: {subject}\n\n{body}"
server.sendmail(
'mail1','mail2',msg
)
print('Email has been sent!')
server.quit()
price_check()
解决方法
错误的根源在这部分:
if(converted_price < 40.99):
send_mail()
在 Python 中,在任何需要缩进的行(例如 if
、while
、def
等)之后,您必须将以下行缩进 one 制表符,或使用空格的等效项。 至少一个空格。缩进块中的所有后续行都应缩进到同一级别。约定是使用 4 个空格(感谢 mkrieger1)。空格在 Python 中非常重要。
在您的示例中,您将行 send_mail()
两个 缩进比 if
语句更深。如果将 send_mail()
的缩进减少 1,则编译器错误将得到解决。
更正后的代码应该是:
if(converted_price < 40.99):
send_mail()
请注意,在您的完整代码中,以下块缩进了一个太少:
if(converted_price < 40.99):
send_mail()
print(converted_price)
print(title.strip())
if(converted_price > 40.99):
send_mail()
整个块都需要缩进以位于 def check_price():
函数内。
完整代码 if(converted_price < 40.99):
是 check_price()
函数的一部分,因此您必须将其缩进。