Сравнение записей последнего созданного файла со следующим файлом: Python Scrapping BS4 - PullRequest
0 голосов
/ 12 ноября 2018

Я проверяю эту Платформу с Selenium и BS4, я могу получить всю необходимую информацию. Проблема в том, что платформа содержит показания датчиков, и некоторые датчики не обновляются каждый день, поэтому я хочу сравнить записи последнего записанного файла со следующим файлом, который будет создан.

Пример:

Сегодня я создал файл xyz.csv, который содержит 200 записей, и завтра я выполню свой код для сбора информации, но перед созданием нового файла я хочу проверить дублирование с последним созданным файлом. Добавлено выполнение будет выполняться каждый день, так что, на мой взгляд, проверка последнего созданного файла будет хорошей, но я открыт для предложений.

Я использую следующий код для удаления информации:

# -*- coding utf-8 -*-

from selenium.webdriver.firefox.options import Options
from selenium import webdriver
import time
import os
import shutil
from bs4 import BeautifulSoup
import uuid
import csv
import dateutil.parser as parser
import pandas as pd
import re
from datetime import datetime as dt
from time import gmtime, strftime, localtime
from selenium.webdriver.support.select import Select

class crawlHydro():

    def __init__(self):
        print("hurray33")
        global downloadDir
        global uFileName
        global filname
        downloadDir = ""
        uFileName = str(uuid.uuid4())
        filname = downloadDir + uFileName + ".csv"
        pd.set_option('display.max_rows', 500)
        pd.set_option('display.max_columns', 500)
        pd.set_option('display.width', 1000)
        # Set Firefox preferences for headless crawling
        fp = webdriver.FirefoxProfile()
        fp.set_preference("browser.download.folderList", 2)
        fp.set_preference("browser.download.manager.showWhenStarting", False)
        fp.set_preference("browser.download.dir", downloadDir)
        fp.set_preference("browser.helperApps.neverAsk.saveToDisk",
                          "attachment/csv")
        options = Options()
        options.add_argument("--headless")
        # Initialize webdriver and target URL
        self.driver = webdriver.Firefox(firefox_profile=fp, firefox_options=options)
        #self.driver = webdriver.Firefox()
        print("hurray")
        self.driver.implicitly_wait(15)
        self.driver.get("http://www.epa.ie/hydronet/#Water%20Levels")
        self.verificationErrors = []
        self.accept_next_alert = True

    def crawl(self):
        print("see")
        driver = self.driver
        # Finds elements available on the target page for interaction/action
        driver.execute_script("window.scrollTo(0, 800)")
        driver.find_element_by_id("dijit_MenuItem_3_text").click()
        driver.find_element_by_xpath('//td[.="All"]').click()
        driver.find_element_by_xpath('//td[.="Active EPA/LA (239)"]').click()
        soup = BeautifulSoup(driver.page_source, 'html.parser') #Extract page content using BS4
        headers = []
        valueArr = 'LastReadTime'
        for m in soup.find_all("th"):
            headers.append(m.get_text())
        headers.append(valueArr)
        #print(headers)
        new_data = [[c.text.rstrip(" km²") for c in i.find_all('td')]  for i in soup.find_all('table')[5::]] #Extract table content i.e. column and rows
        new_data = [[dt.strptime(i, '%d-%m-%Y %H:%M').strftime('%d-%m-%YT%H:%M+00') if re.match("\d{2}-\d{2}-\d{4}\s\d{2}:\d{2}",i) else i for i in m] for m in new_data] # Convert time to ISO 8601
        timerecorded = strftime("%Y-%m-%dT%H:%M+00", gmtime())
        value = timerecorded
        finalDataList = []
        """Loops removes unnecessary rows"""
        for row in range(len(new_data) - 4):
            finalDataList.append(new_data[row])
        print(finalDataList)

        with open(filname, 'w', newline='') as f:
            writer = csv.writer(f)
            writer.writerow(headers)
            writer.writerows(finalDataList)
        driver.close()
        driver.quit()
        # os.system('pkill firefox')
        # os.system('pkill plugin-container')
        # os.system('pkill geckodriver')clear

if __name__ == '__main__':
    obj = crawlHydro()
    obj.crawl()

Может ли кто-нибудь помочь мне следовать в правильном направлении?

...