网页抓取:自动化按钮点击[关闭]

Posted

技术标签:

【中文标题】网页抓取:自动化按钮点击[关闭]【英文标题】:Web scraping: Automating button click [closed] 【发布时间】:2015-03-04 23:33:08 【问题描述】:

我正在尝试使用 Python 框架 Scrapy 从网站上抓取数据。我可以使用蜘蛛从网站获取数据,但是当我尝试浏览网站时会出现问题。

根据this post Scrapy 不能很好地处理 javascript

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

按钮的功能:

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

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

我只需要自动点击一个按钮。我该怎么办?

【问题讨论】:

真的取决于按钮。可以分享一下细节吗? 如果您使用 Selenium,Javascript 将在其他正常浏览器中执行。您当然可以仅使用 Selenium IDE 或 WebDriver 自动执行简单的按钮点击。 【参考方案1】:

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

pip install selenium

演示:

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

还有其他几个线程提供了“scrapy+selenium”蜘蛛的示例:

selenium with scrapy for dynamic page Scraping with Scrapy and Selenium seleniumcrawler

还有一个scrapy-webdriver module 可能也可以提供帮助。


使用带有 selenium 的 scrapy 会给您带来巨大的开销,并且即使使用无头 PhantomJS 浏览器也会大大减慢速度。

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

【讨论】:

感谢您的回答。我已经开始以我们的答案为基础来做一些事情。我想更清楚地了解这里的一些细节。在您说明的示例中,我可以使用PhantomJS 获取页面标题。那么,scrapy在这里有什么用呢?我基本上想知道它们的用法之间的区别。你能解释一下吗? @PrakharMohanSrivastava 关键是scrapy 不是浏览器,也没有内置的javascript 引擎。许多网站使用 javascript 来构建他们的页面——这段 javascript 代码在浏览器中执行——浏览器跟随script 链接,加载额外的 js 文件,执行代码,更改 DOM——做了很多事情。对于这些站点,使用真正的浏览器来构建页面会更容易,就像您在浏览器开发人员工具中看到的那样。然后,您可以将生成的.page_source 提供给scrapy 进行处理。希望这能让事情更清楚一点。

以上是关于网页抓取:自动化按钮点击[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

抓取网页并通过单击按钮进行导航

使用selenium webdriver+beautifulsoup+跳转frame,实现模拟点击网页下一页按钮,抓取网页数据

单击网站上的按钮,然后抓取网页

jquery插件实现网页页面的抓取和打印

点击后无法抓取下一个网页

用Webbrowser怎么实现获取网页内容并自动点击?(VB.NET)