如何将输出写入多行?

2024-09-20 00:10:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Selenium创建一个scraper,然后将数据写入CSV文件。 每次我运行下面的脚本时,它都会生成一个数据.csv但是输出被反复地写在同一行上,结果只有一行。你知道吗

如何将输出写入单独的行?你知道吗

import pandas as pd

elem = driver.find_elements_by_class_name("product-listing-row")
for ii in elem:
    pname = ii.find_element_by_class_name('product-name').text
    print('pname: ' + pname)
    psku = ii.find_element_by_class_name('product-code').text
    print('psku: ' + psku)
    thumb = ii.find_element_by_class_name('scaleAll').get_attribute('src')
    print('thumb: ' + thumb)
    link = ii.find_element_by_css_selector('a').get_attribute('href')
    print('address: ' + link)
    raw_data = {'Product_Name': [pname],
        'Product_SKU': [psku],
        'Product_ImageURL': [thumb],
        'Product _URL': [link]}
    df = pd.DataFrame(raw_data, columns = ['Product_Name', 'Product_SKU', 'Product_ImageURL', 'Product _URL'])
    df.to_csv (r'/Users/reezalaq/PycharmProjects/wholesale/data.csv')

Tags: csvnamedatabylinkelementfindproduct
3条回答

问题在于:

raw_data = {'Product_Name': [pname],
    'Product_SKU': [psku],
    'Product_ImageURL': [thumb],
    'Product _URL': [link]}

对于每个elem,您将覆盖raw_data。相反,你可以这样做:

#initialize a list for your data
raw_data = []
for ii in elem:
    pname = ii.find_element_by_class_name('product-name').text
    print('pname: ' + pname)
    psku = ii.find_element_by_class_name('product-code').text
    print('psku: ' + psku)
    thumb = ii.find_element_by_class_name('scaleAll').get_attribute('src')
    print('thumb: ' + thumb)
    link = ii.find_element_by_css_selector('a').get_attribute('href')
    print('address: ' + link)
    raw_data_elem = {'Product_Name': pname,
        'Product_SKU': psku,
        'Product_ImageURL': thumb,
        'Product _URL': link}
    #add row to list
    raw_data.append(raw_data_elem)
df = pd.DataFrame(raw_data, columns = ['Product_Name', 'Product_SKU',   
        'Product_ImageURL', 'Product _URL'])
df.to_csv (r'/Users/reezalaq/PycharmProjects/wholesale/data.csv')

更改为df.to_csv(r'/Users/reezalaq/PycharmProjects/wholesale/data.csv', mode='a', header=False)

必须将每个元素都附加到列表中。你知道吗

这是一个例子。在循环内检索元素并将结果附加到列表中,该列表必须包含在循环外的数据帧中:

import pandas as pd

    raw_data = []
    for i in range(1,10):
        element = {'item': i }
        raw_data.append(element)

    df = pd.DataFrame(raw_data, columns = ['item'])
    df.to_csv ('./data.csv')

相关问题 更多 >