算法 自动采集列表(importrequestsbs4bs4frombs42.1数据采集的步骤(组图))

优采云 发布时间: 2022-01-20 15:08

  算法 自动采集列表(importrequestsbs4bs4frombs42.1数据采集的步骤(组图))

  1 资料采集概览

  要开始一个数据分析项目,您需要做的第一件事就是获取原创数据。获取原创数据的方法有很多。例如:

  获取数据集文件

  使用爬虫采集数据

  直接访问excel、csv等数据文件

  其他方法...

  

  在本次*敏*感*词*系列数据分析项目实战中,在数据采集方面,主要数据来源于对数据采集的爬虫使用,同时也辅助其他数据进行对比。

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

  采集*敏*感*词*全球上市公司2000强榜单涵盖2007年至2017年,跨越10余年。

  这个采集网站的目标是多个网页,但是多个网页的分布结构不同。虽然思路和步骤大同小异,但需要单独写,分别采集。

  2 数据采集 步骤

  data采集大致分为几个步骤:

  下载目标主页内容

  采集 主页上的数据

  采集 链接到主页上的其他分发页面 网站

  下载和采集各个分发页面数据

  保存 采集 数据

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

  导入请求

  从 bs4 导入 BeautifulSoup

  导入 csv

  2.1 数据下载模块

  主要基于requests,代码如下:

  定义下载(网址):

  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, 像 Gecko ) Chrome/59.0.3071.115 Safari/537.36'}

  响应 = requests.get(url,headers=headers)

  # 打印(response.status_code)

  返回响应.文本

  该模块将用于主网页的数据下载和各子页面的数据下载。是一个比较常见的模块。

  

  2.2 采集 主页上的数据

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

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

  def get_content_first_page(html, year):

  '''

  获取排名 1-100 的公司列表,包括标题

  '''

  汤 = BeautifulSoup(html, 'lxml')

  身体 = 汤. 身体

  body_content = body.find('div', {'id': 'bodyContent'})

  表格 = body_content.find_all('table', {'class': 'XXXXtable'})

  # 一共有3张桌子,最后一张就是我们想要的

  trs = 表[-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)

  对于 i, tr in enumerate(trs):

  如果 i == 0 或 i == 1:

  继续

  tds = tr.find_all('td')

  # 获取公司排名和名单

  row = [ item.text.strip() for item in tds]

  row.insert(0, 年)

  rank_list.append(行)

  返回排名列表

  def get_page_urls(html):

  '''

  获取排名 101-2000 的公司的网页链接

  '''

  汤 = BeautifulSoup(html, 'lxml')

  身体 = 汤. 身体

  body_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]

  返回 page_urls

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

  步骤也是网页下载和表格数据爬取。代码内容与主网页类似,但在细节上存在一些差异,这里不再赘述。

  

  2.4 数据存储

  采集 的数据最终保存为 csv 文件。模块代码如下:

  def save_data_to_csv_file(数据,文件名):

  '''

  将数据保存到 csv 文件

  '''

  使用 open(file_name, 'a', errors='ignore', newline='') 作为 f:

  f_csv = csv.writer(f)

  f_csv.writerows(数据)

  2.5 个数据采集主函数

  def get_forbes_global_year_2007(year=2007):

  网址 = '网址'

  html = 下载(网址)

  # 打印(html)

  data_first_page = get_content_first_page(html, 年份)

  # 打印(data_first_page)

  save_data_to_csv_file(data_first_page, 'forbes_'+str(year)+'.csv')

  page_urls = get_page_urls(html)

  # 打印(page_urls)

  对于 page_urls 中的 url:

  html = 下载(网址)

  data_other_page = get_content_other_page(html, year)

  # 打印(data_other_page)

  print('保存数据...', url)

  save_data_to_csv_file(data_other_page, 'forbes_'+str(year)+'.csv')

  如果 __name__ == '__main__':

  # 获取 2009 年*敏*感*词*全球 2000 强的数据

  get_forbes_global_year_2007()

  3 总结

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

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

  结尾。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线