2009-11-20 116 views
2

我必須從一個網站自動化文件下載活動(類似於,比方說,yahoomail.com)。要訪問包含此文件下載鏈接的頁面,我必須登錄,從一個頁面跳轉到另一個頁面以提供諸如日期等參數,最後點擊下載鏈接。抓取基於登錄的網站的最佳方式是什麼?

我想到的三種方法:

  1. 使用華廷和開發定期執行一些代碼華廷通過頁面來遍歷並下載該文件一個窗口服務。

  2. 使用的AutoIt(沒有太多的想法)

  3. 使用一個簡單的HTML解析技術(這裏還有幾個問題例如,如何做一個登錄後保持會話?怎麼這件事以後做註銷?

回答

5

我使用scrapy.org,它是一個python庫。實際上它很安靜。易於編寫蜘蛛,它的功能非常廣泛。登錄後可以在網站上搜索網站。

這是一個蜘蛛的例子,它會在認證之後抓取一個網站。

class LoginSpider(BaseSpider): 
    domain_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... 
+0

什麼發生的url是發射JavaScript像document.writeln填充瀏覽器文件? Scrapy是否適用於這種情況? – asyncwait 2009-11-20 13:19:05

+0

有兩種情況我可以想到 – 2009-11-20 14:17:58

+0

1.頁面加載時所有的數據都在頁面中,但是它使用js而不是html(這是不太可能的)。但是,如果是這樣的話,那麼我相信你可以解析它,scrapy有一些功能,可以在這裏模糊地指出:http://doc.scrapy.org/intro/overview.html?highlight=javascript#what-else – 2009-11-20 14:39:59

3

我使用mechanize爲Python成功的幾件事情。它很容易使用和支持HTTP身份驗證,表單處理,cookie,自動HTTP重定向(30X),......基本上唯一缺少的是JavaScript,但是如果您需要依賴JS,那麼您總是非常麻煩。

相關問題