selenium 通过更改XPATH擦除数据

sirbozc5  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(140)

我不知道如何抓取数据,我正在尝试从网站抓取产品名称、价格和其他信息,产品名称很容易访问,因为它们有类似的XPath,只有一个标记更改,但对于价格,标记有多个更改。有没有其他方法可以在没有XPath的情况下抓取数据,因为类名和ID返回空字符串。

driver= webdriver.Chrome('E:/chromedriver/chromedriver.exe')
product_name=[]
product_price=[]
product_rating=[]
product_url=[]
driver.get('https://www.cdiscount.com/bricolage/climatisation/traitement-de-l-air/ioniseur/l-166130303.html#_his_')
for i in range(1,55):
    try :
        productname=driver.find_element('xpath','//*[@id="lpBloc"]/li['+str(i)+']/a/div[2]/div/span').text
        product_name.append(productname)
    except:
        print("none")
print(product_name)'''

Xpath of the price:

1st items price
```//*[@id="lpBloc"]/li[1]/div[2]/div[3]/div[1]/div/div[2]/span[1]```

2nd items price
'''//*[@id="lpBloc"]/li[2]/div[2]/div[2]/div[1]/div/div[2]/span[1]'''
xjreopfe

xjreopfe1#

您不需要使用硬编码循环,而是标识唯一的XPath来标识父元素,然后再标识子元素。只有评级并不适用于可以使用try..except块的每一种产品。

product_name=[]
product_price=[]
product_rating=[]
product_url=[]
driver.get('https://www.cdiscount.com/bricolage/climatisation/traitement-de-l-air/ioniseur/l-166130303.html#_his_')
for item in driver.find_elements(By.XPATH,'//*[@id="lpBloc"]//li[@data-sku]'):

        productname=item.find_element('xpath','.//span[@class="prdtTit"]').text
        product_name.append(productname)
        productprice=item.find_element('xpath','.//span[@class="price priceColor hideFromPro"]').text
        product_price.append(productprice)
        try:
          productRating=item.find_element('xpath','.//span[@class="c-stars-rating"]//span[@class="u-visually-hidden"]').text
          product_rating.append(productRating)
        except:
          productRating="Nan"
          product_rating.append(productRating)

        productUrl=item.find_element('xpath','.//a[.//span[@class="prdtTit"]]').get_attribute("href")
        product_url.append(productUrl)

print(product_name)
print(product_price)
print(product_rating)
print(product_url)

相关问题