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

Using scrapy, how to a crawl a page with checkbox that have onclick attribute?

本文关键字:属性 onclick 复选框 scrapy 何抓取 抓取 使用      更新时间:2023-09-26

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

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

javascript方法setGroupCheck()是在页面的头部定义的。

我试着像这样提交表单:

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

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

我该如何解决这个问题?

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

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

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

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