Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 29, 2012 16:43:29

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль Grab

plusplus
P.S. Вообще меня так задело, наверное больше даже чем lorien'a, я им столько скриптов написал, он мне такую кучу времени сэкономил, и тут такое резюме: “модуль оооочень сырой”, просто facepalm вообще
Не хотел этого делать. Извините. Перечитал пост, действительно резко выразился.
odnochlen
Надеюсь, ТС не хочет от http клиента, чтобы он интерпретировал js и flash (тогда ему дорога к Selenium & co, которые и жрут больше)?
Да это было бы простым решением. Но не совсем то, что мне нужно. Граб на самом деле не плохой модуль, после гугла, я им воспользовался для решения других задач. Да время сэкономил неплохо, но все же для парсинга серьезных вещей, он не подходит, серьезные вещи все равно приходится парсить на низком уровне. Но вот насчет работы с куками, все же было бы огромным плюсом если прикрутить поддержку кукилиб. Это бы очень изменило мое мнение . А так автору респект, надеюсь его я не сильно задел своей критикой.

Офлайн

#2 Сен. 29, 2012 17:57:16

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Модуль Grab

psyh0y
Да это было бы простым решением. Но не совсем то, что мне нужно. Граб на самом деле не плохой модуль, после гугла, я им воспользовался для решения других задач. Да время сэкономил неплохо, но все же для парсинга серьезных вещей, он не подходит, серьезные вещи все равно приходится парсить на низком уровне.
А примерно, что за серьезные вещи такие и что подразумевается под низким уровнем?. Вообще в grab в любой момент можно получить curl-объект и напряую задавать ему опции. Но может я как-то не так понял, по подробней пожалуйста.

psyh0y
Но вот насчет работы с куками, все же было бы огромным плюсом если прикрутить поддержку кукилиб. Это бы очень изменило мое мнение =). А так автору респект, надеюсь его я не сильно задел своей критикой.

Вот насчет 99% случаев, ни разу не сталкивался с проблемой установки cookie. И с фейсбуком работал, и дофига скриптов разных на грабе писал, не помню такого, чтобы мне приходилось вручную cookie править. Я даже вот впервые услышал, что cookielib что-то там может, чего не может curl(транспорт, который использует grab по дефолту).



Офлайн

#3 Сен. 29, 2012 18:55:53

odnochlen
Зарегистрирован: 2012-06-28
Сообщения: 794
Репутация: +  14  -
Профиль   Отправить e-mail  

Модуль Grab

plusplus
Вот насчет 99% случаев, ни разу не сталкивался с проблемой установки cookie.
Солидарен. Будет пример глючащего кода?

Офлайн

#4 Окт. 4, 2012 15:56:31

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

Модуль Grab

99% - я имел в виду свои задачи, в грабе нету корректной поддержки кук т.к. мне пока это не понадобилось за пять лет :)

Фейсбук, мамба, не знаю, не парсил. С куками ещё бывает один фокус, кука может ставиться вместе с выдачей какой-нибудь картинки или скрипта. Вопрос решается анализом HTTP-трафика в дебагере браузера или в снифере.

Я, конечно, не против, если кто-то прикрутит cookielib. Что для этого нужно, я уже писал: понимать как работает граб и кукилиб, я как-то пытался вонзить кукилиб в граб, не помню уже на чём дело застопорилось.

Я когда-нибудь поковыряю cookielib, только когда это когда-нибудь наступит, не знаю. В любом случае я не против критики граба, я примерно понимаю, что нужно пользователям библиотеки. Хотелки и баги лучше оформлять в виде тикетов на битбакете.

Офлайн

#5 Апрель 10, 2013 18:13:28

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль Grab

И все же поднимаю еще раз, вопрос не убит. Не пойму в чем дело…
На этот раз google groups

self.start_link = "https://accounts.google.com/"

try:
            http.go("https://www.google.com")
            http.go(self.start_link)
        except Exception,Error:
            self.login_error = Error
            return (False,"HTTP")
        http.set_input(u"Email",self.google_account)
        http.set_input(u"Passwd",self.google_password)
        http.submit(u"signIn")
        if http.response.body.find('https://accounts.google.com/Logout') >0:
                print "OK"

