网页抓取 selenium 按类名查找元素

Posted

技术标签:

【中文标题】网页抓取 selenium 按类名查找元素【英文标题】:web scraping selenium find elements by class name 【发布时间】:2022-01-14 06:57:39 【问题描述】:

我尝试从该页面提取所有产品数据:

https://www.shufersal.co.il/online/he/קטגוריות/סופרמרקט/חטיפים%2C-מתוקים-ודגני-בוקר/c/A25

我想获取名称类为miglog-prod miglog-sellingmethod-by_unit的所有li标签

像这样:

<li class="miglog-prod miglog-sellingmethod-by_unit" data-product-name="צדפים דגנים בטעם שוקולד" data-entry-number=""
data-product-box
data-product-replace=""
data-product-price="12.9"
data-product-purchasable="false"
data-food="true"
data-selling-method="BY_UNIT"
data-product-code="P_7296073442226">

我试过了:

shufersal = "https://www.shufersal.co.il/online/he/קטגוריות/סופרמרקט/חטיפים%2C-מתוקים-ודגני-בוקר/c/A25"

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
    
driver = webdriver.Chrome(ChromeDriverManager().install())
    
import time
driver.get(shufersal)
for i in range(0,5): # here you will need to tune to see exactly how many scrolls you need
    driver.execute_script('window.scrollBy(0, 400)')
    time.sleep(1)
products = driver.find_elements_by_class_name("miglog-prod miglog-sellingmethod-by_unit")
    
print(products)

但我没有找到任何产品:

[]

【问题讨论】:

【参考方案1】:

你可以做几件事:

from selenium.webdriver.common.by import By

products = driver.find_element_by_class_name(
    By.CSS_SELECTOR,
    ".miglog-prod.miglog-sellingmethod-by_unit"
)

或者,

products = driver.find_elements_by_css_selector(
    "li.miglog-prod.miglog-sellingmethod-by_unit"
)

请注意,在第一种方法中,我只传递了类名,但在第二种方法中,我甚至传递了元素 (li)。

(编辑:好的,我检查了 REPL,即使我没有通过 li,我也会得到元素,所以我不确定这里的行为。顺便说一句,我在 Firefox 上测试了这个。)

根据我的阅读,你没有得到产品是因为find_elements_by_class_name 只需要一个类名,而你已经通过了两个..

【讨论】:

以上是关于网页抓取 selenium 按类名查找元素的主要内容,如果未能解决你的问题,请参考以下文章

Selenium 按类名查找元素

网页抓取(类名更改)

使用 selenium 和 bs4 进行网页抓取

在 selenium 中加速网页抓取

网页抓取和查找元素

请教网页里的特定数据怎么抓取?