scrapy_python | Unsorted

Telegram-канал scrapy_python - Scrapy

1045

Чат создан чтобы делиться опытом о Scrapy/Python и другими парсинг технологиями. Вежливость и уважение к другим участникам группы. Троллинг не приветствуется. FAQ: https://github.com/bulatbulat48/ru-scrapy-python Работа: t.me/scrapy_jobs

Subscribe to a channel

Scrapy

Понял, это капча от бота, не отвечаю.

Читать полностью…

Scrapy

Премиумное обслуживание получилось

Читать полностью…

Scrapy

ну анализ-то всё равно пригодится

Читать полностью…

Scrapy

здесь угадывается и переназначается 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

но у подселекторов response=None и type форсится на html

если здесь https://github.com/scrapy/scrapy/blob/master/scrapy/selector/unified.py#L111
        super().__init__(text=text, type=type, **kwargs)

использовать не угаданный type, а оригинальный, переданный функции (в аргументах), то должно работать как надо

Читать полностью…

Scrapy

в мастере так же, короче мне влом ковыряться, пишите багу

Читать полностью…

Scrapy

можно просто импортировать жмеспат и юзать jmespath.search()

Читать полностью…

Scrapy

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'

Читать полностью…

Scrapy

Ожидаемый да, мне непонятно почему так, неужели из-за того какой там type передался в parsel.Selector

Читать полностью…

Scrapy

ну и что там по этому поводу написано?

Читать полностью…

Scrapy

В этой фигне много острых углов, да, на первом релизе было больше
Правда я не понимаю что происходит в этом примере

Читать полностью…

Scrapy

это самый простой вариант

Читать полностью…

Scrapy

в последнем релизе сигнатура str | None, но погляжу что в релиз-кандидате.
спасибо

Читать полностью…

Scrapy

@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

и pylance в vscode матерится на вполне валидные выражения. Ишью писать лень, но поделиться хотелось.

Читать полностью…

Scrapy

@timofeey_belousov, пожалуйста, нажмите на кнопку ниже в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек)
При поддержке 1inch

Читать полностью…

Scrapy

https://github.com/scrapy/itemadapter/pull/125

Читать полностью…

Scrapy

https://docs.scrapy.org/en/2.18/news.html

Читать полностью…

Scrapy

https://github.com/scrapy/scrapy/issues/8038

Читать полностью…

Scrapy

другого ответа и не ждал :)

Читать полностью…

Scrapy

точнее не ковыряться, проблема явно в том что type=html, мне думать влом, я над этой логикой уже два раза думал в этом году

Читать полностью…

Scrapy

На всякий случай уточню - в примере селектор создается из текста для простоты демонстрации, баг найден в реальной жизни, с реальными респонзами, там это примерно так

        page_props = response.css("#__NEXT_DATA__").jmespath("props.pageProps")
if page_props.jmespath("hasSales").get() is not True:
return

Читать полностью…

Scrapy

Raw HTML is always text.
А жмес был прикручен к легаси коду

Читать полностью…

Scrapy

Это недавно меняли в мастере, но не уверен есть ли разница когда респонса нет

Читать полностью…

Scrapy

Ожидаемый результат - 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

Читать полностью…

Scrapy

может документацию читать нужно?

Читать полностью…

Scrapy

вот еще очень неприятный баг

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 попила крови

Читать полностью…

Scrapy

а поставить -> Any совсем коряво будет?

Читать полностью…

Scrapy

вроде уже даже смержили это

Читать полностью…

Scrapy

Игорь, пожалуйста, нажмите на кнопку ниже в течение указанного времени, иначе вы будете кикнуты. Спасибо! (60 сек)
При поддержке 1inch

Читать полностью…

Scrapy

За 5к вы бы уже через ИИ порешали домашние дела )) ведь он всемогуч и как раз в том диапазоне оплаты труда

Читать полностью…

Scrapy

https://github.com/scrapy/itemadapter/issues/124

Читать полностью…
Subscribe to a channel