【发布时间】:2017-09-24 18:26:48
【问题描述】:
我在 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,我对他们的数据一点也不感兴趣。我想学习的是如何处理我在抓取这样的网站时所面临的情况。
-
由于它们似乎是动态加载和卸载内容,我不确定是否有一种有效的方法可以使用 Selenium 或任何其他浏览器抓取工具来解决这个问题。您是否尝试在“while”块中包含“for”代码块,将捕获的项目存储在列表/字典/随你所用的任何内容中?
标签: python python-3.x selenium selenium-webdriver web-scraping