【问题标题】:Pandas dataframe not exporting all rows to csv (but all are displayed in terminal)Pandas 数据框未将所有行导出到 csv(但所有行都显示在终端中)
【发布时间】:2019-12-05 06:24:15
【问题描述】:

我已经开始使用 pandas 和网络抓取,代码似乎可以工作,并且当我运行代码时,所有结果行都显示在终端中,但是当我将其导出到 csv 时,它只显示一半的结果行。我正在遍历 url 可能与此有关,但是我不确定为什么结果仍然在终端中正确显示。

import pandas as pd
import requests
import bs4
from bs4 import BeautifulSoup

urls = ['https://www.indeed.co.uk/jobs?q=Scrum+master&l=London', 'https://www.indeed.co.uk/jobs?q=Scrum+master&l=London&start=10']

for url in urls:
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
    job_results = soup.find(id='resultsCol')
    jobs = job_results.find_all(class_='jobsearch-SerpJobCard')

    titles = [job.find(class_='jobtitle').get_text() for job in jobs]
    descriptions = [job.find('div', attrs={'class': 'summary'}).get_text() for job in jobs]

  jobs_filtered = pd.DataFrame(
        {
            'title' : titles,
            'description' : descriptions,
        })

    print(jobs_filtered)
    jobs_filtered.to_csv('jobs_filtered11.csv')

【问题讨论】:

  • 当您说只有一半的数据在.csv 中时,您的意思是只有一个站点的数据吗?我问是因为您将所有迭代的结果保存到相同的文件名,这意味着您正在覆盖数据。
  • 是的,来自一个 url 的数据,可能这就是问题所在,我该如何解决这个问题,以便将所有内容都添加到同一个文件中?真正让我失望的是所有结果都出现在终端中。
  • 是的,它每次都会被打印出来,但是因为你正在覆盖文件,所以你只能从最后一次迭代中获取数据

标签: python pandas dataframe web-scraping beautifulsoup


【解决方案1】:

请使用追加模式获取所需的输出。

jobs_filtered.to_csv('jobs_filtered11.csv', mode='a', header=False) # True for the first time if necessary

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2015-04-19
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 2021-06-13
    • 2021-10-23
    相关资源
    最近更新 更多