我在python中使用selenium捕获for循环中的值时遇到问题

vddsk6oq  于 2023-01-26  发布在  Python
关注(0)|答案(1)|浏览(198)

我正在建立一个网页抓取器,我可以打印所有我需要的数据,但是我很难把数据添加到我的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.')
zpgglvta

zpgglvta1#

在你的代码中,每个循环都会重置列表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"))

相关问题