Python爬虫:用BeautifulSoup进行NBA数据爬取
爬虫主要就是要过滤掉网页中没用的信息。抓取网页中实用的信息
一般的爬虫架构为:
在python爬虫之前先要对网页的结构知识有一定的了解。如网页的标签,网页的语言等知识,推荐去W3School:
W3school链接进行了解
在进行爬虫之前还要有一些工具:
1.首先Python 的开发环境:这里我选择了python2.7,开发的IDE为了安装调试方便选择了用VS2013上的python插件,在VS上进行开发(python程序的调试与c的调试几乎相同较为熟悉)。
2.网页源代码的查看工具:尽管每个浏览器都能进行网页源代码的查看。但这里我还是推荐用火狐浏览器和FirBug插件(同一时候这两个也是网页开发者必用的工具之中的一个);
FirBug插件的安装能够在右边的加入组件中安装;
其次来看试着看网页的源代码,这里我以我们要爬取的篮球数据为例:
如我要爬取网页中的Team Comparison表格内容为例:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU4MTk4Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
先右键选中如我要爬取的比分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写函数,这里不再累述;
最后我们爬下来数据保存格式后样式为:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU4MTk4Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
NICE
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjU4MTk4Mjc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="这里写图片描写叙述" title="">
我所觉得最深沉的爱。莫过于分开以后。我将自己,活成了你的样子。
Python爬虫:用BeautifulSoup进行NBA数据爬取的更多相关文章
- Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)
Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...
- [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息
[Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫 版权声明: ...
- Python爬虫工程师必学——App数据抓取实战 ✌✌
Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...
- Python爬虫工程师必学APP数据抓取实战✍✍✍
Python爬虫工程师必学APP数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- Python爬虫工程师必学——App数据抓取实战
Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...
- 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中
1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...
- Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐
一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...
- Python 爬虫练手项目—酒店信息爬取
from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...
- Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)
Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...
随机推荐
- CI脚本异常退出问题定位
背景 在CI脚本中,使用类似如下脚本进行项目编译的计时,但在执行过程中,有时会出现CI脚本(命名为ci.sh)未完全执行的情况: #!/bin/bash -e sleep_time=$1 start_ ...
- nohup和&后台运行,查看占用端口进程
1.nohup 用途:不挂断地运行命令. 语法:nohup Command [ Arg - ] [ & ] 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup ...
- wx:for修改样式
在获取文字识别数据之后,对数据进行wx:for循环加了边框如图效果: 需求:点击不同边框获取不同文字,再次点击取消选中:选中背景为#999: <view wx:for="{{img_d ...
- 疑似CPU或者内存故障导致进程崩溃
我们有一个服务跑在微软云的所有宿主机上.最近发现某一台机器上该服务进程持续崩溃.崩溃原因是访问了一个无效指针,对应的代码如下 serviceListIniBuffer.AppendF("Se ...
- 在游览器上可以连网,Ionic打包后不能连接网络
在游览器上可以连网,Ionic打包后不能连接网络.可能是没有安装cordova-plugin-whitelist插件. 解决方案:
- Celery 源码解析三: Task 对象的实现
Task 的实现在 Celery 中你会发现有两处,一处位于 celery/app/task.py,这是第一个:第二个位于 celery/task/base.py 中,这是第二个.他们之间是有关系的, ...
- 浅谈JavaScript的apply和call语句
我们试图在回调函数中,用this表示oDiv对象,这样感觉爽. 1 animate(oDiv,{"left":600},2000,function(){ 2 t ...
- 5. 监视和ZooKeeper操作
ZooKeeper中的写入(write)操作是原子性和持久性的. 写入到大多数ZooKeeper服务器上的持久性存储中,可以保证写操作成功. 无论如何,ZooKeeper的最终一致性模型允许读取(re ...
- Maven仓库-Nexus环境搭建及简单介绍
1. 环境搭建 1.1 下载 http://www.sonatype.org/nexus/ NEXUS OSS [OSS = Open Source Software,开源软件——免费] NE ...
- Jquery判断Checkbox是否选中三种方法
方法一:if ($("#checkbox-id")get(0).checked) { // do something} 方法二:if($('#checkbox-id').is ...