python - 我的抓取工具无法从网页获取所有项目

标签 python python-3.x selenium selenium-webdriver web-scraping

我用 python 结合 selenium 编写了一些代码来解析网页中的不同产品名称。如果浏览器向下滚动,则几乎看不到“加载更多”按钮。如果页面向下滚动直到没有“加载更多”按钮可供单击,则网页将显示完整内容。我的刮刀似乎运行良好,但我没有得到所有结果。该页面大约有 200 种产品,但我从中找到了 90 种。我应该对我的抓取工具进行哪些更改才能获得全部内容?提前致谢。

我正在处理的网页:Page_Link

这是我正在尝试使用的脚本:

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("put_above_url_here")
wait = WebDriverWait(driver, 10)

page = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".listing_item")))
for scroll in range(17):
    page.send_keys(Keys.PAGE_DOWN)
    time.sleep(2)
    try:
        load = driver.find_element_by_css_selector(".lm-btm")
        load.click()
    except Exception:
        pass

for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[id^=item_]"))):
    name = item.find_element_by_css_selector(".pro-name.el2").text
    print(name)
driver.quit()

最佳答案

尝试下面的代码来获取所需的数据:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.purplle.com/search?q=hair%20fall%20shamboo")
wait = WebDriverWait(driver, 10)

header = driver.find_element_by_tag_name("header")
driver.execute_script("arguments[0].style.display='none';", header)

while True:

    try:
        page = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".listing_item")))
        driver.execute_script("arguments[0].scrollIntoView();", page)
        page.send_keys(Keys.END)
        load = wait.until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "LOAD MORE")))
        driver.execute_script("arguments[0].scrollIntoView();", load)
        load.click()
        wait.until(EC.staleness_of(load))
    except:
        break

for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[id^=item_]"))):
    name = item.find_element_by_css_selector(".pro-name.el2").text
    print(name)
driver.quit()

关于python - 我的抓取工具无法从网页获取所有项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48040836/

相关文章:

Selenium FindElement 按父 div

python - 在python中为字符串添加双引号

python - 二维数组每列的第一个和最后一个数字 1 的索引

python - pytest如何找到要测试的文件?

python - Gunicorn 无法终止外部进程

django - 来自 rest_framework modelSerializer 的模型方法

windows - OpenCV - python 3.x 和 windows - Numpy 的版本是什么?

java - 两次测试接连进行

javascript - 如何验证输入 150 个字符后文本区域中是否出现滚动条

python - 使用 Flask-Migrate 在多个分支上工作