Python爬虫:用BeautifulSoup进行NBA数据爬取

简介: 爬虫主要就是要过滤掉网页中无用的信息,抓取网页中有用的信息 一般的爬虫架构为: 在python爬虫之前先要对网页的结构知识有一定的了解,如网页的标签,网页的语言等知识,推荐去W3School: W3school链接进行了解 在进行爬虫之前还要有一些工具: 1.首先Python 的开发环境:这里我选择了python2.7,开发的IDE为了安装调试方便选择了用VS2013

爬虫主要就是要过滤掉网页中无用的信息,抓取网页中有用的信息
一般的爬虫架构为:
这里写图片描述
在python爬虫之前先要对网页的结构知识有一定的了解,如网页的标签,网页的语言等知识,推荐去W3School:
W3school链接进行了解
在进行爬虫之前还要有一些工具:
1.首先Python 的开发环境:这里我选择了python2.7,开发的IDE为了安装调试方便选择了用VS2013上的python插件,在VS上进行开发(python程序的调试与c的调试差不多较为熟悉);
2.网页源代码的查看工具:虽然每一个浏览器都能进行网页源代码的查看,但这里我还是推荐用火狐浏览器和FirBug插件(同时这两个也是网页开发人员必用的工具之一);
FirBug插件的安装可以在右边的添加组件中安装;

其次来看试着看网页的源代码,这里我以我们要爬取的篮球数据为例:
如我要爬取网页中的Team Comparison表格内容为例:
这里写图片描述
先右键选中如我要爬取的比分32-49,点击右键选择选择用firBug查看元素,(FirBug的还有一个好处是在查看源码时会在网页上显示源码所显示的样式,在网页中我的位置及内容)网页下方就会跳出网页的源码以及32-49比分所在的位置及源码如下图:
这里写图片描述
可以看到32-49为网页的源码为:

<td class="sdi-datacell" align="center">32-49</td>

其中td为标签的名字,class为类的名字,align为格式,32-49为标签的内容,为我们要爬取的内容;
但类似的标签以及类的名字在同一个网页中有很多,光靠这两个元素无法爬下我们所需要的数据,这时就需要查看这一标签的父标签,或再上一级的标签来提取更多我们要爬取数据的特征,来过滤其他我们所不要爬取的数据,如我们这里选取这张表格所在的标签作为我我们进行筛选的第二个
特征:

<div class="sdi-so">
<h3>Team Comparison</h3>

再来我们来分析网页的URL:
如我们要爬取的网页的URL为:

http://www.covers.com/pageLoader/pageLoader.aspx?page=/data/nba/matchups/g5_preview_12.html

因为有搭网站的经验,所以可以这里
www.covers.com为域名;
/pageLoader/pageLoader.aspxpage=/data/nba/matchups/g5_preview_12.html,可能为放在服务器上的网页根目录的/pageLoader/pageLoader.aspx?page=/data/nba/matchups/地址中的网页,
为了管理方便,相同类型的网页都会放在同一个文件夹下,以类似的命名方式命名:如这边的网页是以g5_preview_12.html命名的所以类似的网页会改变g5中的5,或者_12 中的12,通过改变这两个数字,我们发现类似网页可以改变12数字来得到,
再来学习爬虫:
这里python爬虫主要用到了
urllib2
BeautifulSoup
这两个库,BeautifulSoup的详细文档可以在以下网站中查看:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
在爬取网页时:
先要打开网页,然后在调用beautifulSoup库进行网页的分析,再用如.find函数找到要刚刚我们分析的特征所在的位置,并用.text来获取标签的内容即我们所要爬取的数据
如我们对照以下代码来进行分析:

  response=urllib2.urlopen(url)
    print response.getcode()
    soup=BeautifulSoup(
                                response,
                                'html.parser',
                                from_encoding='utf-8' 
                                )
    links2=soup.find_all('div',class_="sdi-so",limit=2)
    cishu=0
    for i in links2:
        if(cishu==1):
            two=i.find_all('td',class_="sdi-datacell")
            for q in two:
                print q.text
                table.write(row,col,q.text)
                col=(col+1)%9
                if(col==0):
                    row=row+1
            row=row+1
            file.save('NBA.xls')
        cishu=cishu+1

urllib2.urlopen(url)为打开网页;
print response.getcode()为测试网页是否能被打开;
soup=BeautifulSoup(
response,
‘html.parser’,
from_encoding=’utf-8’
)
为代用Beautiful进行网页的分析;
links2=soup.find_all(‘div’,class_=”sdi-so”,limit=2)为进行特征值的查询与返回
其中我们要查找’div’,class_=”sdi-so”,的标签,limit=2为限制找两个(这是为过滤其他类似的标签)

 for i in links2:
        if(cishu==1):
            two=i.find_all('td',class_="sdi-datacell")
            for q in two:
                print q.text
                table.write(row,col,q.text)
                col=(col+1)%9
                if(col==0):
                    row=row+1
            row=row+1

