DaveM@13
|
1 #!/usr/bin/env python
|
DaveM@15
|
2
|
DaveM@15
|
3
|
DaveM@13
|
4 import dParse as dp
|
DaveM@13
|
5 import synastry as syn
|
DaveM@13
|
6 import requests
|
DaveM@13
|
7 import time
|
DaveM@13
|
8 import csv
|
DaveM@13
|
9 import pdb
|
DaveM@13
|
10 import os
|
DaveM@13
|
11 import pickle
|
DaveM@15
|
12 import sys
|
DaveM@13
|
13 from bs4 import BeautifulSoup
|
DaveM@13
|
14
|
DaveM@14
|
15 def parsePage(resp):
|
DaveM@15
|
16 gotLocation = 0
|
DaveM@13
|
17 horiscope = syn.planetPositions()
|
DaveM@13
|
18 soup = BeautifulSoup(resp.content, 'lxml')
|
DaveM@13
|
19 tcCell = soup.find_all('div', attrs={'class':'right-sedy-banner-svetlejsi'})
|
DaveM@13
|
20 for cell in tcCell:
|
DaveM@15
|
21 if "Planets in partner's house" in cell.get_text():
|
DaveM@15
|
22 gotLocation = 1
|
DaveM@13
|
23 divList = cell.find_all('div')
|
DaveM@13
|
24 for i in range(len(divList)):
|
DaveM@15
|
25 planetName = divList[i].getText().lower().strip().replace(':','').split(' ')[0]
|
DaveM@15
|
26 if planetName in syn.planetPositions.planetNames:
|
DaveM@15
|
27 if gotLocation and not '/' in planetName:
|
DaveM@15
|
28 horiscope.planets[planetName].setHouse(divList[i+2].getText(),divList[i+4].getText())
|
DaveM@15
|
29 else:
|
DaveM@15
|
30 horiscope.planets[planetName].setLocation(divList[i+2].getText(),divList[i+4].getText())
|
DaveM@14
|
31 return horiscope
|
DaveM@13
|
32
|
DaveM@13
|
33 def makePeople(filename):
|
DaveM@13
|
34 stream = csv.DictReader(open(filename,'rb'))
|
DaveM@13
|
35 dictList = []
|
DaveM@13
|
36 people = []
|
DaveM@13
|
37 for line in stream:
|
DaveM@13
|
38 thisPerson = syn.Person(dp.regulateData(line))
|
DaveM@13
|
39 people.append(thisPerson)
|
DaveM@13
|
40 # pdb.set_trace()
|
DaveM@13
|
41 return people
|
DaveM@13
|
42
|
DaveM@13
|
43 def requestURL(url,payload):
|
DaveM@13
|
44 r = requests.get(url, params=payload)
|
DaveM@13
|
45 time.sleep(5)
|
DaveM@13
|
46 return r
|
DaveM@13
|
47
|
DaveM@13
|
48 def loadPick(filename):
|
DaveM@13
|
49 with open(filename, 'rb') as handle:
|
DaveM@13
|
50 b = pickle.load(handle)
|
DaveM@13
|
51 return b
|
DaveM@13
|
52
|
DaveM@13
|
53 def savePick(filename,data):
|
DaveM@13
|
54 with open(filename, 'wb') as handle:
|
DaveM@13
|
55 pickle.dump(data,handle)
|
DaveM@13
|
56
|
DaveM@13
|
57 def parseHoriscope(people,saveFile):
|
DaveM@13
|
58 for person in people:
|
DaveM@15
|
59 issue = person.identifyIssues()
|
DaveM@15
|
60 if issue is not None:
|
DaveM@15
|
61 print 'SKIPPING person '+ person.id + ' error with ' + issue
|
DaveM@13
|
62 else:
|
DaveM@13
|
63 print 'parsing person '+ person.id
|
DaveM@15
|
64 person.makePayload()
|
DaveM@15
|
65 person.resp = requestURL(person.url,person.payload)
|
DaveM@15
|
66 person.horiscope = parsePage(person.resp)
|
DaveM@15
|
67 # person.horiscope.printPositions()
|
DaveM@15
|
68 if saveFile is not None:
|
DaveM@15
|
69 savePick(saveFile,people)
|
DaveM@13
|
70
|
DaveM@16
|
71 # def testMain():
|
DaveM@16
|
72 # pickFile = 'outData.pick'
|
DaveM@16
|
73 # restartDataFile = 0
|
DaveM@16
|
74 # if(restartDataFile):
|
DaveM@16
|
75 # # people = makePeople('individuals.csv')
|
DaveM@16
|
76 # # savePick(pickFile,people)
|
DaveM@16
|
77 # people = loadPick(pickFile)
|
DaveM@16
|
78 # parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
|
DaveM@16
|
79 # parseHoriscope(people,parseSaveFile)
|
DaveM@16
|
80 # else:
|
DaveM@16
|
81 # people = loadPick('outData_collect.pick')
|
DaveM@16
|
82 # comp = syn.compatibility()
|
DaveM@16
|
83 # comp.parseCompatRules('compatibilityRules.csv')
|
DaveM@16
|
84 # for person in people:
|
DaveM@16
|
85 # if person.issue is None:
|
DaveM@16
|
86 # person.score = comp.calcCompatibility(person.horiscope)
|
DaveM@16
|
87 # if person.score is None:
|
DaveM@16
|
88 # person.issue = 'None Planet Locations'
|
DaveM@16
|
89 # else:
|
DaveM@16
|
90 # print person.id,person.score
|
DaveM@16
|
91 # pdb.set_trace()
|
DaveM@13
|
92
|
DaveM@13
|
93 def _main():
|
DaveM@13
|
94 pickFile = 'outData.pick'
|
DaveM@13
|
95 if not os.path.exists(pickFile):
|
DaveM@13
|
96 people = makePeople('individuals.csv')
|
DaveM@13
|
97 savePick(pickFile,people)
|
DaveM@13
|
98 else:
|
DaveM@13
|
99 people = loadPick(pickFile)
|
DaveM@13
|
100 parseSaveFile = pickFile.split('.')[0]+'_collect.pick'
|
DaveM@16
|
101 if not os.path.exists(parseSaveFile):
|
DaveM@16
|
102 parseHoriscope(people,parseSaveFile)
|
DaveM@16
|
103 else:
|
DaveM@16
|
104 people = loadPick(parseSaveFile)
|
DaveM@16
|
105 comp = syn.compatibility()
|
DaveM@16
|
106 comp.parseCompatRules('compatibilityRules.csv')
|
DaveM@16
|
107 for person in people:
|
DaveM@16
|
108 person.score = None
|
DaveM@16
|
109 if person.issue is None:
|
DaveM@16
|
110 person.score = comp.calcCompatibility(person.horiscope)
|
DaveM@16
|
111 if person.score is None:
|
DaveM@16
|
112 person.issue = 'None Planet Locations'
|
DaveM@16
|
113 savePick('fullResults.pick',people)
|
DaveM@13
|
114
|
DaveM@13
|
115 if __name__ == "__main__":
|
DaveM@16
|
116 _main()
|