Bootstrap

Python_BeautifulSoup 抓取网页内容入门

BeautifulSoup是python html页面分析和xml页面分析的一个很好的工具!

最新版可以在这里下载到:http://www.crummy.com/software/BeautifulSoup/  不过好像不支持python3.0以上的版本,最新的支持到python2.7.2。

 

OK废话不说,直接进入主题:

 

BeautifulSoup安装:

      下载好BeautifulSoup后(一般是压缩包),解压压缩包,进入解压后的文件夹,里面会有个setup.py文件,然后敲以下命令:

      Linux下:

        #python setup.py  install

     windows下要配置好python环境变量,也就是把pyhton的安装目录写到path里,然后再命令行下敲命令:

        path of your BeautifulSoup folder>python setup.py install

安装完成后,可以在python的安装目录下的 Lib/site-packages下看到几个BeautifulSoup开头的文件。

我们也可以通过python命令行敲以下代码确认是否安装成功:

       >>> from BeautifulSoup import BeautifulSoup

如果没有出错提示,说明安装成功!

 

测试程序:

      OK,安装好BeautifulSoup后,可以写个测试程序试试:

      我是在命令行模式下敲代码的:

.

>>> from BeautifulSoup import BeautifulSoup

>>> import urllib

>>> html = urllib.urlopen(r'http://www.cnbeta.com/articles/165636.htm')

>>> text = html.read()

>>> soup = BeautifulSoup(text)

>>> content_html = soup.find('div',{"id":"news_content"})

>>> content_html


输出结果:

    <div id="news_content"><a href="/topics/138.htm"><img src="http://img.cnbeta.com/topics/communication.png" alt="通信技术" name="sign" align="right" id="sign" οnlοad="fixPNG(this)" /></a>

<p><b>感谢<a href="http://www.dzmeishi.com" target="_blank">大众美食网</a>的投递</b><br />

 

新闻来源:北京晚报<br />

<span style="font-weight:bold;">从每月不到10元可以无限浏览国内网站,到如今限定流量上网。清华大学近日启动的计费上网方式引发学生争议。学生认为新的计费方式增加了做科研的成本。</span>记者了解到,清华…………

抓取成功!

代码解析:

       1,2行代码导入需要用到的模块,我这里是直接抓取网络上的页面,因此要用到urllib这个模块。

       3,4行代码,读取指定url文件。我这里读取的是CNBeta的一条新闻:http://www.cnbeta.com/articles/165636.htm'读取其中的内容部分(id为news_content的div,这个需要打开网页的源码分析)。BeautifulSoup的find()方法用于查找符合条件的内容,只返回第一次找到的内容,这里的条件是 div 标签,id为news_content,条件也可以用正则表达式表示。除了find()方法外,还有findAll()方法,findAll()返回的是页面中全部符合条件的内容。

        第5行输出结果。

去掉多余的标签:

        我们看到,输出中有很多标签是我们不想要的,我们其实只想要正文的内容,也就是news_content这个div中几个p便签里的内容。OK,我们再限制下条件。

      >>>content_html.findAll('p')

我们可以看到输出结果正是我们想要的:

[<p><b>感谢<a href="http://www.dzmeishi.com" target="_blank">大众美食网</a>的投递</b><br />

新闻来源:北京晚报<br />

<span style="font-weight:bold;">从每月不到10元可以无限浏览国内网站,到如今限定流量上网。清华大学近日启动的计费上网方式引发学生争议。学生认为新的计费方式增加了做科研的成本。</span>记者了解到,清华大学是我国最早接入国际互联网的高校之一。调整前,清华对本科学生上网执行的资费标准是包月不限访问国内网站流量,每月6.5元,访问国外网站另行计费。</p>, <p>12月6日,清华校园网公布《关于校园网资费标准的公告》,今后在校生上网流量在20G以下免费;流量超过20G,按超出比例收费1至5元不等。新计费方式已于本月12日开始试行,并将于明年1月1日正式执行。<br />

<br />

  “这么收费,一个月动辄就要掏上百元。”清华一位“资深网虫”学生说。一些学生表示,“不同专业,甚至在学习的不同阶段,对网络流量的需求是不一样的。”一位计算机专业本科生说,他们有时需要下载一些测试软件,很花费流量,“学校不该增加科研的成本。”<br />

<br />

  记者了解到,目前北京大学和北京外国语大学采取包月上网,学生每月分别交10元和30元,不限流量访问国内网站;中央民族大学采取计时收费,每小时0.3元。</p>]

小结:

       BeautifulSoup使用起来非常方便,支持css条件抓取(要抓取有class属性的标签时,只能用css条件,因为class是python的保留字)。BeautifulSoup更多方法的使用请看手册:

http://www.crummy.com/software/BeautifulSoup/documentation.zh.html(中文)

http://www.crummy.com/software/BeautifulSoup/documentation.html(英文)

;