Все авторизуется, все хорошо, НО:
при переходе на groups.google.com, появляется страничка не авторизованного пользователя(хотя мы уже авторизовались), когда работаешь в связке urllib2 + cookielib все в норме, но это велосипед,так как много чего нужно парсить, + необходима поддержка socks4,5 прокси. Прошу помощи, в прошлый раз работу забросил именно поэтому…

Может дело в cookies, может еще в чем нибудь - не могу понять. Все снифал проверял, но ошибку не нашел.

Офлайн

#6 Апрель 10, 2013 20:07:17

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Модуль Grab

psyh0y
когда работаешь в связке urllib2 + cookielib все в норме
Да? Интересно. Я тоже пытался залогиниться в гугл, только не на гугл-группы переходил, а куда-то в другое место и точно также сразу переставал быть авторизованным, в итоге забросил. А вот то, что в urllib2 всё ок, это крайне любопытно, по идее отличия просто ДОЛЖНЫ быть в запросах) Если, говоришь, всё-таки не видно разницы в запросах, попробуй библиотеку requests, здесь на форуме было обсуждение, как заставить её работать через соксы.



Офлайн

#7 Апрель 10, 2013 21:43:34

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль Grab


plusplus
Да? Интересно. Я тоже пытался залогиниться в гугл, только не на гугл-группы переходил, а куда-то в другое место и точно также сразу переставал быть авторизованным, в итоге забросил. А вот то, что в urllib2 всё ок, это крайне любопытно, по идее отличия просто ДОЛЖНЫ быть в запросах) Если, говоришь, всё-таки не видно разницы в запросах, попробуй библиотеку requests, здесь на форуме было обсуждение, как заставить её работать через соксы.
Благодарю за ответ. Обязательно глянул, с requests работал, только вот насчет соксов слышу впервые.
Но все же хотелось бы добить этот вопрос, такое же наблюдал еще на фейсбуке. Дело в кукисах 100%.
Щас потрепал запросы, нашел интересную вещь. В google для разных поддоменов, папок выдаются cookies с одинаковыми именами, но разными значениями для различных доменов. В urllib2, точнее в его связке с cookielib, идет точное распределение cookies по поддоменам, а в grablib походу идет просто добавление новых cookies, так как это словарь, получается просто замена переменной другим значением, соответственно сервер google, не принимает запрос, с несоответствующими cookies. Попытался получить cookies, с помощью urllib2 и подставить их в grablib, но увы не прошло, скорее всего из за того, что там одна только авторизация содержит около трех редиректов, в каждом редиректе, новый запрос, с разными cookies.

Офлайн

#8 Апрель 10, 2013 23:26:14

psyh0y
Зарегистрирован: 2012-09-21
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль Grab

psyh0y
а в grablib походу идет просто добавление новых cookies, так как это словарь, получается просто замена переменной другим значением
Задача решена. Именно в этом дело. Просматриваем Grab().response.head, видим множество Set-Cookies,
выбираем кукисы с вхождением поддомена .google.com (либо .ru смотря с каким вы работаете). Видим что даже после такого отбора, есть переменные с одинаковыми именами, но с разными значениями, смотрим время, и заменяем последним выданным. подставляем в запрос новые кукисы, вуаля google одобрил запрос.

При каждом запросе заниматься таким сексом - это конечно же бред. Но если автор grablib, найдет немного времени, помочь разобраться с его кодом(участок получения и выдачи cookies), то можно этот баг исправить. Либо если он сам введет изменения. Спасибо всем кто участвовал.

Офлайн

#9 Апрель 11, 2013 06:38:21

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

Модуль Grab

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

psyh0y
Но если автор grablib, найдет немного времени, помочь разобраться с его кодом(участок получения и выдачи cookies), то можно этот баг исправить. Либо если он сам введет изменения. Спасибо всем кто участвовал.
https://bitbucket.org/lorien/grab отпиши еще автору в трекер, для надежности. И еще такой вопрос, точно ли grab портит куки или может дело в pycurl?



Офлайн

#10 Апрель 11, 2013 13:46:23

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

Модуль Grab

Скорее всего дело в Grab, я совершенно серьёзно говорю, там куки от любых доменов миксуются (и заодно перезатирают друг друга) в один словарик. Понятно, что это криво, но у меня пока всё работало до сих пор. Ждём пока кто-нибудь не исправит этот момент или пока у меня самого настроения не появится поработать с этой фичей.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version