3

我正在尝试使用 Scrapy 登录网站,但收到的响应是一个仅包含内联 JavaScript 的 HTML 文档。JS 重定向到我要从中抓取数据的页面。但是 Scrapy 不会执行 JS,因此不会路由到我想要的页面。

我使用以下代码提交所需的登录表单:

    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-splash,但我找不到在scrapy-splash的响应中执行JS的方法。

4

2 回答 2

5

我建议使用Splash作为渲染服务。就个人而言,我发现它比 Selenium 更可靠。使用脚本,您可以指示它与页面交互。

于 2017-06-22T12:19:24.230 回答
2

可能 selenium 可以帮助你通过这个 JS。

如果你还没有检查过,你可以使用一些这样的例子。如果您有幸找到它,那么您可以通过以下方式获取页面网址:

self.driver.current_url

然后刮掉它。

于 2017-06-22T11:18:08.140 回答