为在找到的’div’,class_=”sdi-so”,的标签中再进行相应的如’td’,class_=”sdi-datacell”标签的查找;
q.text为返回我们所要的数据
这里 row=row+1,row=row+1为我们将数据写入到excel文件时文件格式的整理所用的;
接下来是对抓取数据的保存:
这里我们用了excel来保存数据用到了包:
xdrlib,sys, xlwt
函数:
file=xlwt.Workbook()
table=file.add_sheet(‘shuju’,cell_overwrite_ok=True)
table.write(0,0,’team’)
table.write(0,1,’W/L’)
table.write(row,col,q.text)
file.save(‘NBA.xls’)
为最基本的excel写函数,这里不再累述;
最后我们爬下来数据保存格式后样式为:
这里写图片描述
NICE
这里写图片描述

我所认为最深沉的爱,莫过于分开以后,我将自己,活成了你的样子。

目录
相关文章
|
4天前
|
数据挖掘 索引 Python
Python数据挖掘编程基础3
字典在数学上是一个映射,类似列表但使用自定义键而非数字索引,键在整个字典中必须唯一。可以通过直接赋值、`dict`函数或`dict.fromkeys`创建字典,并通过键访问元素。集合是一种不重复且无序的数据结构,可通过花括号或`set`函数创建,支持并集、交集、差集和对称差集等运算。
14 9
|
1天前
|
数据采集 数据挖掘 数据处理
Python中实现简单爬虫并处理数据
【9月更文挑战第31天】本文将引导读者理解如何通过Python创建一个简单的网络爬虫,并展示如何处理爬取的数据。我们将讨论爬虫的基本原理、使用requests和BeautifulSoup库进行网页抓取的方法,以及如何使用pandas对数据进行清洗和分析。文章旨在为初学者提供一个易于理解的实践指南,帮助他们快速掌握网络数据抓取的基本技能。
12 3
|
4天前
|
存储 索引 Python
python中的数据容器
python中的数据容器
|
3天前
|
数据采集 存储 监控
如何使用 Python 爬取京东商品数据
如何使用 Python 爬取京东商品数据
13 0
|
4天前
|
数据挖掘 Python
Python数据挖掘编程基础8
在Python中,默认环境下并不会加载所有功能,需要手动导入库以增强功能。Python内置了诸多强大库,例如`math`库可用于复杂数学运算。导入库不仅限于`import 库名`,还可以通过别名简化调用,如`import math as m`;也可指定导入库中的特定函数,如`from math import exp as e`;甚至直接导入库中所有函数`from math import *`。但需注意,后者可能引发命名冲突。读者可通过`help(&#39;modules&#39;)`查看已安装模块。
9 0
|
4天前
|
人工智能 数据挖掘 Serverless
Python数据挖掘编程基础
函数式编程中的`reduce`函数用于对可迭代对象中的元素进行累积计算,不同于逐一遍历的`map`函数。例如,在Python3中,计算n的阶乘可以使用`reduce`(需从`funtools`库导入)实现,也可用循环命令完成。另一方面,`filter`函数则像一个过滤器,用于筛选列表中符合条件的元素,同样地功能也可以通过列表解析来实现。使用这些函数不仅使代码更加简洁,而且由于其内部循环机制,执行效率通常高于普通的`for`或`while`循环。
9 0
|
4天前
|
分布式计算 数据挖掘 Serverless
Python数据挖掘编程基础6
函数式编程(Functional Programming)是一种编程范型,它将计算机运算视为数学函数计算,避免程序状态及易变对象的影响。在Python中,函数式编程主要通过`lambda`、`map`、`reduce`、`filter`等函数实现。例如,对于列表`a=[5,6,7]`,可通过列表解析`b=[i+3 for i in a]`或`map`函数`b=map(lambda x:x+3, a)`实现元素加3的操作,两者输出均为`[8,9,10]`。尽管列表解析代码简洁,但其本质仍是for循环,在Python中效率较低;而`map`函数不仅功能相同,且执行效率更高。
6 0
|
4天前
|
数据挖掘 Python
Python数据挖掘编程基础5
函数是Python中用于提高代码效率和减少冗余的基本数据结构,通过封装程序逻辑实现结构化编程。用户可通过自定义或函数式编程方式设计函数。在Python中,使用`def`关键字定义函数,如`def pea(x): return x+1`,且其返回值形式多样,可为列表或多个值。此外,Python还支持使用`lambda`定义简洁的行内函数,例如`c=lambda x:x+1`。
10 0
|
4天前
|
数据挖掘 Python
Python数据挖掘编程基础
判断与循环是编程的基础,Python中的`if`、`elif`、`else`结构通过条件句来执行不同的代码块,不使用花括号,依赖缩进区分代码层次。错误缩进会导致程序出错。Python支持`for`和`while`循环,`for`循环结合`range`生成序列,简洁直观。正确缩进不仅是Python的要求,也是一种良好的编程习惯。
11 0
下一篇
无影云桌面