Форум сайта python.su
Приветствую всех!
Начал использовать grablib. Прежде всего, хочу поблагодарить lorien за труды.
Собственно вопросы:
import grab g = grab.Grab() g.setup(timeout=2) g.load_proxylist("proxy.txt", "text_file", "http") g.go("http://www.yandex.ru") print r.code
def grab_proxy(g): result = (False, g) try: g.go("http://www.yandex.ru") result = (True, g) except Exception as error: print error g.change_proxy() finally: return result g = grab.Grab() g.load_proxylist("proxy.txt", "text_file", "http") tmp = (False, g) while tmp[0] is False: tmp = grab_proxy(g) g = tmp[1] r = g.go("http://www.yandex.ru") print r.code
Отредактировано pooteen (Дек. 12, 2013 11:30:25)
Офлайн
pooteen
Как в таких случаях поступают нормальные люди? :)
Офлайн
opka ?
Офлайн
plusplus, как я понял hammer_mode не меняет прокси, а просто делает тот же коннект, но с новыми таймаутами (и мне это не подойдет, если прокси умер).
Сделал пока функцию-генератор для чека прокси. Моя задача такая: коннект должен быть в любом случае (пока есть прокси).
def check_proxy(): with open("proxy.txt", "r") as f: proxy_list = [p.strip() for p in f.readlines()] g = Grab() for proxy in proxy_list: g.setup(proxy=proxy, proxy_type="http", connect_timeout=5, timeout=5) try: g.go("http://www.microsoft.com") except GrabError: logging.error("proxy {0} is dead. Trying next...".format(proxy)) else: yield proxy
Отредактировано pooteen (Дек. 12, 2013 16:43:14)
Офлайн
Вы можете просто-напросто реализовать свой метод загрузки, ротации, фильтрации прокси-листа и подставлять в граб нужный прокси сервер.
Офлайн
lorien, я подозреваю, что я это и делаю в функции выше, что-то вроде:
g = Grab() g.setup(proxy=check_proxy().next())
Офлайн
> У grab-а по дефолту включен hammer_mode
Нет, по дефолту он выключен: https://github.com/lorien/grab/blob/master/grab/base.py#L138
Это вы путаете, возможно, с поведением Grab::Spider, который действительно, по-дефолту, пытается выполнить задание несколько раз в случае сетевой ошибки.
> lorien, я подозреваю, что я это и делаю в функции выше, что-то вроде:
Ну да, такой вариант имеет право на жизнь. Но только учитывайте, что если вы проверили прокси и она работает, это не значит, что она будет работать для следующего вызова. Так что проверять работу граба через проверенную проксю всё равно надо и в случае ошибки как-то реагировать.
Офлайн
lorien
Ну да, такой вариант имеет право на жизнь. Но только учитывайте, что если вы проверили прокси и она работает, это не значит, что она будет работать для следующего вызова. Так что проверять работу граба через проверенную проксю всё равно надо и в случае ошибки как-то реагировать.
Отредактировано pooteen (Дек. 17, 2013 14:07:11)
Офлайн
Обычно я проверяю наличие нужного элемента на странице, если элемента нет,то выполняю запрос повторно. Прокси просто рэндомно переключаются, я юзаю эти прокси http://grablib.org/ru/fineproxy - там они все рабочие и норм. качества, так что особо не заморачиваюсь на фильтрации прокси.
Офлайн
Всем привет, немного офф. Насколько я знаю scrapy использует twisted соответственно может выполнять несколько запросов одновременно. Grab умеет? Прошу не пинать если я не прав.
Офлайн