使用scrapy,如何使用具有onclick属性的复选框抓取页面?

时间:2013-06-04 15:21:41

标签: javascript python onclick scrapy web-crawler

我正在使用Scrapy从网页抓取一些数据。该页面包含一个包含多个复选框和下拉菜单的表单,所有这些都需要为表单选择以生成数据表。 所有复选框都有调用javascript代码的onClick属性,它们处于层次结构级别,即有5个主要复选框,每个复选框包含7个复选框作为子类别,依此类推。复选框具有4级的树结构。 这是最低级别(叶子)复选框之一:

<input type="checkbox" name="mid" value="1043" id="bd_1" onclick="setGroupCheck(this)">

javascript方法setGroupCheck()在页面的head tage中定义。

我尝试提交这样的表单:

FormRequest("url", method='POST', formdata={'mid':'1043','Ins':'a'}, callback=self.parseInfoPage)

但是它给了我错误:500内部服务器错误。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您获得的错误是在服务器上,而不是在FormRequest中。如果您想使用Scrapy,可能没有太多可以做的。如果您需要从Python广泛地与JavaScript交互,那么您可能需要使用替代的抓取方法。

我最喜欢的是Selenium使用PhantomJS作为驱动程序,因为它是无头的。您可以在这些链接下载并安装以下两个说明。然后,您可以使用以下命令在Python中启动Web驱动程序:

from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get(url)

我知道这个答案可能看起来不太令人满意,因为它不能解决你使用Scrapy的问题,但是如果JavaScript变得复杂,那么在不驱动浏览器的情况下与Python交互JavaScript通常很难或不可能。您网页上的JavaScript听起来很复杂。如果您添加链接到您正在抓取的页面我可以提供更多建议,但您的问题的答案实际上取决于页面。