[英]How to scrape elements in Selenium/Python by calling different css selectors at the same time?
[英]How to loop multiple elements in python selenium (different CSS selectors)
我試圖在一個包含多個元素的類offer-list-wrapper
循環,幾乎所有元素在搜索 A 和搜索 B 的網頁中都是常見的(我正在抓取一個爬蟲)。
正如您在兩張圖片中看到的, offer-list-wrapper
是一個常見元素。
我想提取每個organic-offer-wrapper organic-gallery-offer-inner
和organic-list-offer-inner m-gallery-product-item-v2
類中的數據。 如果你使用這樣的 CSS 選擇器在它們內部循環,這很容易做到:
for element in driver.find_elements_by_css_selector('.organic-list-offer-inner.m-gallery-product-item-v2'):
通過這種方式,您可以獲取其中的每個元素。
但問題從這里開始:我需要使用一個在兩個類中循環的通用代碼在兩種情況下循環,如果出現新類,它必須在其中循環。
讓我向您展示我的代碼:
for element in driver.find_elements_by_class_name('offer-list-wrapper'):
try:
item_name = element.find_element_by_class_name('organic-gallery-title__content').text
except:
item_name = np.nan
try:
price = element.find_element_by_class_name('gallery-offer-price').get_attribute('title').replace('$', '').replace(',', '')
min_order = element.find_element_by_class_name('gallery-offer-minorder').find_element_by_tag_name('span').text.replace(' Pieces', '').replace(' Piece', '').replace(' Units', '').replace(' Unit', '').replace(' Sets', '').replace(' Set', '').replace(' Pairs', '').replace(' Pair', '').replace('Boxes', '').replace('Box', '').replace('Bags', '').replace('Bag', '')
# separate min and max price
except:
price = np.nan
min_order = np.nan
第一個只返回第一個元素:
for element in driver.find_elements_by_css_selector('.organic-offer-wrapper.organic-gallery-offer-inner'):
try:
item_name = element.find_element_by_class_name('organic-gallery-title__content').text
except:
item_name = np.nan
try:
price = element.find_element_by_class_name('gallery-offer-price').get_attribute('title').replace('$', '').replace(',', '')
min_order = element.find_element_by_class_name('gallery-offer-minorder').find_element_by_tag_name('span').text.replace(' Pieces', '').replace(' Piece', '').replace(' Units', '').replace(' Unit', '').replace(' Sets', '').replace(' Set', '').replace(' Pairs', '').replace(' Pair', '').replace('Boxes', '').replace('Box', '').replace('Bags', '').replace('Bag', '')
# separate min and max price
except:
price = np.nan
min_order = np.nan
第二個只在.organic-offer-wrapper.organic-gallery-offer-inner
循環(返回我需要的所有元素),但它不會在.organic-list-offer-inner.m-gallery-product-item-v2
內循環.organic-list-offer-inner.m-gallery-product-item-v2
您可以通過搜索包含屬性data-content="productItem"的 div 標簽來獲取所有產品。 那是假設每個項目都具有該屬性。 從您發布的屏幕截圖來看,情況似乎是這樣。
您可以使用 find_elements_by_xpath() 完成此操作
for item in driver.find_elements_by_xpath('//div[@data-content="productItem"]'):
....
這可能是最好的方法,而不必擔心具有不同 css 類的元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.