2017-06-22 81 views
2

我想用Scrapy登錄網站,但收到的響應是一個僅包含內嵌JavaScript的HTML文檔。 JS重定向到我想要從中抓取數據的頁面。但Scrapy不執行JS,因此不會路由到我想要的頁面。在Scrapy響應中執行內嵌JavaScript

我用下面的代碼提交所需的登錄表單:

def parse(self, response): 
     request_id = response.css('input[name="request_id"]::attr(value)').extract_first() 
     data = { 
      'userid_placeholder': self.login_user, 
      'foilautofill': '', 
      'password': self.login_pass, 
      'request_id': request_id, 
      'username': self.login_user[1:] 
     } 
     yield scrapy.FormRequest(url='https://www1.up.ac.za/oam/server/auth_cred_submit', formdata=data, 
           callback=self.print_p) 

的print_p回調函數如下:

def print_p(self, response): 
    print(response.text) 

我已經看過scrapy飛濺,但我找不到一種用scrapy-splash在響應中執行JS的方法。

+0

您是否嘗試過手動進入JS重定向所帶給您的頁面? (也就是說,在'print_p'中放棄一個url並向這個頁面發出一個請求) – Pablo

+0

@Pablo JS建立一個url然後它重定向到。 – Craig

回答

2

大概硒可以幫助你通過這個JS。

如果你還沒有選中它,你可以使用一些例子,如this。如果你有運氣達到它,那麼你可以得到頁面網址:

self.driver.current_url 

並颳去它後。

3

我建議使用Splash作爲渲染服務。就我個人而言,我發現它比Selenium更可靠。使用scripts,您可以指示它與頁面交互。