我正在建立一个网页抓取器,我可以打印所有我需要的数据,但是我很难把数据添加到我的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.')
1条答案
按热度按时间zpgglvta1#
在你的代码中,每个循环都会重置列表
listingUrl
,listingImg
等等,这就是为什么df
只包含一行抓取的数据,对应于最后一次执行的循环。如果你想添加元素到列表中,你必须在循环之前定义列表,然后在循环中使用.append()
方法。然后,不执行
listingUrl.get_attribute('href')
,而是执行listingUrl[-1].get_attribute('href')
,其中[-1]
意味着您正在获取列表的最后一个元素。