Python 数据帧-写入标头时出现问题

Python 数据帧-写入标头时出现问题,python,pandas,csv,web-scraping,beautifulsoup,Python,Pandas,Csv,Web Scraping,Beautifulsoup,在做了一些清理之后,我得到了我所有的数据,将其存储在一个文件夹中,但是我在写标题时遇到了一个问题。由于我正在抓取一个工作站点的许多页面,所以我必须创建一个循环,循环遍历这些页面,并在每个页面上获得不同的df,完成后,我将df保存到CSV文件中 问题是每次迭代都会写一次头,我只想写一次 我已经尝试了前面这个问题的所有解决方案,但我仍然无法找到这个问题的解决方案。如果这是一个愚蠢的问题,我很抱歉,但我仍然在学习和热爱这段旅程。任何帮助、提示、建议都会非常有用 这是我的代码: 输出: 因为您正在调用f

在做了一些清理之后,我得到了我所有的数据,将其存储在一个文件夹中,但是我在写标题时遇到了一个问题。由于我正在抓取一个工作站点的许多页面,所以我必须创建一个循环,循环遍历这些页面,并在每个页面上获得不同的df,完成后,我将df保存到CSV文件中

问题是每次迭代都会写一次头,我只想写一次

我已经尝试了前面这个问题的所有解决方案,但我仍然无法找到这个问题的解决方案。如果这是一个愚蠢的问题,我很抱歉,但我仍然在学习和热爱这段旅程。任何帮助、提示、建议都会非常有用

这是我的代码:

输出:


因为您正在调用
find_data(soup)
max_pages
次数,这意味着您也在多次执行以下操作:

 df = pd.DataFrame(l)
 df = df[['Date', 'Company', 'Role', 'URL']]
 df = df.dropna()
 df = df.sort_values(by=['Date'], ascending=False)
 df.to_csv("csv_files/pandas_data.csv", mode='a', header=True, index=False)
尝试将
find_data()
函数更改为接收列表、填充列表并返回列表。然后,在调用该函数后,可以使用
将头添加到文件中,并将其写入\u csv()

例如:

def find_data(soup, l):
    for div in soup.find_all('div', class_ = 'js_result_container'):
        d = {}
        try:
            d["Company"] = div.find('div', class_= 'company').find('a').find('span').get_text()
            d["Date"] = div.find('div', {'class':['job-specs-date', 'job-specs-date']}).find('p').find('time').get_text()
            pholder = div.find('div', class_= 'jobTitle').find('h2').find('a')
            d["URL"] = pholder['href']
            d["Role"] = pholder.get_text().strip()
            l.append(d)
        except:
            pass
   return l

if __name__ == '__main__':

    f = open("csv_files/pandas_data.csv", "w")
    f.truncate()
    f.close()

    query = input('Enter role to search: ')
    max_pages = int(input('Enter number of pages to search: '))
    l = []
    for i in range(max_pages):
        page = 'https://www.monster.ie/jobs/search/?q='+query+'&where=Dublin__2C-Dublin&sort=dt.rv.di&page=' + str(i+1)
        soup = getPageSource(page)
        print("Scraping Page number: " + str(i+1))
        l = find_data(soup)

    df = pd.DataFrame(l)
    df = df[['Date', 'Company', 'Role', 'URL']]
    df = df.dropna()
    df = df.sort_values(by=['Date'], ascending=False)
    df.to_csv("csv_files/pandas_data.csv", mode='a', header=True, index=False)

非常感谢科林·里卡多。我实现了您的解决方案,效果非常好,我只需更改一行并在“find_data”函数中添加第二个参数。我感谢你在这方面的帮助。
 df = pd.DataFrame(l)
 df = df[['Date', 'Company', 'Role', 'URL']]
 df = df.dropna()
 df = df.sort_values(by=['Date'], ascending=False)
 df.to_csv("csv_files/pandas_data.csv", mode='a', header=True, index=False)
def find_data(soup, l):
    for div in soup.find_all('div', class_ = 'js_result_container'):
        d = {}
        try:
            d["Company"] = div.find('div', class_= 'company').find('a').find('span').get_text()
            d["Date"] = div.find('div', {'class':['job-specs-date', 'job-specs-date']}).find('p').find('time').get_text()
            pholder = div.find('div', class_= 'jobTitle').find('h2').find('a')
            d["URL"] = pholder['href']
            d["Role"] = pholder.get_text().strip()
            l.append(d)
        except:
            pass
   return l

if __name__ == '__main__':

    f = open("csv_files/pandas_data.csv", "w")
    f.truncate()
    f.close()

    query = input('Enter role to search: ')
    max_pages = int(input('Enter number of pages to search: '))
    l = []
    for i in range(max_pages):
        page = 'https://www.monster.ie/jobs/search/?q='+query+'&where=Dublin__2C-Dublin&sort=dt.rv.di&page=' + str(i+1)
        soup = getPageSource(page)
        print("Scraping Page number: " + str(i+1))
        l = find_data(soup)

    df = pd.DataFrame(l)
    df = df[['Date', 'Company', 'Role', 'URL']]
    df = df.dropna()
    df = df.sort_values(by=['Date'], ascending=False)
    df.to_csv("csv_files/pandas_data.csv", mode='a', header=True, index=False)