Комментарии 6
питон давно стал проблемой а не решением
Ускорил скорость…
А причем тут Python? Я думал что автор нашел необычный способ парсинга, или написал свой. А тут по сути он нашел способ как запрашивать JSON, а не парсить всю страницу?
В самом начале статьи было сказано о чем пойдет речь далее. Под конец написания я и сам задумался о названии, но пока мне сложно переименовать и перенести в ветку reverse-инженеринга, т.к. это сложно таковым назвать. Статью решил оставить, так как придумал хорошее оправдание, о котором написано в конце статьи. Уж извините, если не оправдал ваших надежд.
Спасибо за статью! Я так вайлдбериз парсю и трейдингвью. Только они не требуют никаких прокси и никакие капчи не вываливают.
привет. попробуй заменить все return на yield. Будешь сильно удивлен.
как то так:
def search(self, search_value, search_by_key, partial):
def process(data, path: str):
if isinstance(data, dict):
for key, value in data.items():
if search_by_key:
if key == search_value:
results.append(f'{path}.{key}')
prefix = '.' if path != '' else ''
if isinstance(value, dict):
process(data.get(key), f'{path}{prefix}{key}')
if isinstance(value, list):
for index, i in enumerate(value):
process(i, f'{path}{prefix}{key}[{index}]')
else:
if partial and isinstance(value, str):
if search_value in value:
yield f'{path}{prefix}{key}'
if search_value == value:
yield f'{path}{prefix}{key}'
gen = process(self.input_item, '')
result = next(gen, None)
second = next(gen, None)
return result if result and not second else chain((result, second), results)
# Для получения значения по пути вида value.items[0].name
def get_value(self, path: str):
def process(current, item):
lists = re.findall(r'[\d+]+', current)
if len(lists):
key = re.findall('[a-zA-Z]+', current)[0]
yield item.get(key)[int(lists[0])]
else:
yield item.get(current)
res = self.input_item
for i in path.split('.'):
res = process(i, res)
return res
# Для того чтобы срезать count глубины с конца пути
@staticmethod
def cut_path(path: str, count: int):
return '.'.join(path.split('.', count)[0:-1])
От парсинга к Private API. В гонке за производительностью