2012-07-12 30 views
1

我嘗試做了以下工作:Scrapy:請登錄表單,然後與會話

  1. 登錄到網頁(在我的情況zendesk.com)
  2. 使用該會話做一些帖子請求

事實上,zendesk錯過了一些apis(創建/改變宏),我現在需要模擬模擬瀏覽器會話。

所以我不寫一個蜘蛛,但嘗試與我的腳本進行交互的網站。帖子請求從一開始就不知道,但只在我的腳本中。

Scrapy文檔,有以下的例子來說明如何使用Scrapy認證的會話:

class LoginSpider(BaseSpider): 
    name = 'example.com' 
    start_urls = ['http://www.example.com/users/login.php'] 

    def parse(self, response): 
    return [FormRequest.from_response(response, 
       formdata={'username': 'john', 'password': 'secret'}, 
       callback=self.after_login)] 

    def after_login(self, response): 
    # check login succeed before going on 
    if "authentication failed" in response.body: 
     self.log("Login failed", level=log.ERROR) 
     return 

    # continue scraping with authenticated session... 

但看起來這僅適用於拼搶,但對我來說我只是想「舉行」會議並進一步與該會議合作。 有沒有一種方法可以通過scrapy來實現這一點,還是有更適合這項任務的工具?

+1

我不認爲scrapy是適合您的正確工具。 scrapy是爲了抓取,登錄並「保留」它是沒有意義的。嘗試使用urllib登錄:http://stackoverflow.com/q/189555/248296 – warvariuc 2012-07-12 09:28:32

回答

1

非常感謝@wawaruk。根據您鏈接的計算器後這就是我想出瞭解決方案:從那裏

import urllib, urllib2, cookielib, re 

zendesk_subdomain = 'mysub' 
zendesk_username = '...' 
zendesk_password = '...' 

cj = cookielib.CookieJar() 
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
resp = opener.open('http://%s.zendesk.com/access/unauthenticated' % (zendesk_subdomain)) 
s = resp.read() 
data = dict() 
data['authenticity_token'] = re.findall('<input name="authenticity_token" type="hidden" value="([^"]+)"', s)[0] 
data['return_to'] = 'http://%s.zendesk.com/login' % zendesk_subdomain 
data['user[email]'] = zendesk_username 
data['user[password]'] = zendesk_password 
data['commit'] = 'Log in' 
data['remember_me'] = '1' 

opener.open('https://localch.zendesk.com/access/login', urllib.urlencode(data)) 

與揭幕戰的所有頁面可以訪問,例如

opener.open('http://%s.zendesk.com/rules/new?filter=macro' % zendesk_subdomain) 
+1

機械化可以更簡化你的生活:http://wwwsearch.sourceforge.net/mechanize – 2012-07-16 05:44:10

+0

我終於把它全部包裝到一個類中,並添加方法處理(特別是需要PUT來添加zendesk宏):http://pastie.org/private/zxc7samxczqbiw29v91fg – hansaplast 2012-07-16 06:39:01