设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

使用Python抓取欧洲足球联赛数据

2014-6-3 14:28| 发布者: joejoe0332| 查看: 9630| 评论: 0|原作者: naughty|来自: 开源中国社区

摘要: 背景Web Scraping在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤数据的采集和获取数据的清洗,抽取,变形和装载数据的分析,探索和预测数据的展现其中首先要做的就是获取数据,并 ...

背景

Web Scraping

在大数据时代,一切都要用数据来说话,大数据处理的过程一般需要经过以下的几个步骤

  • 数据的采集和获取

  • 数据的清洗,抽取,变形和装载

  • 数据的分析,探索和预测

  • 数据的展现

其中首先要做的就是获取数据,并提炼出有效地数据,为下一步的分析做好准备。

数据的来源多种多样,以为我本身是足球爱好者,而世界杯就要来了,所以我就想提取欧洲联赛的数据来做一个分析。许多的网站都提供了详细的足球数据,例如:


  这些网站都提供了详细的足球数据,然而为了进一步的分析,我们希望数据以格式化的形式存储,那么如何把这些网站提供的网页数据转换成格式化的数据呢?这就要用到Web scraping的技术了。简单地说,Web Scraping就是从网站抽取信息, 通常利用程序来模拟人浏览网页的过程,发送http请求,从http响应中获得结果。


  Web Scraping 注意事项


  在抓取数据之前,要注意以下几点:

  • 阅读网站有关数据的条款和约束条件,搞清楚数据的拥有权和使用限制

  • 友好而礼貌,使用计算机发送请求的速度飞人类阅读可比,不要发送非常密集的大量请求以免造成服务器压力过大

  • 因为网站经常会调整网页的结构,所以你之前写的Scraping代码,并不总是能够工作,可能需要经常调整

  • 因为从网站抓取的数据可能存在不一致的情况,所以很有可能需要手工调整


  Python Web Scraping 相关的库


  Python提供了很便利的Web Scraping基础,有很多支持的库。这里列出一小部分


当然也不一定要用Python或者不一定要自己写代码,推荐关注import.io


  Web Scraping 代码


  下面,我们就一步步地用Python,从腾讯体育来抓取欧洲联赛13/14赛季的数据。


  首先要安装Beautifulsoup

1pip install beautifulsoup4


  我们先从球员的数据开始抓取。


  球员数据的Web请求是http://soccerdata.sports.qq.com/playerSearch.aspx?lega=epl&pn=2 ,返回的内容如下图所示:



  该web服务有两个参数,lega表示是哪一个联赛,pn表示的是分页的页数。


  首先我们先做一些初始化的准备工作


1from urllib2 import urlopen
2import urlparse
3import bs4
4 
5BASE_URL = "http://soccerdata.sports.qq.com"
6PLAYER_LIST_QUERY = "/playerSearch.aspx?lega=%s&pn=%d"
7league = ['epl','seri','bund','liga','fran','scot','holl','belg']
8page_number_limit = 100
9player_fields = ['league_cn','img','name_cn','name','team','age','position_cn','nation','birth','query','id','teamid','league']


  urlopen,urlparse,bs4是我们将要使用的Python库。


  BASE_URL,PLAYER_LIST_QUERY,league,page_number_limit和player_fields是我们会用到的一些常量。


  下面是抓取球员数据的具体代码:


01def get_players(baseurl):
02    html = urlopen(baseurl).read()
03    soup = bs4.BeautifulSoup(html, "lxml")
04    players = [ dd for dd in soup.select('.searchResult tr'if dd.contents[1].name != 'th']
05    result = []
06    for player in players:
07        record = []
08        link = ''
09        query = []
10        for item in player.contents:
11            if type(item) is bs4.element.Tag:
12                if not item.string and item.img:
13                    record.append(item.img['src'])
14                else :
15                    record.append(item.string and item.string.strip() or 'na')
16                try:
17                    = urlparse.urlparse(item.a['href']).query
18                    if len(link) == 0:
19                        link = o
20                        query = dict([(k,v[0]) for k,v in urlparse.parse_qs(o).items()])
21                except:
22                    pass
23              
24        if len(record) != 10:
25            for in range(010 - len(record)):
26                record.append('na')
27        record.append(unicode(link,'utf-8'))
28        record.append(unicode(query["id"],'utf-8'))
29        record.append(unicode(query["teamid"],'utf-8'))
30        record.append(unicode(query["lega"],'utf-8'))
31        result.append(record)
32    return result
33     
34result = []
35for url in [ BASE_URL + PLAYER_LIST_QUERY % (l,n) for in league for in range(page_number_limit) ]:
36    result = result +  get_players(url)



酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部