Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26312645
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2010-06-22 23:32:41

BeautifulSoup笔记整理[归档]

时间:2010-6-22

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

1.       代码片段

from BeautifulSoup import BeautifulSoup

doc = ['PythonClub.org',

       '

This is paragraph one of ptyhonclub.org.',

       '

This is paragraph two of pythonclub.org.',

       '']

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

#依据HTML标签查找

print soup.html.head.title

心得:

1.     依据 . 号可以利用DOM树把元素提取出来。这里面的soup.html.head.title 能够得到一个标签</span><i><span style="font-size: 9pt; font-family: "Courier New"; color: rgb(0, 170, 0);" lang="EN-US"> PythonClub.org 这个HTML标签。

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

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

 

2. 代码片段:

import re

from BeautifulSoup import BeautifulSoup

doc = ['PythonClub.org',

       '

This is paragraph one of ptyhonclub.org.',

       '

This is paragraph two of pythonclub.org.',

       '']

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")

这个表示的是什么呢?表示的是

这个标签(包含了这个标签)的全部内容。

打印:[

This is paragraph one of ptyhonclub.org.

]

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

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

 

例如:

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

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

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

能够返回[

This is paragraph one of ptyhonclub.org.

]

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

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

打印:one

 

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

 

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

[

This is paragraph one of ptyhonclub.org.

]

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

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

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

This is paragraph one of ptyhonclub.org.

 

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

: This is paragraph

 

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

: one

 

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

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"]

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

 

 

 

 

 

 

 

 

介绍一下它的编码流程

按下面的顺序检测编码:

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

 

阅读(932) | 评论(2) | 转发(0) |
0

上一篇:NginxHttpFcgiModule

下一篇:python模块之uuid

给主人留下些什么吧!~~

chinaunix网友2010-06-22 23:54:56

1.如果帖子里面有图片如何处理?http://laiba.tianya.cn/laiba/CommMsgs?cmm=12268&tid=2710205517210103205&ref=commmsgs-paging&na=1&nst=1&pno=1 2.相关帖子如何处理? 3.下面某个楼层的用户引用上面楼层的内容如何引用? 4. 分页帖子如何处理?

chinaunix网友2010-06-22 23:39:10

还要注意一点 是否需要把那些标签去掉。如果贴吧里面的字段内容是否需要把HTML标签过滤去掉。