Найти - Пользователи
Полная версия: Grab не загружает полностью страницу
Начало » Python для новичков » Grab не загружает полностью страницу
1 2
bayah
terabayt
посмотрите код что возвр сервер с помощью urllib или чего-то подобного
>>> x = urllib.request.urlopen("http://technopoint.ru/catalog/defect")
>>> print(x.read())

Собственно urllib возвращает то же самое, что и grab через g.response.body.
А именно там всего 2 тега fieldset. Остальные не показывает.
Это может зависеть от версии библиотек и самого Пайтона?
bayah
Все чуваки, разобрался, дело было в кукисах.
Если удалить их, то по ссылке уценки (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
Наушники с микрофоном
Инфракрасные обогреватели
Мойки высокого давления
bayah
Появился дополнительный вопрос. Допустим, если я не хочу куки сам загружать, то я могу их получить с сервера с главной страницы ведь?
Для этого ставлю, чтобы полученные куки отправлялись в следующие запросы. Делаю это таким образом, но не получается:

>>> 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()')
['Шашлычницы электрические', 'Холодильники полноразмерные']

Что не так?
bayah
Что-то меня уже выбешивает эта библиотека. Хз как на ней что-то сделать.
Документация не разъясняет вообще.
Например, если я ставлю
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 не имеет отношения к тому какой запрос будет делаться. Тогда что это?
Как посмотреть то, что будет отправляться перед непосредственным выполнением?
py.user.next
bayah
Это значит, что на каждый в дальнейшем запрос g.go('Какой-то адресс') будет совершаться post запрос?
Или только на первый?
А как узнать что будет слаться?
Поставь Wireshark
lorien
>>> 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`? Разве он описан в документации? Это не метод, а аттрибут, кстати.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB