2015-01-07 203 views
4

我想用一个python框架Scrapy从网站上抓取数据。我可以使用蜘蛛从网站获取数据,但当我尝试浏览网站时会出现问题。网页抓取:自动按钮点击

根据this的帖子Scrapy不能很好地处理Javascript。

此外,正如接受的答案中所述,我不能使用mechanize或lxml。它建议使用Selenium and Scrapy的组合。

功能按钮:

我通过网站上提供浏览。按钮 的功能是显示更多优惠。所以在点击它时,它会调用一个加载结果的javascript 函数。

我也在看CasperJS and PhantomJS。他们会工作吗?

我只需要自动点击一个按钮。我如何去做这件事?

+0

真的取决于按钮。你能分享一下细节吗? – alecxe

+0

如果您使用Selenium,则JavaScript将在其他普通浏览器中执行。您当然可以只使用Selenium IDE或WebDriver自动执行简单的按钮点击。 – BadZen

回答

3

首先,是的 - 你可以使用PhantomJS ghostdriver python。它是内置在python-selenium

pip install selenium 

演示:

>>> from selenium import webdriver 
>>> driver = webdriver.PhantomJS() 
>>> driver.get('https://stackoverflow.com/questions/27813251') 
>>> driver.title 
u'javascript - Web scraping: Automating button click - Stack Overflow' 

也有提供 “scrapy +硒” 蜘蛛例子几个其他线程:

另外还有一个scrapy-webdriver module也可以帮助它。


硒使用scrapy会给你一个巨大的开销和缓慢下来drammatically即使有一具无头PhantomJS浏览器。

您很有可能通过模拟底层请求来获取您需要的数据来模仿“显示更多优惠”按钮。使用浏览器开发工具来探索什么样的请求被触发,并使用scrapy.http.Request在蜘蛛内进行仿真。

+0

谢谢你的回答。我已经开始使用我们的答案作为基础。我想在这里更详细地了解一些细节。在这个例子中,你已经说明我可以使用'PhantomJS'获得页面标题。那么,这里有什么用scrapy?我基本上想知道他们的用法之间的区别。你能解释一下吗? –

+1

@PrakharMohanSrivastava关键是scrapy不是浏览器,并且没有内置的JavaScript引擎。很多网站使用JavaScript来构建他们的页面 - 这个JavaScript代码在浏览器中执行 - 浏览器遵循“脚本”链接,加载额外的js文件,执行代码,更改DOM - 做了很多事情。对于这些网站,使用真正的浏览器构建页面会更容易,就像您在浏览器开发人员工具中看到的那样。然后,您可以将生成的'.page_source'提供给scrapy进行处理。希望让事情更清楚一点。 – alecxe