1 数据采集概述

开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径。比如:

  1. 获取数据集(dataset)文件
  2. 使用爬虫采集数据
  3. 直接获得excel、csv及其他数据文件
  4. 其他途径…

本次福布斯系列数据分析项目实战,数据采集方面,主要数据来源于使用爬虫进行数据采集,同时也辅助其他数据进行对比。

本文主要是介绍使用爬虫进行数据采集的思路和步骤。

本次采集的福布斯全球上市企业2000强排行榜数据,涉及年份从2007年到2017年,跨越10多年。

本次采集的目标网站,是多个网页,但多个网页的分布结构都有所不同,虽然思路和步骤都差不多,但需要分开来编写,分别采集。

2 数据采集步骤

数据采集大体分为几步:

  1. 目标主网页内容的Download
  2. 主网页上数据的采集
  3. 主网页上其他分发页面网站链接的采集
  4. 各分发网页数据的download与采集
  5. 将采集的数据保存

涉及到的python库包括,requests、BeautifulSoup以及csv。 下面以采集某年的数据为案例,来描述下数据采集的步骤。

import requests
from bs4 import BeautifulSoup
import csv

2.1 数据Download模块

主要是基于 requests,代码如下:

def download(url):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}response = requests.get(url,headers=headers)# print(response.status_code)return response.text

这个模块会在主网页数据下载,以及各个分页面数据下载时使用,是一个比较通用的模块。

2.2 主网页上数据的采集

主网页的页面结构,主要分为两个部分,一类是包含其他页面数据的网页链接,一类是主网页上的公司数据列表,以表格形式在网页上显示。

用BeautifulSoup可以把这些数据解析出来。 代码模块如下:

  • 解析主网页上的公司数据列表信息
def get_content_first_page(html, year):'''获取排名在1-100的公司列表,且包含表头'''soup = BeautifulSoup(html, 'lxml')body = soup.bodybody_content = body.find('div', {'id': 'bodyContent'})tables = body_content.find_all('table', {'class': 'XXXXtable'})# tables一共有3个,最后一个才是我们想要的trs = tables[-1].find_all('tr')# 获取表头名称# trs[1], 这里跟其他年份不一样row_title = [item.text.strip() for item in trs[1].find_all('th')]row_title.insert(0, '年份')rank_list = []rank_list.append(row_title)for i, tr in enumerate(trs):if i == 0 or i == 1:continuetds = tr.find_all('td')# 获取公司排名及列表row = [ item.text.strip() for item in tds]row.insert(0, year)rank_list.append(row)return rank_list
  • 解析主网页上其他页面的网页链接
def get_page_urls(html):'''获取排名在101-2000的公司的网页链接'''soup = BeautifulSoup(html, 'lxml')body = soup.bodybody_content = body.find('div', {'id': 'bodyContent'})label_div = body_content.find('div', {'align':'center'})label_a = label_div.find('p').find('b').find_all('a')page_urls = ['basic_url' + item.get('href') for item in label_a]return page_urls

2.3 各个分发页面上的数据采集

步骤也是 网页页面下载 和表格类数据爬取。 代码内容跟主网页页面类似,只是细节上有些差异,这里就不作赘述了。

2.4 数据存储

采集的数据,最后保存到csv文件中。模块代码如下:

def save_data_to_csv_file(data, file_name):'''保存数据到csv文件中'''with open(file_name, 'a', errors='ignore', newline='') as f:f_csv = csv.writer(f)f_csv.writerows(data)

2.5 数据采集主函数

def get_forbes_global_year_2007(year=2007):url = 'url'html = download(url)# print(html)data_first_page = get_content_first_page(html, year)# print(data_first_page)save_data_to_csv_file(data_first_page, 'forbes_'+str(year)+'.csv')page_urls = get_page_urls(html)# print(page_urls)for url in page_urls:html = download(url)data_other_page = get_content_other_page(html, year)# print(data_other_page)print('saving data ...', url)save_data_to_csv_file(data_other_page, 'forbes_'+str(year)+'.csv')if __name__ == '__main__':# get data from Forbes Global 2000 in Year 2009get_forbes_global_year_2007()

3 总结

本文只介绍了数据采集的思路与各个模块,并没有提供目标网页的链接, 一方面由于原始网页的数据信息比较杂乱,采集的时候需要写多个采集程序,另外一方面,由于我们的重点在于后续的数据分析部分,希望不要着重于数据爬取。

在后续的分析过程中,我们会来查看数据的结构、数据完整性及相关信息,欢迎继续关注。

