爬虫主要就是要过滤掉网页中没用的信息。抓取网页中实用的信息

一般的爬虫架构为:



在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数据爬取的更多相关文章

  1. Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(人人网)(下)

    Python爬虫教程-13-爬虫使用cookie爬取登录后的页面(下) 自动使用cookie的方法,告别手动拷贝cookie http模块包含一些关于cookie的模块,通过他们我们可以自动的使用co ...

  2. [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息

    [Python爬虫] 使用 Beautiful Soup 4 快速爬取所需的网页信息 2018-07-21 23:53:02 larger5 阅读数 4123更多 分类专栏: 网络爬虫   版权声明: ...

  3. Python爬虫工程师必学——App数据抓取实战 ✌✌

    Python爬虫工程师必学——App数据抓取实战 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统 ...

  4. Python爬虫工程师必学APP数据抓取实战✍✍✍

    Python爬虫工程师必学APP数据抓取实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  5. Python爬虫工程师必学——App数据抓取实战

    Python爬虫工程师必学 App数据抓取实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大 ...

  6. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  7. Python爬虫小白入门(六)爬取披头士乐队历年专辑封面-网易云音乐

    一.前言 前文说过我的设计师小伙伴的设计需求,他想做一个披头士乐队历年专辑的瀑布图. 通过搜索,发现网易云音乐上有比较全的历年专辑信息加配图,图片质量还可以,虽然有大有小. 我的例子怎么都是爬取图片? ...

  8. Python 爬虫练手项目—酒店信息爬取

    from bs4 import BeautifulSoup import requests import time import re url = 'http://search.qyer.com/ho ...

  9. Python爬虫教程-12-爬虫使用cookie爬取登录后的页面(人人网)(上)

    Python爬虫教程-12-爬虫使用cookie(上) 爬虫关于cookie和session,由于http协议无记忆性,比如说登录淘宝网站的浏览记录,下次打开是不能直接记忆下来的,后来就有了cooki ...

随机推荐

  1. http 500错误怎么解决方法

    出现500错误的原因是很多的,一般来说,如果程序出错,那么在浏览器内会返回给用户一个友好的错误提示,统一称之为服务器500错误. 解决的方法就是您必须在http中能够正确的获得错误信息,方法为:请打开 ...

  2. 图片格式 WebP APNG

    WebP  是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件 ...

  3. SignalR实现消息推送,包括私聊、群聊、在线所有人接收消息(源码)

    一.关于SignalR 1.简介:Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面, ...

  4. .NET MVC 二级域名路由的实现

    .NET MVC 5以下版本: http://www.cnblogs.com/luanwey/archive/2009/08/12/1544444.html http://blog.maartenba ...

  5. SVN服务迁移备份操作步骤

    SVN服务备份操作步骤 1.准备源服务器和目标服务器 源服务器:192.168.1.250 目标服务器:192.168.1.251 root/rootroot 2.对目标服务器(251)装SVN服务器 ...

  6. 有关数据传输GET和POST的方法的区别

    有关前后端数据交互,主要是通过走http协议通过post或get的方法,拿angularJS来说:通过JS来发送http请求调用相关接口: $scope.apostDate=function(){ $ ...

  7. MVC 页面静态化

    最近工作需要,实现页面静态化,以前在ASP时代,都是FSO自己手动生成的. 新时代,MVC了,当然也要新技术,网上一搜,找到一种解决方案,是基于MVC3的,实现原理是通过mvc提供的过滤器扩展点实现页 ...

  8. SSM :MyBatis与Spring的整合

    MyBatis与Spring的整合 一:Spring整合MyBatis的准备工作: (1.)在项目中加入Spring,ByBatis及整合相关的jar文件 (2.)建立开发目录结构,创建实体类 (3. ...

  9. [转载] 文件锁(Filelock)与锁定映射文件部分内容

    转载自http://jiangzhengjun.iteye.com/blog/517677 文件锁 JDK 1.4引入了文件加锁机制,允许我们同步访问一个共享文件,不过,竞争同一文件的两个线程有可能在 ...

  10. Qemu 简述

    Qemu 架构 Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬 ...