python - Python bot 在本地运行良好,但在 Heroku 崩溃
问题描述
我想为我的机器人使用 heroku 来检查亚马逊的价格。问题是当我运行 heroku logs --tail 时出现此错误。
2021-10-03T17:15:46.114624+00:00 app[worker.1]: Traceback (most recent call last):
2021-10-03T17:15:46.114652+00:00 app[worker.1]: File "/app/scraper.py", line 62, in <module>
2021-10-03T17:15:46.114750+00:00 app[worker.1]: check_price()
2021-10-03T17:15:46.114753+00:00 app[worker.1]: File "/app/scraper.py", line 32, in check_price
2021-10-03T17:15:46.114832+00:00 app[worker.1]: send_mail()
2021-10-03T17:15:46.114832+00:00 app[worker.1]: File "/app/scraper.py", line 46, in send_mail
2021-10-03T17:15:46.114906+00:00 app[worker.1]: server.login('gmail', 'password')
2021-10-03T17:15:46.114913+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 745, in login
2021-10-03T17:15:46.115146+00:00 app[worker.1]: raise last_exception
2021-10-03T17:15:46.115153+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 734, in login
2021-10-03T17:15:46.115376+00:00 app[worker.1]: (code, resp) = self.auth(
2021-10-03T17:15:46.115377+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 657, in auth
2021-10-03T17:15:46.115575+00:00 app[worker.1]: raise SMTPAuthenticationError(code, resp)
我已按照步骤在 gmail 上访问不太安全的应用程序。我添加了 Procfile:worker:python scraper.py。我不知道该怎么办了。
import requests
from bs4 import BeautifulSoup
import re
import smtplib
import time
URL = 'https://www.amazon.se/Sony-ILCE6000LB-CEC-Alpha-Systemkamera-24-3mp/dp/B00IE9XHE0/ref=sr_1_1?dchild=1&keywords=systemkamera&qid=1629705873&s=videogames&sr=1-1'
headers = {
"User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 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_ourprice").get_text()
converted_price = price
s = converted_price
list_number = re.findall(r'\d+', s)
num = "".join(list_number)
first_num = float(num[0:4])
if (first_num < 6000):
send_mail()
print(title)
print(float(first_num))
所以在这里我使用的是一个 gmail 帐户,我的应用程序不太安全,我将其发送到我的主要 gmail 帐户。当我在本地运行它时,它可以完美运行。
def send_mail():
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo
server.login('gmail', 'password')
subject = 'Price fell down'
body = 'check the amazon link. https://www.amazon.se/Sony-ILCE6000LB-CEC-Alpha-Systemkamera-24-3mp/dp/B00IE9XHE0/ref=sr_1_1?dchild=1&keywords=systemkamera&qid=1629705873&s=videogames&sr=1-1'
msg = f"Subject: {subject}\n\n{body}"
server.sendmail(
'gmail',
'gmail',
msg
)
print("email is sent")
server.quit()
while (True):
check_price()
time.sleep(60 * 60)
这是我的要求。文本:
astroid==2.6.6
autopep8==1.5.7
beautifulsoup4==4.9.3
bs4==0.0.1
cachetools==4.2.2
certifi==2021.5.30
chardet==4.0.0
chardet2==2.0.3
charset-normalizer==2.0.4
colorama==0.4.4
configparser==5.0.2
crayons==0.4.0
cssselect==1.1.0
cssutils==2.3.0
cycler==0.10.0
Dmail==1.2.4
html2text==2020.1.16
idna==3.2
isort==5.9.3
kiwisolver==1.3.1
lazy-object-proxy==1.6.0
lxml==4.6.3
Markdown==3.3.4
matplotlib==3.4.3
mccabe==0.6.1
numpy==1.21.1
pandas==1.1.4
Pillow==8.3.1
premailer==3.10.0
pycodestyle==2.7.0
pylint==2.9.6
pyparsing==2.4.7
python-dateutil==2.8.2
pytz==2021.1
PyYAML==5.3.1
requests==2.26.0
selenium==3.141.0
six==1.16.0
soupsieve==2.2.1
toml==0.10.2
urllib3==1.26.6
webdriver-manager==3.2.2
wrapt==1.12.1
这就是我安装的:
astroid 2.6.6
autopep8 1.5.7
beautifulsoup4 4.10.0
bs4 0.0.1
certifi 2021.5.30
charset-normalizer 2.0.6
et-xmlfile 1.1.0
GDAL 3.3.1
idna 3.2
isort 5.9.3
lazy-object-proxy 1.6.0
lxml 4.6.3
mccabe 0.6.1
numpy 1.21.2
openpyxl 3.0.9
pandas 1.3.3
pip 21.2.4
protobuf 3.17.3
pycodestyle 2.7.0
pylint 2.9.6
python-dateutil 2.8.2
pytz 2021.1
requests 2.26.0
setuptools 57.0.0
six 1.16.0
soupsieve 2.2.1
toml 0.10.2
urllib3 1.26.7
wheel 0.36.2
wrapt 1.12.1
xlrd 2.0.1