【问题标题】:Add every scraped item to csv row pandas将每个抓取的项目添加到 csv 行 pandas
【发布时间】:2021-06-20 15:42:45
【问题描述】:

我有一个 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)

但它只添加最后一项

【问题讨论】:

  • 有什么你试过但没用的吗?
  • 是的,我尝试在 for 循环中使用数据框将报废的文本添加到 csv 文件,但它只添加了最后一项
  • 这就是我为 prodTitle 中的 pTitle 尝试的 prodTitle = driver.find_elements_by_xpath("//*[contains(@class,'itemTitle')]"): itemName = pTitle pd = pd.dataframe( pTitle.text) pd.to_csv('data.csv', pd) print(pTitle.text)
  • 您应该在问题中提及到目前为止您到底尝试了什么(提供代码)并提及您遇到的具体问题/错误。

标签: python python-3.x pandas dataframe selenium


【解决方案1】:

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

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
...

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

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

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)

【讨论】:

  • 它工作得很好,但是如何添加另一列然后写入没有索引或标题的文件?
  • 我编辑了答案以包括向 DataFrame 添加更多列和数据的步骤
  • 如果我想删除索引编号?
  • 您必须在每次迭代中创建一行,并使用与主数据框相同的列并附加它们
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-06
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
  • 2020-06-27
  • 1970-01-01
相关资源
最近更新 更多