将每个刮取的项目添加到csv行

2024-10-03 11:13:12 发布

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

我有一个selenium项目,它可以刮取网站并循环以获取类内文本

我希望将此循环中的每个刮取文本保存到py文件旁边的新csv行,并接受将来添加的新列 我该怎么做

这就是我试过的

prodTitle = driver.find_elements_by_xpath("//*[contains(@class,'itemTitle')]")
for pTitle in prodTitle:
    itemName = pTitle
    pd = pd.dataframe(pTitle.text)
    pd.to_csv('data.csv', pd)
    print(pTitle.text)

但它只添加最后一项


Tags: 文件csv项目textpy文本by网站
1条回答
网友
1楼 · 发布于 2024-10-03 11:13:12

您可以在同一循环中添加数据,然后保存整个数据帧,如下所示:

prodTitle = driver.find_elements_by_xpath("//*[contains(@class,'itemTitle')]")
df = pd.DataFrame(columns=['Title'])

for (idx,pTitle) in enumerate(prodTitle):
    itemName = pTitle
    df.loc[idx, 'Title'] = pTitle.text
    print(pTitle.text)
    
df.to_csv('data.csv')

编辑:要添加更多数据,可以方便地在循环之前设置列,如下所示:

cols = ['Title', 'Col_0', 'Col_1', 'Col_N']
df = pd.DataFrame(columns=cols)

然后在循环内部:

...
df.loc[idx, 'Title'] = title
df.loc[idx, 'Col_0'] = data_0
df.loc[idx, 'Col_1'] = data_1
df.loc[idx, 'Col_N'] = data_N
...

编辑(因为我找到了另一种方法):

您可以创建一个包含所有数据的列表,然后将其传递给数据帧:

prodTitle = driver.find_elements_by_xpath("//*[contains(@class,'itemTitle')]")
data = []

for pTitle in prodTitle:
    itemName = pTitle
    data.append([pTitle.text, pTitle.data_0, pTitle.data_1, ...])

columns = ['Title', 'Col_0', 'Col_1', ...]
df = pd.DataFrame(data=data, columns=columns)

相关问题 更多 >