Я новичок в веб-соскабливании и только что начал экспериментировать с , скребковой структурой, написанной на Python. Моя цель - очистить старую группу Yahoo, поскольку они не предоставляют API или другие средства для извлечения архивов сообщений. Группа Yahoo настроена так, что вам нужно войти в систему, прежде чем вы сможете просматривать архивы.Проблема с использованием scrapy для очистки группы yahoo
шаги мне нужно выполнить, я думаю, являются:
- Вход в Yahoo
- Посетите URL для первого сообщения и царапать его
- Повторите шаг 2 для следующего сообщения, и т.д.
Я начал черпать спайдер, чтобы выполнить вышеизложенное, и вот что я до сих пор. Все, что я хочу заметить, это то, что логин работает, и я могу получить первое сообщение. Я закончу остальное, как только я получаю это много работы:
class Sg101Spider(BaseSpider):
name = "sg101"
msg_id = 1 # current message to retrieve
max_msg_id = 21399 # last message to retrieve
def start_requests(self):
return [FormRequest(LOGIN_URL,
formdata={'login': LOGIN, 'passwd': PASSWORD},
callback=self.logged_in)]
def logged_in(self, response):
if response.url == 'http://my.yahoo.com':
self.log("Successfully logged in. Now requesting 1st message.")
return Request(MSG_URL % self.msg_id, callback=self.parse_msg,
errback=self.error)
else:
self.log("Login failed.")
def parse_msg(self, response):
self.log("Got message!")
print response.body
def error(self, failure):
self.log("I haz an error")
Когда я бег паука, хотя, когда я вижу его логин и оформить заявку на первое сообщение. Тем не менее, все, что я вижу в отладочном выводе из scrapy, - это 3 перенаправления, в конечном итоге попадающие на URL, который я попросил в первую очередь. Но scrapy не вызывает мой обратный вызов parse_msg()
, и сканирование останавливается. Ниже приведен фрагмент результатов исследования:
2011-02-03 19:50:10-0600 [sg101] INFO: Spider opened
2011-02-03 19:50:10-0600 [sg101] DEBUG: Redirecting (302) to <GET https://login.yahoo.com/config/verify?.done=http%3a//my.yahoo.com> from <POST https://login.yahoo.com/config/login>
2011-02-03 19:50:10-0600 [sg101] DEBUG: Redirecting (meta refresh) to <GET http://my.yahoo.com> from <GET https://login.yahoo.com/config/verify?.done=http%3a//my.yahoo.com>
2011-02-03 19:50:12-0600 [sg101] DEBUG: Crawled (200) <GET http://my.yahoo.com> (referer: None)
2011-02-03 19:50:12-0600 [sg101] DEBUG: Successfully logged in. Now requesting 1st message.
2011-02-03 19:50:12-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?done=http%3A%2F%2Flaunch.groups.yahoo.com%2Fgroup%2FMyYahooGroup%2Fmessage%2F1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/message/1>
2011-02-03 19:50:12-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?check=G&done=http%3A%2F%2Flaunch%2Egroups%2Eyahoo%2Ecom%2Fgroup%2FMyYahooGroup%2Fmessage%2F1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?done=http%3A%2F%2Flaunch.groups.yahoo.com%2Fgroup%2FMyYahooGroup%2Fmessage%2F1>
2011-02-03 19:50:13-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/message/1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?check=G&done=http%3A%2F%2Flaunch%2Egroups%2Eyahoo%2Ecom%2Fgroup%2FMyYahooGroup%2Fmessage%2F1>
2011-02-03 19:50:13-0600 [sg101] INFO: Closing spider (finished)
2011-02-03 19:50:13-0600 [sg101] INFO: Spider closed (finished)
Я не могу понять это. Похоже, что Yahoo перенаправляет паука (возможно, для проверки подлинности?), Но, похоже, он возвращается к URL-адресу, который я хотел посетить, в первую очередь. Но scrapy не вызывает мой обратный вызов, и у меня нет возможности очистить данные или продолжить сканирование.
Есть ли у кого-нибудь идеи о том, что происходит и/или как отлаживать это дальше? Благодаря!