X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=scrape-item-data.py;h=e78883710705105a06b1127f9d16bafabc14c155;hb=14294b0b2b0cf7cc8aa2c854d612378211057b1a;hp=0334898ac4aff96637146b474470860b0eca319d;hpb=46302456fbb953cd0c9f3269b9c26ab2e4e513ec;p=poefilter.git diff --git a/scrape-item-data.py b/scrape-item-data.py index 0334898..e788837 100755 --- a/scrape-item-data.py +++ b/scrape-item-data.py @@ -3,6 +3,7 @@ import requests import html.parser import codecs +import argparse class Item: def __init__(self, name, kind): @@ -37,14 +38,15 @@ class Item: return 0 def check_upgrade(self, other): - if self.droplevel<=other.droplevel: - return if not self.is_compatible(other): return mods = self.compare_mods(other) attrs = self.compare_attrs(other) + if self.droplevel0 or (mods==0 and attrs>0): other.upgrades["mods"] = self @@ -149,6 +151,10 @@ class ItemDataParser(html.parser.HTMLParser): self.current_item.check_upgrade(it) elif tag=="h1": self.in_heading = False + elif tag=="html": + for i in range(1, len(self.items)): + for j in range(i): + self.items[j].check_upgrade(self.items[i]) def handle_data(self, data): data = data.strip() @@ -157,6 +163,8 @@ class ItemDataParser(html.parser.HTMLParser): if self.in_heading: self.current_heading = data + if self.current_heading=="Staff": + self.current_heading = "Stave" self.headings.append(self.current_heading) elif self.in_items_table and self.in_cell: if self.mod_row: @@ -237,11 +245,59 @@ def write_best_category(out, prefix, items, steps): out.write("\t\t};\n") out.write("\t};\n};\n") +def print_debug(items): + upgrades = set() + for it in items: + for u in it.upgrades.values(): + if u: + upgrades.add(u.name) + + printed = set() + + queue = [] + while 1: + for it in items: + if it.name not in upgrades and it.name not in printed: + queue.append(it) + break + + if not queue: + break + + while queue: + it = queue.pop(0) + if it.name in printed: + continue + printed.add(it.name) + + print(it.name) + print(" level: {}".format(it.droplevel)) + if isinstance(it, Armor): + print(" armor: {}".format(it.armor)) + print(" evasion: {}".format(it.evasion)) + print(" energy shield: {}".format(it.energy_shield)) + elif isinstance(it, Weapon): + print(" dps: {}".format(it.dps)) + for n, v in it.mods.items(): + print(" {}: {}".format(n, v)) + for t, u in it.upgrades.items(): + if u: + print(" upgrade {}: {}".format(t, u.name)) + if u.name not in printed: + queue.insert(0, u) + def main(): + parser = argparse.ArgumentParser() + parser.add_argument("-g", "--debug", action="store_true", dest="debug") + args = parser.parse_args() + r = requests.get("https://www.pathofexile.com/item-data/armour") p = ArmorDataParser() p.feed(codecs.decode(r.content, r.encoding)) + if args.debug: + print_debug(p.items) + types = {"robe": lambda i: (not i.armor and not i.evasion and i.energy_shield), "cloth": lambda i: (not i.armor and i.evasion and i.energy_shield), "leather": lambda i: (not i.armor and i.evasion and not i.energy_shield), @@ -256,23 +312,6 @@ def main(): for i in range(1, 3): write_best_category(out, "armor.{}".format(t), items, i) - """out.write('category "armor.{}.{}_at_level"\n'.format(t, best[i-1])) - out.write("{\n\tor\n\t{\n") - for it in items: - next_level = 0 - n = it.name - for k in range(i): - n = p.upgrades.get(n, "") - if n: - next_level = p.items[n].droplevel - if next_level: - out.write("\t\tand\n\t\t{\n") - out.write('\t\t\tbase_type "{}";\n'.format(it.name)) - out.write("\t\t\tmax_item_level {};\n".format(next_level-1)) - out.write("\t\t};\n") - else: - out.write('\t\tbase_type "{}";\n'.format(it.name)) - out.write("\t};\n};\n")""" out.write('category "armor.{}"\n'.format(t)) out.write("{\n\tor\n\t{\n") @@ -289,6 +328,9 @@ def main(): p = WeaponDataParser() p.feed(codecs.decode(r.content, r.encoding)) + if args.debug: + print_debug(p.items) + out = open("weapons.txt", "w") for h in p.headings: