selenium webdriver - 没有得到所有src图像由xpath为amazon.co.uk [关闭]

问题描述 投票:-2回答:3

我正在尝试获取产品图像的所有链接 - https://www.amazon.co.uk/Autoglym-AG-035001-Interior-Shampoo/dp/B00114WOBC/ref=sr_1_1?ie=UTF8&qid=1553519250&sr=8-1&keywords=715933155337

但作为回报,我只得到图像的一个URL链接。

当我试图找到列表的长度时,我甚至没有获得6个元素(product_image_url2)

          product_image_url2 = self.browser.find_elements_by_xpath('//*[@id="main-image- 

               container"]/ul/li/span/span/div/img')

            product_image_url2_count = len(product_image_url2)

             print product_image_url2_count

              image_url2 = []
                for curr_product_image_url2 in product_image_url2:
    image_url2.append(curr_product_image_url2.get_attribute("src"))
                product_dict['image url2']=image_url2
python python-2.7 selenium xpath web-scraping
3个回答
0
投票

这是获取左侧img元素的正确xpath。

//li[@class='a-spacing-small item imageThumbnail a-declarative']//img

下面的代码和输出:

    wait.until(EC.presence_of_element_located((By.XPATH, "//li[@class='a-spacing-small item imageThumbnail a-declarative']//img")))
product_image_url2 = driver.find_elements_by_xpath("//li[@class='a-spacing-small item imageThumbnail a-declarative']//img")

product_image_url2_count = len(product_image_url2)

print(product_image_url2_count)

image_url2 = []
for curr_product_image_url2 in product_image_url2:
    print(curr_product_image_url2.get_attribute("src"))
    image_url2.append(curr_product_image_url2.get_attribute("src"))

输出:6 https://images-na.ssl-images-amazon.com/images/I/31JLKXyjA5L.SS40.jpg https://images-na.ssl-images-amazon.com/images/I/51ZZMf1JVfL.SS40.jpg https://images-na.ssl-images-amazon.com/images/I/416%2BBQU%2BtuL.SS40.jpg https://images-na.ssl-images-amazon.com/images/I/41CdeeG0HGL.SS40.jpg https://images-na.ssl-images-amazon.com/images/I/41bZb0qgNPL.SS40.jpg https://images-na.ssl-images-amazon.com/images/I/219h80ACoQL.SS40.jpg


0
投票

你的xpath是错误的。试试下面的xpath。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('https://www.amazon.co.uk/Autoglym-AG-035001-Interior-Shampoo/dp/B00114WOBC/ref=sr_1_1?ie=UTF8&qid=1553519250&sr=8-1&keywords=715933155337')

product_image_url2 = driver.find_elements_by_xpath('//span[@id="a-autoid-8-announce"]/img')

product_image_url2_count = len(product_image_url2)

print (product_image_url2_count)

image_url2 = []
for curr_product_image_url2 in product_image_url2:
    image_url2.append(curr_product_image_url2.get_attribute("src"))

print(image_url2)

如果你想在字典中存储尝试下面的代码。

product_dict={}
for i in range(len(image_url2)):
    product_dict[i]=image_url2[i]

print(product_dict)

输出:

6
['https://images-na.ssl-images-amazon.com/images/I/31JLKXyjA5L._SS40_.jpg', 'https://images-na.ssl-images-amazon.com/images/I/51ZZMf1JVfL._SS40_.jpg', 'https://images-na.ssl-images-amazon.com/images/I/416%2BBQU%2BtuL._SS40_.jpg', 'https://images-na.ssl-images-amazon.com/images/I/41CdeeG0HGL._SS40_.jpg', 'https://images-na.ssl-images-amazon.com/images/I/41bZb0qgNPL._SS40_.jpg', 'https://images-na.ssl-images-amazon.com/images/I/219h80ACoQL._SS40_.jpg']


{0: 'https://images-na.ssl-images-amazon.com/images/I/31JLKXyjA5L._SS40_.jpg', 1: 'https://images-na.ssl-images-amazon.com/images/I/51ZZMf1JVfL._SS40_.jpg', 2: 'https://images-na.ssl-images-amazon.com/images/I/416%2BBQU%2BtuL._SS40_.jpg', 3: 'https://images-na.ssl-images-amazon.com/images/I/41CdeeG0HGL._SS40_.jpg', 4: 'https://images-na.ssl-images-amazon.com/images/I/41bZb0qgNPL._SS40_.jpg', 5: 'https://images-na.ssl-images-amazon.com/images/I/219h80ACoQL._SS40_.jpg'}

0
投票

匹配那些的css替代方案

#altImages img:not([alt])

#是一个id选择器。 img是一个类型选择器(用于标记)。两者之间的spacedescendant combinator意思是img是一个id为altImages的元素的孩子。 :not([alt])指定孩子img没有alt属性。 []是属性选择器,:not是CSS pseudo-class。了解他们here

码:

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

url = 'https://www.amazon.co.uk/Autoglym-AG-035001-Interior-Shampoo/dp/B00114WOBC/ref=sr_1_1?ie=UTF8&qid=1553519250&sr=8-1&keywords=715933155337'
driver = webdriver.Chrome()
driver.get(url)
srcs = [item.get_attribute("src") for item in WebDriverWait(driver,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#altImages img:not([alt])")))]
print(srcs)
© www.soinside.com 2019 - 2024. All rights reserved.