网页抓取 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 按类名查找元素的主要内容,如果未能解决你的问题,请参考以下文章