2017-06-22 66 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,您可以指示它与页面交互。