Python 如何将输出写入多行?
我正在尝试使用Selenium创建一个scraper,然后将数据写入CSV文件。 每次我运行下面的脚本时,它都会生成一个data.csv,但输出被反复写入同一行,结果只有一行 如何将输出写入单独的行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
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')