0

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

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

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

我试图提交这样的表格:

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

但它给了我错误:500 internal server error。

我该如何解决这个问题?

4

1 回答 1

2

您收到的错误在服务器上,而不是在您的 FormRequest 中。如果你想使用 Scrapy,你可能对此无能为力。如果您需要从 Python 中广泛地与 JavaScript 交互,那么您可能需要使用另一种抓取方法。

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

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

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

于 2013-06-04T15:41:32.817 回答