网页抓取:自动化按钮点击[关闭]
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,实现模拟点击网页下一页按钮,抓取网页数据