如何使用scrapy中的CrawlSpider点击一个带有javascript onclick的链接?

时间:2010-03-16 14:12:29

标签: javascript python onclick scrapy web-scraping

我希望scrapy抓取页面,然后转到下一个链接:

<a href="#" onclick="return gotoPage('2');"> Next </a>

scrapy能解释那个javascript代码吗?

使用 livehttpheaders 扩展名,我发现单击“下一步”会生成一个带有非常大的“垃圾”的POST,如下所示:

encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n

我正在尝试在CrawlSpider类上构建我的蜘蛛,但我无法弄清楚如何对其进行编码,BaseSpider我使用parse()方法来处理第一个URL,恰好是一个登录表单,我在那里用POST:

进行了POST
def logon(self, response):
    login_form_data={ 'email': 'user@example.com', 'password': 'mypass22', 'action': 'sign-in' }
    return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]

然后我定义了submit_next()来告诉接下来要做什么。我无法弄清楚如何告诉CrawlSpider在第一个URL上使用哪种方法?

我抓取的所有请求(第一个除外)都是POST请求。它们交替使用两种类型的请求:粘贴一些数据,然后单击“下一步”转到下一页。

2 个答案:

答案 0 :(得分:3)

实际方法如下:

  1. 发布您的到达页面的请求(正如您所做)
  2. 从该特定回复中提取指向下一页的链接
  3. 如果可能,请简单请求下一页或在适用的
  4. 中再次使用FormRequest

    所有这一切都必须通过服务器响应机制进行简化,例如:

    • 您可以尝试在dont_click = true
    • 中使用FormRequest.from_response
    • 或者您可能想要处理来自服务器的重定向(302)(在这种情况下,您必须在元数据中提及您还需要将句柄重定向请求发送到回调。)

    现在如何全面了解: 使用像fiddler这样的web调试器,或者你可以使用Firefox插件FireBug,或者只需在IE 9中点击F12;并检查用户在网站上实际发出的请求是否与您抓取网页的方式相符。

答案 1 :(得分:-1)

我构建了一个快速爬虫,通过selenium执行JS。随意复制/修改https://github.com/rickysahu/seleniumjscrawl