-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathbuildSnares.py
118 lines (101 loc) · 3.62 KB
/
buildSnares.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
from bs4 import BeautifulSoup
import requests
import json
import datetime
import codecs
import time
snareHolder = {}
snareHolder['name'] = 'Pathfinder 2.0 snares list'
snareHolder['date'] = datetime.date.today().strftime("%B %d, %Y")
def get_single(link):
details = {}
itemDetails = {}
res2 = requests.get(link)
res2.raise_for_status()
soup2 = BeautifulSoup(res2.text, 'lxml')
detail = soup2.find(lambda tag: tag.name=='span' and tag.has_attr('id') and tag['id']=="ctl00_MainContent_DetailedOutput")
traits = detail.find_all("span", {"class" : lambda L: L and L.startswith('trai')})
traitHolder = []
for trait in traits:
traitHolder.append(trait.text)
details['traits'] = traitHolder
children = detail.contents
reachedBreak = False
detailHolder = []
tagType = ""
for child in children:
stringContents = str(child)
if stringContents.startswith("<"):
if child.name == "h1":
name = child.text
start = name.find("Item")
details['name'] = name[0:start].strip()
if child.name == "hr":
tagType = ""
reachedBreak = True
if child.name == "a":
try:
if child['class'][0] == "external-link" :
details['source'] = child.text
except:
pass
tagType = ""
if child.name == "b":
if(child.text != "Source"):
tagType = child.text
if child.name == "img":
details['actions'] = child['alt']
if child.name == "i":
if(reachedBreak):
detailHolder.append(child.text)
#else:
#if not stringContents.isspace() :
#detailHolder.append(child.text)
else:
if reachedBreak:
if tagType != "":
if not stringContents.isspace():
details[tagType] = stringContents
else:
if not stringContents.isspace() :
detailHolder.append(stringContents)
else:
if tagType != "":
if not stringContents.isspace():
details[tagType] = stringContents
#print(child)
details['text'] = detailHolder
return details
def get_snares(link):
items = []
multiItems = []
res2 = requests.get(link)
res2.raise_for_status()
soup2 = BeautifulSoup(res2.text, 'lxml')
item = soup2.find_all("div", {'class':'main'})
table = soup2.find(lambda tag: tag.name=='table' and tag.has_attr('id') and tag['id']=="ctl00_MainContent_TreasureElement")
rows = table.findAll(lambda tag: tag.name=='tr')
t = 0
for row in rows:
t += 1
#print(row)
#print("-----------------------------------")
item = {}
entries = row.find_all(lambda tag: tag.name=='td')
if entries is not None:
if len(entries) > 0:
singleLink = "https://2e.aonprd.com/"+entries[0].find("a")['href']
items.append(get_single(singleLink))
#if t > 5:
#break
return items
def get_all():
snareHolder['snares'] = get_snares("https://2e.aonprd.com/Equipment.aspx?Category=31")
return snareHolder
#print(get_all())
json_data = json.dumps(get_all(), indent=4)
#print(json_data)
filename = "snares-pf2.json"
f = open(filename, "w")
f.write(json_data)
f.close