Python 如何将输出写入多行?

Python 如何将输出写入多行?,python,pandas,Python,Pandas,我正在尝试使用Selenium创建一个scraper,然后将数据写入CSV文件。 每次我运行下面的脚本时,它都会生成一个data.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('produ

我正在尝试使用Selenium创建一个scraper,然后将数据写入CSV文件。 每次我运行下面的脚本时,它都会生成一个data.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')
您需要在以下模式下写入:

将熊猫作为pd导入
elem=驱动程序。通过类名称(“产品列表行”)查找元素
header=True
对于要素中的ii:
pname=ii.通过类名称(“产品名称”)查找元素。文本
psku=ii.通过类名称(“产品代码”)查找元素。文本
thumb=ii.通过类名称('scaleAll')查找元素('src')。获取属性('src'))
link=ii.通过_css_选择器('a')查找_元素_.获取_属性('href'))
原始数据={'Product_Name':[pname],
“产品库存单位”:[psku],
“Product_ImageURL”:[thumb],
'产品_URL':[link]}
df=pd.DataFrame(原始数据,列=['Product\u Name'、'Product\u SKU'、'Product\u ImageURL'、'Product\u URL'])
df.to_csv(r'/Users/reezalaq/PycharmProjects/wholesale/data.csv',mode=“a”,header=header)
标题=假
这将仅在第一次迭代时向csv添加标题,然后将所有新行追加到文件中

或者,您可以创建一次数据帧,然后保存它:

将熊猫作为pd导入
elem=驱动程序。通过类名称(“产品列表行”)查找元素
原始数据={'Product_Name':[],
“产品库存单位”:[],
“产品图片URL”:[],
“产品URL”:[]
}
对于要素中的ii:
原始数据[“产品名称”]。追加(
ii.通过类名称(“产品名称”)查找元素。文本
)
原始数据[“产品库存单位]。追加(
ii.通过类名称(“产品代码”)查找元素。文本
)
原始数据['Product\u ImageURL']。追加(
ii.通过类名称(“scaleAll”)查找元素。获取属性(“src”)
)
原始数据['Product\u URL']。追加(
ii.通过_css_选择器('a')查找_元素。获取_属性('href'))
)
df=pd.DataFrame(原始数据)
df.to_csv(r'/Users/reezalaq/PycharmProjects/wholesale/data.csv')
更改为
df.to_csv(r'/Users/reezalaq/PycharmProjects/wholesale/data.csv',mode='a',header=False)
问题在于:

raw_data = {'Product_Name': [pname],
    'Product_SKU': [psku],
    'Product_ImageURL': [thumb],
    'Product _URL': [link]}
对于每个
元素
,您将覆盖
原始数据
。相反,您可以这样做:

#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')

您必须将每个元素追加到列表中

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

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')