首页 > 解决方案 > 如何根据从网站上抓取的数据创建数据框?

问题描述

我正在尝试从职位发布数据中抓取网站,输出如下所示:

[{'job_title': 'Junior Data Scientist','company': '\n\n BBC', summary': "\n 我们现在正在寻找一名初级数据科学家来与我们的营销和受众团队一起工作伦敦。数据科学团队负责设计...", 'link': 'www.jobsite.com',
'summary_text': "职位介绍\n想象一下,如果 Netflix、赫芬顿邮报、ESPN 和 Spotify 都推出了合二为一……等

我想创建一个如下所示的数据框或 CSV:

预期产出

现在,这是我正在使用的循环:

for page in pages:
    source = requests.get('https://www.jobsite.co.uk/jobs?q=data+scientist&start='.format()).text
    soup = BeautifulSoup(source, 'lxml')

results = []
for jobs in soup.findAll(class_='result'):
    result = {
                'job_title': '',
                'company': '',
                'summary': '',
                'link': '',
                'summary_text': ''
            }

使用循环后,我只打印结果。

在数据框中获取输出的好方法是什么?谢谢!

标签: pythonpandasfor-loopweb-scrapingexport-to-csv

解决方案


查看pandas Dataframe API。有几种方法可以初始化数据框

  • 字典列表
  • 列表列表

您只需要将列表或字典附加到全局变量,就可以了。

results = []
for page in pages:

      source = requests.get('https://www.jobsite.co.uk/jobs?q=data+scientist&start='.format()).text
      soup = BeautifulSoup(source, 'lxml')


      for jobs in soup.findAll(class_='result'):
          result = {
                'job_title': '', # assuming this has value like you shared in the example in your question
                'company': '',
                'summary': '',
                'link': '',
                'summary_text': ''
            }
           results.append(result)
      # results is now a list of dictionaries
df= pandas.DataFrame(results)

另一项建议是,不要考虑将其转储到同一程序中的数据框中。首先将所有 HTML 文件转储到一个文件夹中,然后再次解析它们。这样,如果您需要从以前没有考虑过的页面中获得更多信息,或者如果程序由于某些解析错误或超时而终止,则工作不会丢失。将解析与爬取逻辑分开。


推荐阅读