【问题标题】:selenium webdriver - not getting All src image by xpath for amazon.co.uk [closed]selenium webdriver - 没有通过 xpath 为 amazon.co.uk 获取所有 src 图像 [关闭]
【发布时间】:2019-08-15 18:28:05
【问题描述】:

我正在尝试获取产品图片的所有链接 -- 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 链接。

当我尝试查找列表的长度 (product_image_url2) 时,我什至没有得到 6 个 webelements

          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


【解决方案1】:

匹配这些的 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)

【讨论】:

  • 我对CSS一无所知,但感谢您的帮助:)
  • 欢迎。你试过运行代码吗?
  • 我添加了一些注释,以防您决定了解更多信息。借助浏览器自动化,css 选择器通常比 xpath 更快,因此值得研究。
  • 不客气 :-)
【解决方案2】:

这是获取左侧 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

【讨论】:

  • 谢谢 :) 它正在工作,只是有 1 个问题,因为 id 的 xpath 的变化与类的 xpath 相比要少...你能帮我解决 id 的 xpath 吗?
  • 另外,你能帮我用 xpath 来评价产品吗,下面是它的代码: if self.hasXpath('//*[@id="reviewsMedley"]/div/div[ 1]/div[1]/div/div/div[2]/div/span/span/a/span/text()'): product_rating = self.browser.find_element_by_xpath('//*[@id=" reviewsMedley"]/div/div[1]/div[1]/div/div/div[2]/div/span/span/a/span/text()') product_rating = product_rating.text.encode('ascii ','ignore').strip() product_dict['Rating']=product_rating.text
  • li 没有类,但是您可以在应用程序//span[@id='a-autoid-7']//img 中使用此基于 id 的 xpath(不确定 id 中的数字是静态还是变化)。
  • 这是评级// div[ @ id = 'reviewsMedley'] // span[ @ data - hook = 'rating-out-of-text']的xpath。
【解决方案3】:

您的 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'}

【讨论】:

  • 它对我不起作用,xpath 也不适用于图像。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2018-09-04
相关资源
最近更新 更多