如果您转到site,您会发现有一个年龄确认窗口,我想通过刮擦来绕过它,但是我搞砸了,我不得不继续使用Selenium Webdriver,现在我正在使用
driver.find_element_by_xpath('xpath').click()
跳过该年龄确认窗口。老实说,我不想使用Selenium Webdriver,因为它消耗时间。有什么办法可以绕过那个窗口? 我在stackoverflow和google中搜索了很多 但没有得到任何可能解决我问题的答案。如果您有任何联系或由Scrapy解决的想法,将不胜感激。一个有用的评论将被投票!
答案 0 :(得分:3)
但是年龄验证“窗口”只是一个div
,当您按下按钮时它会隐藏,而不是一个真正的单独窗口:
<div class="age-check-modal" id="age-check-modal">
您可以使用开发人员工具中的浏览器的“网络”选项卡来查看,当您按下按钮时,不会上传或发送任何新信息。因此,当您请求页面时,所有内容都已加载。 “弹出窗口”甚至不是弹出窗口,只是单击按钮时其display
更改为none
的元素。
因此,只要加载了所有html,Scrapy就不会真正在意显示什么内容。如果加载了元素,则可以访问它们。还是没有按一下按钮就看不到某些信息?
您应该更多地检查html代码,以了解每个网站的功能,这可能使您的抓取任务更加轻松。
编辑:检查原始html后,您会看到以下内容:
<div class="products-list">
<div class="products-container-block">
<div class="products-container">
<div id="hits" class='row'>
</div>
</div>
</div>
</div>
您还可以看到很多JS脚本标签。
::before
部分表明这是由JS操纵的,因为您无法使用简单的CSS做到这一点。有关详细信息,请参见Granitosaurus' answer。
这意味着您需要以某种方式在那些页面上执行任意JS代码。因此,您要么需要使用Scrapy的解决方案,要么像现在一样使用Selenium。
答案 1 :(得分:2)
扩展Chillie的答案。
这里的年龄验证没有意义。您要查找的数据是通过AJAX请求加载的:
请参见相关问题:Can scrapy be used to scrape dynamic content from websites that are using AJAX?,以了解其工作原理。
您需要弄清楚https://ns5bwtai8m-dsn.algolia.net/1/indexes/*/queries?x-algolia-agent=Algolia%20for%20vanilla%20JavaScript%203.19.1&x-algolia-application-id=NS5BWTAI8M&x-algolia-api-key=e676b05f3844d3adf54a29732af6e43c
网址的工作原理,以及如何在其中抓取。