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

爬虫主要就是要过滤掉网页中没用的信息。抓取网页中实用的信息
一般的爬虫架构为:

Python爬虫:用BeautifulSoup进行NBA数据爬取
python爬虫之前先要对网页的结构知识有一定的了解。如网页的标签,网页的语言等知识,推荐去W3School:
W3school链接进行了解
在进行爬虫之前还要有一些工具:
1.首先Python 的开发环境:这里我选择了python2.7,开发的IDE为了安装调试方便选择了用VS2013上的python插件,在VS上进行开发(python程序的调试与c的调试几乎相同较为熟悉)。
2.网页源代码的查看工具:尽管每个浏览器都能进行网页源代码的查看。但这里我还是推荐用火狐浏览器和FirBug插件(同一时候这两个也是网页开发者必用的工具之中的一个);
FirBug插件的安装能够在右边的加入组件中安装;

其次,让我们来看看网页的源代码。这里,我将以我们将要抓取的篮球数据为例:

[En]

Second, let’s try to look at the source code of the web page. Here I will take the basketball data we are going to crawl as an example:

如我要爬取网页中的Team Comparison表格内容为例:

Python爬虫:用BeautifulSoup进行NBA数据爬取
先右键选中如我要爬取的比分32-49。点击右键选择选择用firBug查看元素,(FirBug的另一个优点是在查看源代码时会在网页上显示源代码所显示的样式,在网页中我的位置及内容)网页下方就会跳出网页的源代码以及32-49比分所在的位置及源代码例如以下图:
Python爬虫:用BeautifulSoup进行NBA数据爬取
能够看到32-49为网页的源代码为:
<span class="hljs-tag"><<span class="hljs-title">td</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"sdi-datacell"</span> <span class="hljs-attribute">align</span>=<span class="hljs-value">"center"</span>></span>32-49<span class="hljs-tag">td</span>>

当中td为标签的名字,class为类的名字,align为格式,32-49为标签的内容,为我们要爬取的内容;
然而,同一个网页中有许多相似的标签和类名,仅靠这两个元素无法爬下我们需要的数据,所以我们需要检查这个标签的父标签。或更高级别的标记来提取我们想要抓取的数据的许多其他特征。以过滤我们不爬行的其他数据。例如,我们选择此表格的标签作为我们筛选的第二个标签。

[En]

However, there are many similar tags and class names in the same web page, and these two elements alone cannot climb down the data we need, so we need to check the parent tag of this tag. or a tag at a higher level to extract a lot of other features that we want to crawl data. To filter other data that we don’t crawl. For example, we choose the label of this form as the second one for our screening.

特征:

<span class="hljs-tag"><<span class="hljs-title">div</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"sdi-so"</span>></span>
<span class="hljs-tag"><<span class="hljs-title">h3</span>></span>Team Comparison<span class="hljs-tag">h3</span>>

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

<span class="hljs-label">http:</span>//www<span class="hljs-preprocessor">.covers</span><span class="hljs-preprocessor">.com</span>/pageLoader/pageLoader<span class="hljs-preprocessor">.aspx</span>?page=/data/nba/matchups/g5_preview_12<span class="hljs-preprocessor">.html</span>

由于有搭站点的经验,所以能够这里
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,
                                <span class="hljs-string">'html.parser'</span>,
                                from_encoding=<span class="hljs-string">'utf-8'</span>
                                )
    links2=soup.find_all(<span class="hljs-string">'div'</span>,class_=<span class="hljs-string">"sdi-so"</span>,limit=<span class="hljs-number">2</span>)
    cishu=<span class="hljs-number">0</span>
    <span class="hljs-keyword">for</span> i <span class="hljs-operator">in</span> links2:
        <span class="hljs-keyword">if</span>(cishu==<span class="hljs-number">1</span>):
            <span class="hljs-constant">two</span>=i.find_all(<span class="hljs-string">'td'</span>,class_=<span class="hljs-string">"sdi-datacell"</span>)
            <span class="hljs-keyword">for</span> q <span class="hljs-operator">in</span> <span class="hljs-constant">two</span>:
                print q.<span class="hljs-keyword">text</span>
                table.<span class="hljs-built_in">write</span>(row,col,q.<span class="hljs-keyword">text</span>)
                col=(col+<span class="hljs-number">1</span>)%<span class="hljs-number">9</span>
                <span class="hljs-keyword">if</span>(col==<span class="hljs-number">0</span>):
                    row=row+<span class="hljs-number">1</span>
            row=row+<span class="hljs-number">1</span>
            <span class="hljs-built_in">file</span>.save(<span class="hljs-string">'NBA.xls'</span>)
        cishu=cishu+<span class="hljs-number">1</span>

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为限制找两个(这是为过滤其它相似的标签)

 <span class="hljs-keyword">for</span> i <span class="hljs-operator">in</span> links2:
        <span class="hljs-keyword">if</span>(cishu==<span class="hljs-number">1</span>):
            <span class="hljs-constant">two</span>=i.find_all(<span class="hljs-string">'td'</span>,class_=<span class="hljs-string">"sdi-datacell"</span>)
            <span class="hljs-keyword">for</span> q <span class="hljs-operator">in</span> <span class="hljs-constant">two</span>:
                print q.<span class="hljs-keyword">text</span>
                table.<span class="hljs-built_in">write</span>(row,col,q.<span class="hljs-keyword">text</span>)
                col=(col+<span class="hljs-number">1</span>)%<span class="hljs-number">9</span>
                <span class="hljs-keyword">if</span>(col==<span class="hljs-number">0</span>):
                    row=row+<span class="hljs-number">1</span>
            row=row+<span class="hljs-number">1</span>

为在找到的’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写函数,这里不再累述;
最后我们爬下来数据保存格式后样式为:

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

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

Original: https://www.cnblogs.com/zsychanpin/p/7402839.html
Author: zsychanpin
Title: Python爬虫:用BeautifulSoup进行NBA数据爬取

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/9796/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部