DaveM@13: #!/usr/bin/env python DaveM@15: DaveM@15: DaveM@13: import dParse as dp DaveM@13: import synastry as syn DaveM@13: import requests DaveM@13: import time DaveM@13: import csv DaveM@13: import pdb DaveM@13: import os DaveM@13: import pickle DaveM@15: import sys DaveM@13: from bs4 import BeautifulSoup DaveM@13: DaveM@14: def parsePage(resp): DaveM@15: gotLocation = 0 DaveM@13: horiscope = syn.planetPositions() DaveM@13: soup = BeautifulSoup(resp.content, 'lxml') DaveM@13: tcCell = soup.find_all('div', attrs={'class':'right-sedy-banner-svetlejsi'}) DaveM@13: for cell in tcCell: DaveM@15: if "Planets in partner's house" in cell.get_text(): DaveM@15: gotLocation = 1 DaveM@13: divList = cell.find_all('div') DaveM@13: for i in range(len(divList)): DaveM@15: planetName = divList[i].getText().lower().strip().replace(':','').split(' ')[0] DaveM@15: if planetName in syn.planetPositions.planetNames: DaveM@15: if gotLocation and not '/' in planetName: DaveM@15: horiscope.planets[planetName].setHouse(divList[i+2].getText(),divList[i+4].getText()) DaveM@15: else: DaveM@15: horiscope.planets[planetName].setLocation(divList[i+2].getText(),divList[i+4].getText()) DaveM@14: return horiscope DaveM@13: DaveM@13: def makePeople(filename): DaveM@13: stream = csv.DictReader(open(filename,'rb')) DaveM@13: dictList = [] DaveM@13: people = [] DaveM@13: for line in stream: DaveM@13: thisPerson = syn.Person(dp.regulateData(line)) DaveM@13: people.append(thisPerson) DaveM@13: # pdb.set_trace() DaveM@13: return people DaveM@13: DaveM@13: def requestURL(url,payload): DaveM@13: r = requests.get(url, params=payload) DaveM@13: time.sleep(5) DaveM@13: return r DaveM@13: DaveM@13: def loadPick(filename): DaveM@13: with open(filename, 'rb') as handle: DaveM@13: b = pickle.load(handle) DaveM@13: return b DaveM@13: DaveM@13: def savePick(filename,data): DaveM@13: with open(filename, 'wb') as handle: DaveM@13: pickle.dump(data,handle) DaveM@13: DaveM@13: def parseHoriscope(people,saveFile): DaveM@13: horiscopeList = [] DaveM@13: for person in people: DaveM@15: issue = person.identifyIssues() DaveM@15: if issue is not None: DaveM@15: print 'SKIPPING person '+ person.id + ' error with ' + issue DaveM@13: else: DaveM@13: print 'parsing person '+ person.id DaveM@15: person.makePayload() DaveM@15: person.resp = requestURL(person.url,person.payload) DaveM@15: person.horiscope = parsePage(person.resp) DaveM@15: # person.horiscope.printPositions() DaveM@15: if saveFile is not None: DaveM@15: savePick(saveFile,people) DaveM@13: DaveM@13: def testMain(): DaveM@15: restartDataFile = 1 DaveM@15: if(restartDataFile): DaveM@15: pickFile = 'outData.pick' DaveM@15: # people = makePeople('individuals.csv') DaveM@15: # savePick(pickFile,people) DaveM@15: people = loadPick(pickFile) DaveM@15: parseSaveFile = pickFile.split('.')[0]+'_collect.pick' DaveM@15: parseHoriscope(people,parseSaveFile) DaveM@15: else: DaveM@15: people = loadPick('onlineDatacollect.pick') DaveM@15: for p in people: DaveM@15: if p.horiscope is None: DaveM@15: print p.id DaveM@15: else: DaveM@15: p.horiscope.calcAllAspects() DaveM@15: DaveM@13: # horiscopeData = presentResults(parseSaveFile) DaveM@13: # comRules = comp.parseCompatDef('compatibilityRules.csv') DaveM@13: # applyCompatScore(horiscopeData,rules) DaveM@13: DaveM@13: def _main(): DaveM@13: pickFile = 'outData.pick' DaveM@13: # people = dict() DaveM@13: if not os.path.exists(pickFile): DaveM@13: print 'reParse file' DaveM@13: people = makePeople('individuals.csv') DaveM@13: savePick(pickFile,people) DaveM@13: else: DaveM@13: print 'read in ' + pickFile DaveM@13: people = loadPick(pickFile) DaveM@13: parseSaveFile = pickFile.split('.')[0]+'_collect.pick' DaveM@13: parseHoriscope(people,parseSaveFile) DaveM@13: horiscopeData = presentResults(parseSaveFile) DaveM@13: comRules = comp.parseCompatDef('compatibilityRules.csv') DaveM@13: applyCompatScore(horiscopeData,rules) DaveM@13: DaveM@13: if __name__ == "__main__": DaveM@13: testMain()