Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 15, 2015 09:52:01

bayah
Зарегистрирован: 2015-08-09
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab не загружает полностью страницу

terabayt
посмотрите код что возвр сервер с помощью urllib или чего-то подобного
>>> x = urllib.request.urlopen("http://technopoint.ru/catalog/defect")
>>> print(x.read())

Собственно urllib возвращает то же самое, что и grab через g.response.body.
А именно там всего 2 тега fieldset. Остальные не показывает.
Это может зависеть от версии библиотек и самого Пайтона?

Офлайн

#2 Авг. 15, 2015 12:04:09

bayah
Зарегистрирован: 2015-08-09
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab не загружает полностью страницу

Все чуваки, разобрался, дело было в кукисах.
Если удалить их, то по ссылке уценки (http://technopoint.ru/catalog/defect), даже ничего не грузится. Потом если зайти на главную страничку (http://technopoint.ru), отсылаются куки и после этого уже можно загружать уценку.

Короче я просто нафигачил все куки с сайта и все сработало:

>>> g.setup(cookies={'_ga':'GA1.2.1032735933.1439625163','_gat':'1','YII_CSRF_TOKEN':'1bf250e0e175cab31fc99ab676475c252713f45a','__CITY__':'5','_ym_visorc_22425643':'w','city_id':'cd4f69249bbb7ab7c590556d5a4fd8de4e096ebfs%3A1%3A%225%22%3B','showcase_category_id':'2261','tp_session':'k1d7b8cvj8ir8oq75o47a8m805'})
>>> g.go('http://technopoint.ru/catalog/defect')
<grab.document.Document object at 0x00000000038E3048>
>>> for i in g.doc.select('//fieldset/legend/a/text()').selector_list:
	print(i.text())
	
Настольные ПК
Моноблоки
Мониторы
Цифровые фоторамки
Смартфоны
Автосабвуферы
Резаки
Микроволновые печи
Все 9 товаров
Пылесосы
Все 8 товаров
Мультиварки
Все 13 товаров
Утюги
Все 6 товаров
Фены
Швейные машины
Чайники электрические
Все 42 товара
Стиральные машины
Плиты электрические
Усилители
Посудомоечные машины
Вытяжки
Водонагреватели электрические
Все 8 товаров
Йогуртницы
Грили
Вентиляторы
Все 14 товаров
Кофемашины
Электрощипцы
Мойки высокого давления
Шуруповерты
Конвекторы
Обогреватели
Тепловентиляторы
Колонки 2.0
Звуковые карты
Блендеры
Соковыжималки
Миксеры
Кофеварки
Термопоты
Брошюровщики
Уничтожители бумаг
Ламинаторы
Безопасность компьютера
Чехлы для планшетов
Чехлы для смартфонов
Компактные электропечи
Угловые шлифовальные машины
Холодильники встраиваемые
Осушители воздуха
Электрические духовые шкафы
Плитки электрические
Увлажнители воздуха
Пароочистители
Сковороды
Кастрюли
Пылесосы-роботы
Шашлычницы электрические
Измельчители
Дрели безударные
Маршрутизаторы
Часы настенные
Сварочные аппараты
Автомобильные аккумуляторы
Вафельницы электрические
Столы для ТВ и Hi-FI техники
Паровые швабры
Маникюрные наборы
Снегоуборщики
Отпариватели
Электрические варочные поверхности
Холодильники полноразмерные
Газовые тепловые пушки
Нивелиры лазерные
Гарнитуры беспроводные
Сэндвичницы
Светильники декоративные
Сапоги
Сушилки для белья
Аксессуары к блендерам
Наушники с микрофоном
Стиральные машины
Утюги
Все 6 товаров
Швейные машины
Пароочистители
Отпариватели
Сушилки для белья
Гарнитуры беспроводные
Колонки 2.0
Наушники с микрофоном
Инфракрасные обогреватели
Мойки высокого давления

Офлайн

#3 Авг. 15, 2015 13:51:55

bayah
Зарегистрирован: 2015-08-09
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab не загружает полностью страницу

Появился дополнительный вопрос. Допустим, если я не хочу куки сам загружать, то я могу их получить с сервера с главной страницы ведь?
Для этого ставлю, чтобы полученные куки отправлялись в следующие запросы. Делаю это таким образом, но не получается:

>>> g.setup(reuse_cookies = True)
>>> g.go('http://technopoint.ru/')
<grab.document.Document object at 0x00000000037F3908>
>>> g.go('http://technopoint.ru/catalog/defect')
<grab.document.Document object at 0x00000000037F34A8>
>>> g.doc.tree.xpath('//fieldset/legend/a/text()')
['Шашлычницы электрические', 'Холодильники полноразмерные']

Что не так?

Офлайн

#4 Авг. 16, 2015 06:55:11

bayah
Зарегистрирован: 2015-08-09
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Grab не загружает полностью страницу

Что-то меня уже выбешивает эта библиотека. Хз как на ней что-то сделать.
Документация не разъясняет вообще.
Например, если я ставлю

g.setup(post = {'id':'5', 'YII_CSRF_TOKEN':g.cookies.__getitem__('YII_CSRF_TOKEN')})

Это значит, что на каждый в дальнейшем запрос g.go('Какой-то адресс') будет совершаться post запрос?
Или только на первый?
А как узнать что будет слаться?
Если использовать g.request_method, то он возвращает вообще GET, тогда как в документации написано, установка через g.setup параметра post сразу устанавливает метод запроса POST.
Или то что возвращает g.request_method не имеет отношения к тому какой запрос будет делаться. Тогда что это?
Как посмотреть то, что будет отправляться перед непосредственным выполнением?

Офлайн

#5 Авг. 16, 2015 10:59:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Grab не загружает полностью страницу

bayah
Это значит, что на каждый в дальнейшем запрос g.go('Какой-то адресс') будет совершаться post запрос?
Или только на первый?
А как узнать что будет слаться?
Поставь Wireshark



Офлайн

#6 Авг. 17, 2015 11:08:51

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Grab не загружает полностью страницу

>>> g.setup(reuse_cookies = True)
Это лишнее. Опция `reuse_cookies` по-умолчанию в True выставлена.

Что-то меня уже выбешивает эта библиотека.
Посмотрите python-requests библиотеку, там документация подробнее, чем в Grab. Она больше подходит для тех, кто не умеет пользоваться снифером и читать исходный код библиотеки, которую он использует.

Это значит, что на каждый в дальнейшем запрос g.go('Какой-то адресс') будет совершаться post запрос?
Или только на первый?
А как узнать что будет слаться?
Только в первый.
Смотреть трафик можно сниферами. Также в грабе есть несколько инструментов для дебагинга. Смотрите http://docs.grablib.org/en/latest/grab/debugging.html

Если использовать g.request_method, то он возвращает вообще GET, тогда как в документации написано, установка через g.setup параметра post сразу устанавливает метод запроса POST.
Или то что возвращает g.request_method не имеет отношения к тому какой запрос будет делаться. Тогда что это?
Зачем вы используете `request_method`? Разве он описан в документации? Это не метод, а аттрибут, кстати.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version