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: 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@16: # def testMain(): DaveM@16: # pickFile = 'outData.pick' DaveM@16: # restartDataFile = 0 DaveM@16: # if(restartDataFile): DaveM@16: # # people = makePeople('individuals.csv') DaveM@16: # # savePick(pickFile,people) DaveM@16: # people = loadPick(pickFile) DaveM@16: # parseSaveFile = pickFile.split('.')[0]+'_collect.pick' DaveM@16: # parseHoriscope(people,parseSaveFile) DaveM@16: # else: DaveM@16: # people = loadPick('outData_collect.pick') DaveM@16: # comp = syn.compatibility() DaveM@16: # comp.parseCompatRules('compatibilityRules.csv') DaveM@16: # for person in people: DaveM@16: # if person.issue is None: DaveM@16: # person.score = comp.calcCompatibility(person.horiscope) DaveM@16: # if person.score is None: DaveM@16: # person.issue = 'None Planet Locations' DaveM@16: # else: DaveM@16: # print person.id,person.score DaveM@16: # pdb.set_trace() DaveM@13: DaveM@13: def _main(): DaveM@13: pickFile = 'outData.pick' DaveM@13: if not os.path.exists(pickFile): DaveM@13: people = makePeople('individuals.csv') DaveM@13: savePick(pickFile,people) DaveM@13: else: DaveM@13: people = loadPick(pickFile) DaveM@13: parseSaveFile = pickFile.split('.')[0]+'_collect.pick' DaveM@16: if not os.path.exists(parseSaveFile): DaveM@16: parseHoriscope(people,parseSaveFile) DaveM@16: else: DaveM@16: people = loadPick(parseSaveFile) DaveM@16: comp = syn.compatibility() DaveM@16: comp.parseCompatRules('compatibilityRules.csv') DaveM@16: for person in people: DaveM@16: person.score = None DaveM@16: if person.issue is None: DaveM@16: person.score = comp.calcCompatibility(person.horiscope) DaveM@16: if person.score is None: DaveM@16: person.issue = 'None Planet Locations' DaveM@16: savePick('fullResults.pick',people) DaveM@13: DaveM@13: if __name__ == "__main__": DaveM@16: _main()