如果您喜欢我的文章,欢迎关注我的微信公众号“Python数据之道”(ID:PyDataRoad)。

福布斯系列之数据采集 | Python数据分析项目实战相关推荐

  1. 福布斯系列之数据分析思路篇 | Python数据分析项目实战

    福布斯每年都会发布福布斯全球上市企业2000强排行榜(Forbes Global 2000),这个排行榜每年发布的时候,国内外总有新闻会热闹的讨论一番,但很少见到比较全面的分析. 因此才有了这样一个想 ...

  2. python数据分析项目实战—————链家北京租房数据统计分析

    链家北京租房数据分析 1.读取数据 import pandas as pd import matplotlib.pyplot as plt import numpy as npdata_dframe ...

  3. python数据分析项目实战波士顿房价预测——手写梯度下降法

    导入所需要的库 import numpy as np import pandas as pd from matplotlib import font_manager as fm, rcParams i ...

  4. 【数据分析项目实战】Python爬取BOSS直聘岗位和数据分析

    说明:这是一个数据分析项目全流程(附带项目实例),本篇教程来源于网络,胖哥对此进行了完整的梳理,并把用到的数据+代码完全奉上.如需数据+完整代码可以直接到文章最后获取. 这里面的数据,我只爬取了部分, ...

  5. Python数据分析项目班课程介绍

    Python.大数据.人工智能等都是当今避免不了的话题,市面上大数据存储.大数据分析.人工智能等开发人才需求日益旺盛. Python数据分析项目班课程按照企业实际岗位需求进行编排涉及,内容都是以实际项 ...

  6. 精心整理了30个Python数据分析项目,拿走就用!

    今天给大家推荐一个优质的Python公众号「法纳斯特」,作者:小F. 学习编程是一个比较枯燥的过程,所以小F平常喜欢分享一些有趣.有料的Python原创项目实战.从2018年8月一直到现在,已经更新接 ...

  7. 精选合辑 | 30个Python数据分析及实战项目(含源码)

    今天给大家推荐一个优质的Python公众号「法纳斯特」,作者:小F. 小F是211机械专业毕业的,上学的时候还造了两辆车(FSC.无碳小车),毕业以后又在车企搬了一年的砖,最终决定转行IT,从零开始学 ...

  8. python数据分析实战案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

  9. python 数据分析 实际案例-Python数据分析案例实战

    原标题:Python数据分析案例实战 至今我们网站已经开设了多个数据分析系列的课程,大部分都是基于算法思路来开展的,课程中着重点在于算法的讲授.软件的使用,案例只是辅助学习.然而很多学员反映,希望可以 ...

最新文章

  1. luci网页shell_openwrt luci web分析
  2. apache php 执行shell,PHP执行普通shell命令流程解析
  3. 招募 | 大马鹿物流运筹优化算法工程师
  4. RedMonk 语言排行:Kotlin 上升 8 位,TS 快进前 10
  5. CALayer的基本操作
  6. textarea标签中的换行与空格问题
  7. GPS模块输出的NMEA数据ddmm.mmmm转换成dd.ddddd,在google Earth Pro中描点
  8. 搭建Nginx+Tomcat 负载均衡集群
  9. 关于单位基金资产净值
  10. Eclipse 版本升级:如何不卸载旧版本 Eclipse 实现在线升级到最新版本?
  11. MySQL8.0与MySQL5.7 OLTP 性能测试对比
  12. JZOJ 3517. 空间航行
  13. 开源免费的录屏gif工具
  14. SetTimer函数的使用
  15. 我的世界php motd,我的世界motd标语编辑器
  16. 莱布尼兹其实离开我们并不遥远
  17. selenium对Alert弹框的多种处理
  18. win7系统怎么打开打印服务器失败,win7安装网络打印机驱动老是失败如何解决
  19. 一场官司,终于让人们看清了苹果
  20. Mac: 账户失去了管理员权限,怎么办?!网上流行的和没见过的都在这里。

热门文章

  1. 奈飞文化手册_如何评价《奈飞文化手册》这本书?
  2. Himall商城文件操作接口Commons
  3. 理论篇·关于5G的一些小知识
  4. 被誉为“阿拉比卡的天堂”!这个中国城市跻身全球阿拉比卡咖啡黄金种植带...
  5. 3.python 发送邮件之smtplib模块
  6. Android .9.png图片的制作与使用
  7. 辗转相除法的原理解析与实现
  8. unity重定向_关于Unity中Mecanim动画的重定向与动画混合
  9. 01背包问题——动态规划详解
  10. 新思科技招聘 | 5月热招职位(内推哦)