【问题标题】:I'm having trouble captruing values within a for loop using selenium with python我在使用 selenium 和 python 捕获 for 循环中的值时遇到问题
【发布时间】:2023-01-20 23:30:06
【问题描述】:

我正在构建一个网络抓取工具,我能够打印我需要的所有数据,但我正在努力将数据添加到我的 csv 文件中,我觉得我需要添加另一个 for 循环甚至一个函数。目前我能够让它打印一行被抓取的数据值,但它会跳过其他 64 行数据值。

到目前为止,我已经尝试放入另一个 for 循环并将每个变量分解成它自己的函数,但它只是破坏了我的代码,这是我到目前为止所拥有的,我觉得我也只是遗漏了一些东西。

#Gets listing box
    listingBox = searchGrid.find_elements(By.CLASS_NAME, 'v2-listing-card')

    #Loops through each listing box
    for listingBoxes in listingBox:

        listingUrl = []

        listingImg = []

        listingTitle = []

        listingPrice = []

        #Gets listing url
        listingUrl = listingBoxes.find_element(By.CSS_SELECTOR, 'a.listing-link')
        print("LISTING URL:", listingUrl.get_attribute('href'))

        #Gets listing image
        listingImg = listingBoxes.find_element(By.CSS_SELECTOR, 'img.wt-position-absolute')
        print("IMAGE:", listingImg.get_attribute('src'))
        
        #Gets listing title
        listingTitle = listingBoxes.find_element(By.CLASS_NAME, 'wt-text-caption')
        print("TITLE:", listingTitle.text)

        #Gets price
        listingPrice = listingBoxes.find_element(By.CLASS_NAME, 'currency-value')
        print("ITEM PRICE: $", listingPrice.get_attribute("innerHTML"))
        
        #Gets seller name
        # listingSellerName = listingBoxes.find_element(By.XPATH, '/html/body/main/div/div[1]/div/div[3]/div[8]/div[2]/div[10]/div[1]/div/div/ol/li/div/div/a[1]/div[2]/div[2]/span[3]')
        # print("SELLER NAME:", listingSellerName.get_attribute("innerHTML"))
        print("---------------")

finally:
    
    driver.quit()

    data = {'Listing URL': listingUrl, 'Listing Thumbnail': listingImg,'Listing Title': listingTitle, 'Listing Price': listingPrice}
    

    df = pd.DataFrame.from_dict(data, orient='index')

    df = df.transpose()

    df.to_csv('raw_data.csv')
        
    print('Data has been scrapped and added.')

【问题讨论】:

  • 请提供更多信息,例如 url、页面源代码、到底什么不起作用(错误代码?)、您尝试过的内容以及脚本应该做什么。

标签: python selenium


【解决方案1】:

在您的代码中,每个循环都会重置列表 listingUrllistingImg 等,这就是为什么 df 仅包含一行抓取数据,对应于最后执行的循环。如果要将元素添加到列表中,则必须在循环之前定义列表,然后在循环内使用 .append() 方法。

然后,不是执行 listingUrl.get_attribute('href'),而是执行 listingUrl[-1].get_attribute('href'),其中 [-1] 表示您正在获取列表的最后一个元素。

listingUrl = []

listingImg = []

listingTitle = []

listingPrice = []

for listingBoxes in listingBox:

    #Gets listing url
    listingUrl.append( listingBoxes.find_element(By.CSS_SELECTOR, 'a.listing-link') )
    print("LISTING URL:", listingUrl[-1].get_attribute('href'))

    #Gets listing image
    listingImg.append( listingBoxes.find_element(By.CSS_SELECTOR, 'img.wt-position-absolute') )
    print("IMAGE:", listingImg[-1].get_attribute('src'))
    
    #Gets listing title
    listingTitle.append( listingBoxes.find_element(By.CLASS_NAME, 'wt-text-caption') )
    print("TITLE:", listingTitle[-1].text)

    #Gets price
    listingPrice.append( listingBoxes.find_element(By.CLASS_NAME, 'currency-value') )
    print("ITEM PRICE: $", listingPrice[-1].get_attribute("innerHTML"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2019-02-02
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    相关资源
    最近更新 更多