文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>BeautifulSoup笔记整理[归档]

BeautifulSoup笔记整理[归档]

时间:2010-06-22  来源:hkebao

BeautifulSoup笔记整理[归档]

时间:2010-6-22

整理一下这个开源框架。依据示例与自己的理解整理。

1.       代码片段

from BeautifulSoup import BeautifulSoup

doc = ['<html><head><title>PythonClub.org</title></head>',

       '<body><p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.',

       '<p id="secondpara" align="blah">This is paragraph <b>two</b> of pythonclub.org.',

       '</html>']

soup = BeautifulSoup(''.join(doc))

#依据HTML标签查找

print soup.html.head.title

心得:

1.     依据 . 号可以利用DOM树把元素提取出来。这里面的soup.html.head.title 能够得到一个标签<title> PythonClub.org</title> 这个HTML标签。

2.        元素的string属性值是获取当前HTML标签体内的元素字符串。如:

print soup.html.head.title.string    返回的是PythonClub.org。

 

2. 代码片段:

import re

from BeautifulSoup import BeautifulSoup

doc = ['<html><head><title>PythonClub.org</title></head>',

       '<body><p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.',

       '<p id="secondpara" align="blah">This is paragraph <b>two</b> of pythonclub.org.',

       '</html>']

soup = BeautifulSoup(''.join(doc))

#依据HTML标签查找

print soup.findAll(text=re.compile("para"))

说明一点:这里面我们用的findAll。这个方法是非常有用的。在我们对一个HTML页面进行搜索元素定位的时候就显得非常有用了。它能够依据元素标签的特性或元素内的内容特性定位要查找的内容。

像这个就表示说标签内的元素内容包括了para的。

返回:[u'This is paragraph ', u'This is paragraph ']

PS:记得在上一个项目中我们经常会用到这个东西。主要是在寻找元素标签的时候准确定位

示例:#依据HTML标签查找

print soup.findAll('p',id="firstpara")

这个表示的是什么呢?表示的是<p id=”firstpara” >这个标签(包含了这个标签)的全部内容。

打印:[<p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.</p>]

含有p标签在内的全部的标签在内。

问题:如果我想获取此标签体内的进一步标签的话要如何处理?

 

例如:

1.   我想获取当前的id值的话可以这样写

print soup.findAll('p',id="firstpara")[0]['id']

2. 我用print soup.findAll('p',id="firstpara")

能够返回[<p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.</p>]

那如果我想获取<b>one</b>里面的one怎么办呢?

print soup.findAll('p',id="firstpara")[0].b.string

打印:one

 

PS:[0] 表示返回的一个序列值,我们只提取第一个。然后再使用HTML的方式进行提取。然后HTML里面的string表示的是元素值。

 

3. 如果print soup.findAll('p',id="firstpara")

[<p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.</p>]

如果我想打印This is paragraph 要怎么办?

print soup.findAll('p',id="firstpara")[0].contents[0]

说明:这里面这个contents非常有用。我个人感觉 这个东西是什么呢?这个东西其实是表示在一段标签体内,元素与标签这样的一个划分。如

This is paragraph <b>one</b> of ptyhonclub.org.

 

print soup.findAll('p',id="firstpara")[0].contents[0]

: This is paragraph

 

print soup.findAll('p',id="firstpara")[0].contents[1]

: <b>one</b>

 

以下两个表达式效果是一样的

print soup.findAll('p',id="firstpara")[0].contents[1].string

print soup.findAll('p',id="firstpara")[0].b.string

 

 

print soup.findAll('p',id="firstpara")[0].b.a["href"]

能够准确定位到标签的属性。有了这些属性就能够查找到这个属性值。

 

 

 

 

 

 

 

 

介绍一下它的编码流程

BeautifulSoup按下面的顺序检测编码:

  1. 创建Soup对象时传递的 fromEncoding 参数;(默认我们是UTF8)
  2. XML/HTML文件自己定义的编码;
  3. 文件开始几个字节所表示的编码特征,此时能判断的编码只可能是以下编码之一:UTF-*,EBCDIC,和ASCII。
  4. 如果你安装了chardetBeautifulSoup会用chardet检测文件编码。
  5. UTF-8
  6. Windows-1252

 

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载