beautifulsoup 简介

来源:互联网 发布:linux系统排行榜 2017 编辑:程序博客网 时间:2024/05/21 14:09

beautifulsoup 有下列3个对象

  • BeautifulSoup
  • Tag
  • NavigableString

Beautifulsoup对象的创建

创建一个BeautifulSoup对象是任何Beatutiful Soup工程的第一步。
BeatutifulSoup对象的创建可以通过一个字符串或一个类文件对象(可以是一个储存在本地的文件句柄或一个web网页句柄)

1.用字符串创建BeautifulSoup对象

向构造器中传递一个字符串创建对象,如:

helloworld = "<p>Hello World</p>"  soup_string = BeautifulSoup(helloworld)  

上述创建对象被当做HTML文档处理,可以使用print(soup_string)打印,输出为:

hello world

(PS:输出结果与系统有关,有可能为

Helloworld

)在创建对象过程中,输入被所支持的语法解析器转换为一个树结构体。所以,输入会被当做不同的BeautifulSoup对象(如BeautifulSoup,Tag,NavigableString).### 2.用类文件对象创建BeautifulSoup对象类文件对象在解析在线网页时非常有用,是BeautifulSoup中最常见的对象。比如我们要得到一个图书销售网站所有图书列表,此网页为http://www.packtpub.com/books。为了减少过于的访问比如使用字符串来获得网页内容,我们可以使用关于URL的类文件对象来创建BeautifulSoup对象。如:
import urllib2  from bs4 import BeautifulSoup  url = "http://www.packtpub.com/books"  page = urllib2.urlopen(url)  soup_packtpage = BeautifulSoup(page)  

urllib2.urlopen()方法由输入的URL返回一个类文件对象,然后以此创建BeautifulSoup对象。

相似的,我们可以为本地文件创建一个文件对象用于构造BeautifulSoup。比如在本地文件Soup中有个foo.html文件,创建BeautifulSoup对象方式如下:

with open("foo.html","r") as foo_file:  soup_foo = BeautifulSoup(foo_file)  

BeautifulSoup会有警告如果我们创建对象时传递的是文件名而不是文件对象时,比如:
soup_foo = BeautifulSoup(“foo.html”)

警告如下:
UserWarning: “foo.html” looks like a filename, not markup. You
should probably open this file and pass the filehandle into
Beautiful Soup.

但是Beautiful仍然会将”foo.html”当做字符串处理。
同样的如果我们传递一个URL代替URL文件对象的话,也会被当做字符串处理。

3.用XML解析器创建BeautifulSoup对象

当创建一个BeautifulSoup对象时,TreeBuliders类被用于创建HTML/XML树,默认的是使用HTML TreeBuliders对象,使用HTML解析器。如果我们想把输入当做XML做解析,我们必须明确的使用features参数在BeatufulSoup对象构造器中进行说明。指定features参数,我们能够选择最合适的TreeBuliders来满足我们的需求。

soup_xml = BeautifulSoup(helloworld,"xml")  

建议创建BeautifulSoup对象的时候就指定解析器。因为不同的解析器解析的内容不同。在我们给出一个无效的HTML文档内容时更是如此。

Tag对象

Tag对象代表了HTML和XML文档中不同的标签。当解析这些文档时Tag对象被创建。此对象拥有HTML/XML文档标签的属性和内容,此对象可以用户搜索和定位HTML/XML文档内容。

从Beautifulsoup中获得Tag对象

我们可以与任何标签打交道。比如我们获得一下例子中的第一个标签通过简单的调用标签。

html_atag = """<html><body><p>Test html a tag example</p> <a href="http://www.packtpub.com'>Home</a> <a href="http;//www.packtpub.com/books'>Books</a> </body> </html>"""  soup = BeautifulSoup(html_atag,'lxml')  atag = soup.a  print(atag)  

tag对象的名字

Tag对象的名字通过.name访问

tagname = atag.name  print tagname  

Tag对象的属性

属性给予标签意义和内容。比如标签有类别,ID号和风格。tag的属性可以把Tag对象当作字典来获取。

atag = soup_atag.a  print (atag['href'] )  

output

http://www.packtpub.com

标签的不同属性都可以通过.attrs来访问。

print(atag.attrs) 将会得到 {‘href’:’ http://www.packtpub.com‘}

NavigableString对象包含HTML或XML标签中的文字内容。这是一个Python Unicode字符串,用来寻找或导航定位。有时我们会基于当前文本内容定位其他标签或其他文本内容。
获得一个标签储存的文本内容可以通过使用.string访问

first_a_string = soup_atag.string

上诉就创建了一个NavigableString对象,里面是第一个标签中的字符串u’Home’。

0 0
原创粉丝点击