python - 网络抓取亚马逊价格的问题
问题描述
我正在尝试创建一个 python 脚本,当亚马逊使用 BeautifulSoup 价格下降时,它会通过电子邮件通知我。我的问题是,当通过将 convert_price 设置为大于价格来测试代码是否有效时,我仍然没有收到电子邮件。
当我运行它时,该脚本没有给我任何错误。我尝试重新安装 Anaconda/Python,更改 Amazon URLS,查看 smtplib 的文档,并通过 StackOverFlow 查看以前解决的尝试。
我没有将其用于非法目的。我只是想学习如何进行网络爬虫。
我正在使用这个人的教程:https ://www.youtube.com/watch?v=Bg9r_yLk7VY
我有
import requests
from bs4 import BeautifulSoup
import smtplib
URL = 'https://www.amazon.com/Sony-Full-Frame-Mirrorless-Digital-Camera/dp/B00FRDUZXM'
headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4101.0 Safari/537.36 Edg/83.0.474.0'}
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 = float(price[0.5])
if(converted_price < 1.700):
send_mail()
print(converted_price)
print(title.strip())
def send_mail():
server = smtplib.SMTB('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.ehlo()
server.login('email@gmail.com', 'app password')
subject = 'Price fell down!'
body = 'check amazon!!!'
msg = f"Subject: {subject}\n\n{body}"
server.sendmail(
'email@gmail.com',
msg
)
print('HEY EMAIL SENT. ')
server.quit()
check_price()
解决方案
尝试使用不同的 HTML 解析器。我没有对此进行测试,但我认为这是解决方案。selenium 库有一个 html 解析器,或者您可以使用 html.parser 库。希望这可以帮助!
推荐阅读
- javascript - 如何在 ASP.net (.aspx) 中 5 分钟后显示按钮?
- javascript - 合并同级数组
- c++ - 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- aws-cdk - 如何执行准备工件所需的命令
- swift - 在 Swift 中使用 Prize Enum 和扩展
- bash - Apache Zeppelin ZeppelinContext 未按预期工作
- postgresql - 烧瓶无法将 postgresql 与 docker-compose 连接
- linux - /proc/id/maps 有额外的第一个条目
- sql - SQL 查询以在一个表中查找重复项,但前提是至少有一个重复项具有在不同表中的约会
- javascript - 在 React 中重置子组件中的选项卡