1045
Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs
здесь угадывается и переназначается type https://github.com/scrapy/scrapy/blob/master/scrapy/selector/unified.py#L90-L97
if type is None:
...
elif response is None or isinstance(response, HtmlResponse):
type = "html" # noqa: A001
super().__init__(text=text, type=type, **kwargs)
в мастере так же, короче мне влом ковыряться, пишите багу
Читать полностью…
можно просто импортировать жмеспат и юзать jmespath.search()
Читать полностью…
In [33]: sel = scrapy.Selector(text='{"f":false}')
In [34]: sel.type
Out[34]: 'json'
In [35]: sel.response.text
Out[35]: '{"f":false}'
In [36]: sel.jmespath("f").get()
Out[36]: '0'
Читать полностью…
Ожидаемый да, мне непонятно почему так, неужели из-за того какой там type передался в parsel.Selector
Читать полностью…
В этой фигне много острых углов, да, на первом релизе было больше
Правда я не понимаю что происходит в этом примере
в последнем релизе сигнатура str | None, но погляжу что в релиз-кандидате.
спасибо
@wrar42
В текущей версии parsel у SelectorList.get() вот такая сигнатура:
@typing.overload
def get(self, default: None = None) -> str | None:
pass
@typing.overload
def get(self, default: str) -> str:
pass
def get(self, default: str | None = None) -> Any:
jmespath(...).get() может возвращать любой json-тип:>>> type(parsel.Selector('{"foo": 1}').jmespath("foo").get())
int
@timofeey_belousov, пожалуйста, нажмите на кнопку ниже в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек)
При поддержке 1inch
точнее не ковыряться, проблема явно в том что type=html, мне думать влом, я над этой логикой уже два раза думал в этом году
Читать полностью…
На всякий случай уточню - в примере селектор создается из текста для простоты демонстрации, баг найден в реальной жизни, с реальными респонзами, там это примерно так
page_props = response.css("#__NEXT_DATA__").jmespath("props.pageProps")
if page_props.jmespath("hasSales").get() is not True:
return
Читать полностью…
Raw HTML is always text.
А жмес был прикручен к легаси коду
Это недавно меняли в мастере, но не уверен есть ли разница когда респонса нет
Читать полностью…
Ожидаемый результат - True, а никак не "1" (строка).
Еще более веселый результат - это получить "0" (строку) вместо False:
In [31]: scrapy.Selector(text='{"f":false}', type="json").jmespath("f").get()
Out[31]: '0'In [32]: bool('0')
Out[32]: True
Читать полностью…
вот еще очень неприятный баг
In [1]: import parsel, scrapy
In [2]: scrapy.__version__
Out[2]: '2.17.0'
In [3]: parsel.__version__
Out[3]: '1.11.0'
In [4]: parsel.Selector(text='{"f":true}').jmespath("f").get()
Out[4]: True
In [5]: scrapy.Selector(text='{"f":true}').jmespath("f").get()
Out[5]: '1'
if f is True попила крови
Читать полностью…
Игорь, пожалуйста, нажмите на кнопку ниже в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек)
При поддержке 1inch
За 5к вы бы уже через ИИ порешали домашние дела )) ведь он всемогуч и как раз в том диапазоне оплаты труда
Читать полностью…