Python3 - Web Scraper с BeautifulSoup, оповещение о цене по электронной почте - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь настроить скрипт для отправки мне электронного письма, когда телефон соответствует моему порогу цены и состояния на swappa.com.Я дошел до того, что могу отправить по электронной почте последнее сообщение, которое соответствует моим критериям, но я немного постучался.Мне нужно, чтобы электронное письмо отправлялось мне только тогда, когда новый пост соответствует моим критериям.В настоящее время он будет отправлять мне электронное письмо при каждом запуске скрипта, независимо от того, является ли список новым.

Я очень плохо знаком с Python и провел большую часть вчера и сегодня, ковыряя этот скрипт, но любойпонимание и информация, которые помогли бы достичь моей цели, будут высоко оценены!

from bs4 import BeautifulSoup
import re
import requests
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# define the url in a variable and get the content
page_url = 'https://swappa.com/buy/google-pixel-2-xl-unlocked?sort=date_min'
page_content = requests.get(page_url)

# Put the content into a variable using BeautifulSoup
swappa = BeautifulSoup(page_content.text, 'html.parser')

# Pull text from the h1 tag
phone_name = swappa.h1

# Pull the device details into a list
condition = swappa.find(class_='condition_label')
color = swappa.find(class_='color_label')
storage = swappa.find(class_='storage_label')
price = swappa.find(class_='price')

links = []

for link in swappa.findAll('a', attrs={'href': re.compile("^/listing")}):
    links.append(link.get('href'))


listing_detail = [
    phone_name.contents[0], condition.contents[0], color.contents[0], storage.contents[0],
    '$' + price.contents[1], 'https://swappa.com' + links[0]
    ]


def listing_result():
    if (price.contents[1] <= '420') and (condition.contents[0] == 'Good' or condition.contents[0] == 'Mint'):
        return listing_detail


with open("result.txt", "w+") as result_file:
    result_file.write(str(listing_result()))


with open('result.txt', 'r') as result_file_read:
    result_data = result_file_read.read().replace('\n', '')

if result_data != result_file:
    #  setup sending an email via SMTP
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.login("redacted", "redacted")

    # use mime to send email
    msg = MIMEMultipart()

    # setup parameters of the email
    msg['From'] = 'redacted'
    msg['To'] = 'redacted'
    msg['Subject'] = 'Swappa - New Pixel 2 XL Listing'

    # add in the message body
    body = str(listing_result())
    body = MIMEText(body) # convert the body to a MIME compatible string
    msg.attach(body) # attach it to your main message

    # send the email
    server.send_message(msg)
    del msg

Моя идея состояла в том, чтобы последний листинг был отправлен в текстовый файл, а затем содержимое этого текстового файла было сохранено в переменной.чтобы я мог сравнить его с создаваемым текстом.Однако я не знаю, как этого добиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...