2015-03-06 3 views
2

Я пытаюсь написать простой скрипт, который выполняет следующие действия:Проверка веб-сайтов для обновления (Web Automation с Python + Selenium)

  1. автоматически запускается каждые 6 часов
  2. Проверки Сайт недвижимости для новых предложений
  3. Email новые списки деталей если найдено, иначе не прекращает сценарий до следующего запуска

Я планирую использовать кронтаб для execut e (1). Кроме того, это сценарий я придумал до сих пор для одного конкретного сайта:

from selenium import webdriver 
import smtplib 
import sys 

driver = webdriver.Firefox() 

#Capital Pacific Website 
#Commerical Real Estate 

#open text file containing property titles we already know about 
properties = open("properties.txt", "r+") 
currentList = [] 
for line in properties: 
    currentList.append(line) 

#to search for new listings 
driver.get("http://cp.capitalpacific.com/Properties") 

assert "Capital" in driver.title 

#holds any new listings 
newProperties = [] 

#find all listings on page by Property Name 
newList = driver.find_elements_by_class_name('overview') 

#find elements in pageList not in oldList & add to newList 
#add new elements to 
for x in currentList: 
    for y in newList: 
     if y != x: 
      newProperties.append(y) 
      properties.write(y) 

properties.close() 
driver.close() 

#if no new properties found, terminate script 
#else, email properties 
if not newProperties: 
    sys.exit() 
else: 
    fromaddr = '[email protected]' 
    toaddrs = ['[email protected]'] 
    server = smtplib.SMTP('smtp.gmail.com:587') 
    server.starttls() 

    for item in newProperties: 
     msg = item 
     server.sendmail(fromaddr, toaddrs, msg) 

    server.quit() 

вопросов, которые я до сих пор: (пожалуйста, медведь со мной здесь, как я питон начинающий ..)

Использование списка для хранения веб-элементов, возвращаемых с помощью метода «найти по классу» selenium: есть ли лучший способ записи в/из текстового файла, чтобы я только получил новые добавленные свойства?

Если скрипт находит свойство класса, которое присутствует на веб-сайте, но не в newList, существует ли способ, которым я могу пройти этот div, только чтобы получить информацию о листинге?

Любые предложения/рекомендации, пожалуйста! Спасибо.

ответ

0

Что делать, если вы перейти на использование JSON списков форматов, имеющие хранимые в словарях:

[ 
    { 
     "location": "REGON CITY, OR", 
     "price": 33000000, 
     "status": "active", 
     "marketing_package_url": "http://www.capitalpacific.com/inquiry/TrailsEndMarketplaceExecSummary.pdf" 
     ... 
    }, 
    ... 
] 

Вы должны что-то уникальное о каждой собственности, чтобы определить новые объявления. Например, вы можете использовать URL-адрес маркетингового пакета для него - выглядит уникально для меня.

Ниже приведен пример кода для получения списка объявления на странице:

properties = [] 
for property in driver.find_elements_by_css_selector('table.property div.property'): 
    title = property.find_element_by_css_selector('div.title h2') 
    location = property.find_element_by_css_selector('div.title h4') 
    marketing_package = property.find_element_by_partial_link_text('Marketing Package') 

    properties.append({ 
     'title': title.text, 
     'location': location.text, 
     'marketing_package_url': marketing_package.getAttribute('href') 
    }) 
+0

спасибо за ответ. Я признаю, что JSON - это, вероятно, путь, но я не очень хорошо знаком с этим. Вы рекомендуете импортировать json-файлы в скрипт в список? Как тогда вы могли бы получить доступ к URL-адресу маркетингового пакета в списке для сравнения для новых объявлений? – tsnn2d

+0

@RobertOttolia Я думаю, что если вы поедете с JSON, модуль 'json' поможет загрузить и выгрузить файл. Хотя я бы действительно подумал о том, что у вас есть нормальная реальная база данных для хранения списков. – alecxe

+0

@RobertOttolia, говорящий о URL-адресе маркетингового пакета, добавлен в фрагмент кода, проверьте его. – alecxe

Смежные вопросы