网页抓取:自动点击按钮

Pra*_*ava 5 javascript python selenium scrapy web-scraping

我正在尝试使用Scrapy(一个python框架)从网站上删除数据.我可以使用蜘蛛从网站上获取数据,但是当我尝试浏览网站时会出现问题.

根据这篇文章,Scrapy不能很好地处理Javascript.

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

按钮的功能:

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

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

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

ale*_*cxe 4

首先,是的 - 你可以将PhantomJSGhostdriver与 python 一起使用。它内置于python-selenium

pip install selenium
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from selenium import webdriver
>>> driver = webdriver.PhantomJS()
>>> driver.get('/sf/ask/1946927601/')
>>> driver.title
u'javascript - Web scraping: Automating button click - Stack Overflow'
Run Code Online (Sandbox Code Playgroud)

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

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


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

您很有可能通过模拟底层请求来模仿“显示更多优惠”按钮的点击,以获取您需要的数据。使用浏览器开发人员工具来探索触发哪种请求并用于scrapy.http.Request蜘蛛内部的模拟。

  • @PrakharMohanSrivastava 关键是 scrapy 不是浏览器并且没有内置的 javascript 引擎。许多网站使用 javascript 来构建其页面 - 该 javascript 代码在浏览器中执行 - 浏览器遵循“script”链接,加载其他 js 文件,执行代码,更改 DOM - 执行很多操作。对于这些网站,使用真实的浏览器构建页面会更容易,就像您在浏览器开发人员工具中看到的那样。然后,您可以将生成的“.page_source”提供给 scrapy 进行处理。希望这能让事情变得更清楚一些。 (2认同)