python-67:BS4简单浏览数据的方法

jopen 9年前

对于我们这个实例来说,首先第一步应该是将网页源码下载下来,这个工作我们已经熟悉得不能再熟悉了,这里就直接贴上代码

import urllib2    url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#'  # 这里可以不添加headers,所以没有写对headers的操作  request = urllib2.Request(url)  response = urllib2.urlopen(request)  contents = response.read()  print contents

下载源码完成之后,我们就应该使用BS4来处理源码获取我们想要的信息,在处理之前,千万不要忘了引入BS4模块,创建 BeautifulSoup 对象的实例,这是一切其他操作能够进行下去的前提,这当然也很简单

import urllib2  # 引入模块  from bs4 import BeautifulSoup    url = 'http://beautifulsoup.readthedocs.org/zh_CN/latest/#'  request = urllib2.Request(url)  response = urllib2.urlopen(request)  contents = response.read()  # 构造 BeautifulSoup 的实例  soup = BeautifulSoup(contents)

好了,所有的工作都做完之后,我们再来考虑一个问题,怎么输出soup处理的结果?前面的代码只是下载源码,创建soup实例,我们并没有将任何结果输出,所以运行上面的代码是不会返回任何结果的,那么,第一个问题:我想看看整个soup对象是什么样的,所以我要将整个结果输出出来,该怎么输出呢?

首先打开BS4的文档,目录里面有个输出的章节,这里会不会有呢?点进去之后的第一句话是这样的:

prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行

markup = '<a href="http://example.com/">I linked to <i>example.com</i></a>'  soup = BeautifulSoup(markup)  soup.prettify()  print(soup.prettify())


这个 prettify() 好像可以输出soup实例的内容,而且好像使用方法还很简单,我们把这两行代码加入程序中试试看吧

soup.prettify()  print(soup.prettify())

输出结果如下

python-67:BS4简单浏览数据的方法 - 217小月月坑的个人空间

好了,我们已经将整个soup的结果输出出来了,这看起来跟网页的源码好像没什么区别,那么,现在来考虑下一个问题,每一篇文档都会有标题,我们下载这个文档之后也会将文档以它的标题来命名并保存到文件中,那么,现在要做的事情就是怎么将文档的标题提取出来,我们再来找找文档

操作文档树最简单的方法就是告诉它你想获取的tag的name.如果想获取 <head> 标签,只要用 soup.head :

soup.head  # <head><title>The Dormouse's story</title></head>  soup.title  # <title>The Dormouse's story</title>


好的,我们将这个代码加入程序中并将结果print出来,结果是这样的

<title>Beautiful Soup 4.2.0 文档 — Beautiful Soup 4.2.0 中文 文档</title>

我们发现,这里将整个title标签的内容都输出出来了,说明soup.<tag> 的形式是获取整个标签并返回,那么我们怎么获取标签里面的内容呢?别急文档会告诉你

字符串常被包含在tag内.Beautiful Soup用 NavigableString 类来包装tag中的字符串:

tag.string  # u'Extremely bold'


按照上面例子的描述,如果我们想要将标签里面的字符串提取出来,那么我们就需要这样写:

soup.title.string

好了结果OK

在这里我想说一个概念:tag,我们在使用BS4搜索时,文档中一直使用tag这个名词,它到底是什么呢?

其实,这个tag就是html的标签,也就是我们经常看到的<p>...</p>,<a>...</a>这些,当然,html的标签还有很多,详细的内容可以参考:http://www.divcss5.com/html/h323.shtml

来自: http://my.oschina.net/u/2429887/blog/593620