我已经用python和selenium一起写了一个刮板来从redmart.com获得所有的产品名称。每次运行我的代码时,尽管页面上有许多名字,但我只能从该页面获得27个名称。仅供参考,页面启用了延迟加载方法。我的刮板可以到达页面底部,但只刮27个名字。我无法理解我在刮刀中应用的逻辑在哪里迷路。希望得到任何解决方法。刮板只能从众多的名字中获得几个名字
这里是我到目前为止已经写的脚本:
from selenium import webdriver; import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("https://redmart.com/new")
check_height = driver.execute_script("return document.body.scrollHeight;")
while True:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
try:
wait.until(lambda driver: driver.execute_script("return document.body.scrollHeight;") > check_height)
check_height = driver.execute_script("return document.body.scrollHeight;")
except:
break
for names in driver.find_elements_by_css_selector('.description'):
item_name = names.find_element_by_css_selector('h4 a').text
print(item_name)
driver.quit()
这个网站很好奇。假设您有权限(根据其使用条款)刮擦网站,您可能会要求他们寻求帮助。当我在页面上下滚动时,只是看着页面的HTML变化,看起来他们动态地从页面加载和卸载内容。这可以解释为什么你的代码只能看到你期望的一小部分项目。也许他们可以为您提供更方便的API来访问您所需的信息。 –
@ Breaks Software,我对他们的数据并不感兴趣。我想学习的是如何处理我在刮这样的网站时遇到的情况。 – SIM
由于它们似乎在动态加载和卸载内容,我不确定是否有有效的方法来使用Selenium或任何其他浏览器抓取工具来解决此问题。你是否试图在你的“while”块中包含“for”代码块,将捕获的项目存储在列表/字典中? –