- 浏览: 3422683 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://www.pythonclub.org/modules/beautifulsoup/start
使用yumex安装
官方文档:http://www.crummy.com/software/BeautifulSoup/bs4/doc/,version=4
中文文档:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html
用python的BeautifulSoup分析html http://www.cnblogs.com/twinsclover/archive/2012/04/26/2471704.html
BeautifulSoup使用概要 http://blog.csdn.net/wangchongxiu/article/details/8901246
用BeautifulSoup查找属性值未知的标签 http://www.crifan.com/python_use_beautifulsoup_find_tag_with_unknown_attribute_value/
Python正则表达式操作指南 http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
运用BeautifulSoup抓取网页的链接 http://www.cnblogs.com/winterIce/archive/2011/10/06/2200002.html
Beautiful Soup 中文教程
创建 BeautifulSoup 对象
BeautifulSoup对象需要一段html文本就可以创建了。
下面的代码就创建了一个BeautifulSoup对象:
查找HTML内指定元素
BeautifulSoup可以直接用”.”访问指定HTML元素
根据html标签(tag)查找:查找html title
可以用 soup.html.head.title 得到title的name,和字符串值。
也可以直接通过soup.title直接定位到指定HTML元素:
根据html内容查找:查找包含特定字符串的整个标签内容
下面的例子给出了查找含有”para”的html tag内容:
根据CSS属性查找HTML内容
BeautifulSoup使用概要
在程序中中导入 Beautiful Soup库:
导航soup的一些方法:
搜索soup
有些标签可以内嵌 (<BLOCKQUOTE>) ,有些不行 (<P>).
table和list标签有一个自然的内嵌顺序。例如,<TD> 标签内为 <TR> 标签,而不会相反。
<SCRIPT> 标签的内容不会被剖析为HTML。
<META> 标签可以知道文档的编码类型。
BeautifulSoup 会智能判断那些需要添加关闭标签的位置,即使原始的文档没有。
soup.originalEncoding:获得解析之前的编码
默认的编码(str使用的)是UTF-8。
剖析对象包括2个其他类型的对象,Tag对象, 用于操纵像<TITLE> ,<B>这样的标签;
NavigableString对象, 用于操纵字符串,如"Page title"和"This is paragraph"。
nextSibling和previousSibling
使用它们你可以跳往在剖析树中同等层次的下一个元素。
next和previous
使用它们可以按照soup处理文档的次序遍历整个文档,而不是它们在剖析树中看到那种次序。
一个Tag的有多少child可以直接使用len(tag)而不必使用len(tag.contents)来获得。
这里的两个方法(findAll和 find)仅对Tag对象以及 顶层剖析对象有效,但 NavigableString不可用。
findAll(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
参数name 匹配tags的名字,获得相应的结果集。
1 最简单用法是仅仅给定一个tag name值。下面的代码寻找文档中所有的 <B> Tag:
soup.findAll('b')
2 你可以传一个正则表达式。下面的代码寻找所有以b开头的标签:
tagsStartingWithB = soup.findAll(re.compile('^b'))
3 你可以传一个list或dictionary。下面两个调用是查找所有的<TITLE>和<P>标签。 他们获得结果一样,但是后一种方法更快一些:
soup.findAll(['title', 'p'])
soup.findAll({'title' : True, 'p' : True})
4 你可以传一个True值,这样可以匹配每个tag的name:也就是匹配每个tag。
allTags = soup.findAll(True)
5 你可以传callable对象,就是一个使用Tag对象作为它唯一的参数,并返回布尔值的对象。 findAll使用的每个作为参数的Tag对象都会传递给这个callable对象, 并且如果调用返回True,则这个tag便是匹配的。
下面是查找两个并仅两个属性的标签(tags):
soup.findAll(lambda tag: len(tag.attrs) == 2)
下面是寻找单个字符为标签名并且没有属性的标签:
soup.findAll(lambda tag: len(tag.name) == 1 and not tag.attrs)
keyword参数用于筛选tag的属性。下面这个例子是查找拥有属性align且值为center的 所有标签:
attrs是一个字典,用起来就和keyword参数一样:
你可以使用attrs去匹配那些名字为Python保留字的属性, 例如class, for, 以及import; 或者那些不是keyword参数但是名字为Beautiful Soup搜索方法使用的参数名的属性, 例如name, recursive, limit, text, 以及attrs本身。
text 是一个用于搜索NavigableString对象的参数。 它的值可以是字符串,一个正则表达式, 一个list或dictionary,True或None, 一个以NavigableString为参数的可调用对象:如果你使用text,任何指定给name 以及keyword参数的值都会被忽略。
recursive 是一个布尔参数(默认为True),用于指定Beautiful Soup遍历整个剖析树, 还是只查找当前的子标签或者剖析对象。
[tag.name for tag in soup.html.findAll()]
[tag.name for tag in soup.html.findAll(recursive=False)]
设置limit 参数可以让Beautiful Soup 在找到特定个数的匹配时停止搜索。
find(name, attrs, recursive, text, **kwargs):只返回一个结果。
NavigableString没有contents:它们是剖析树的叶子。
findNextSiblings(name, attrs, text, limit, **kwargs) and findNextSibling(name, attrs, text, **kwargs)
这两个方法以nextSibling的成员为依据, 获得满足条件的Tag或NavigableText对象。
findPreviousSiblings(name, attrs, text, limit, **kwargs) and findPreviousSibling(name, attrs, text, **kwargs)
这两个方法以previousSibling成员为依据,获得满足条件的Tag和 NavigableText对象。
findAllNext(name, attrs, text, limit, **kwargs) and findNext(name, attrs, text, **kwargs)
这两个方法以next的成员为依据, 获得满足条件的Tag和NavigableText对象。
findAllPrevious(name, attrs, text, limit, **kwargs) and findPrevious(name, attrs, text, **kwargs)
这两方法以previous的成员依据, 获得满足条件的Tag和NavigableText对象。
findParents(name, attrs, limit, **kwargs) and findParent(name, attrs, **kwargs)
这两个方法以parent成员为依据, 获得满足条件的Tag和NavigableText对象。 他们没有text参数,因为这里的对象的parent不会有NavigableString。
使用yumex安装
官方文档:http://www.crummy.com/software/BeautifulSoup/bs4/doc/,version=4
中文文档:http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html
用python的BeautifulSoup分析html http://www.cnblogs.com/twinsclover/archive/2012/04/26/2471704.html
BeautifulSoup使用概要 http://blog.csdn.net/wangchongxiu/article/details/8901246
用BeautifulSoup查找属性值未知的标签 http://www.crifan.com/python_use_beautifulsoup_find_tag_with_unknown_attribute_value/
Python正则表达式操作指南 http://wiki.ubuntu.org.cn/Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%93%8D%E4%BD%9C%E6%8C%87%E5%8D%97
运用BeautifulSoup抓取网页的链接 http://www.cnblogs.com/winterIce/archive/2011/10/06/2200002.html
Beautiful Soup 中文教程
创建 BeautifulSoup 对象
BeautifulSoup对象需要一段html文本就可以创建了。
下面的代码就创建了一个BeautifulSoup对象:
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内指定元素
BeautifulSoup可以直接用”.”访问指定HTML元素
根据html标签(tag)查找:查找html title
可以用 soup.html.head.title 得到title的name,和字符串值。
>>> soup.html.head.title <title>PythonClub.org</title> >>> soup.html.head.title.name u'title' >>> soup.html.head.title.string u'PythonClub.org' >>>
也可以直接通过soup.title直接定位到指定HTML元素:
>>> soup.title <title>PythonClub.org</title> >>>
根据html内容查找:查找包含特定字符串的整个标签内容
下面的例子给出了查找含有”para”的html tag内容:
>>> soup.findAll(text=re.compile("para")) [u'This is paragraph ', u'This is paragraph '] >>> soup.findAll(text=re.compile("para"))[0].parent <p id="firstpara" align="center">This is paragraph <b>one</b> of ptyhonclub.org.</p> >>> soup.findAll(text=re.compile("para"))[0].parent.contents [u'This is paragraph ', <b>one</b>, u' of ptyhonclub.org.']
根据CSS属性查找HTML内容
soup.findAll(id=re.compile("para$")) # [<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>, # <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>] soup.findAll(attrs={'id' : re.compile("para$")}) # [<p id="firstpara" align="center">This is paragraph <b>one</b>.</p>, # <p id="secondpara" align="blah">This is paragraph <b>two</b>.</p>]
BeautifulSoup使用概要
在程序中中导入 Beautiful Soup库:
from BeautifulSoup import BeautifulSoup # For processing HTML from BeautifulSoup import BeautifulStoneSoup # For processing XML import BeautifulSoup # To get everything soup = BeautifulSoup(html, from_encoding='utf-8') smartQuotesTo=None 到soup构造器:这时 smart quotes会被正确的转换为Unicode。 print soup.prettify()
导航soup的一些方法:
soup.contents[0].name soup.contents[0].contents[0].name head = soup.contents[0].contents[0] head.parent.name head.next head.nextSibling.name head.nextSibling.contents[0] head.nextSibling.contents[0].nextSibling next为下一个标签,nextSibling为下一个兄弟标签。
搜索soup
.string soup.findAll('p', align="center") soup.find('p', align="center") soup('p', align="center")[0]['id'] soup.find('p', align=re.compile('^b.*'))['id'] soup.find('p').b.string soup('p')[1].b.string comment = commentSoup.find(text=re.compile("nice"))
有些标签可以内嵌 (<BLOCKQUOTE>) ,有些不行 (<P>).
table和list标签有一个自然的内嵌顺序。例如,<TD> 标签内为 <TR> 标签,而不会相反。
<SCRIPT> 标签的内容不会被剖析为HTML。
<META> 标签可以知道文档的编码类型。
BeautifulSoup 会智能判断那些需要添加关闭标签的位置,即使原始的文档没有。
soup.originalEncoding:获得解析之前的编码
默认的编码(str使用的)是UTF-8。
剖析对象包括2个其他类型的对象,Tag对象, 用于操纵像<TITLE> ,<B>这样的标签;
NavigableString对象, 用于操纵字符串,如"Page title"和"This is paragraph"。
nextSibling和previousSibling
使用它们你可以跳往在剖析树中同等层次的下一个元素。
next和previous
使用它们可以按照soup处理文档的次序遍历整个文档,而不是它们在剖析树中看到那种次序。
一个Tag的有多少child可以直接使用len(tag)而不必使用len(tag.contents)来获得。
这里的两个方法(findAll和 find)仅对Tag对象以及 顶层剖析对象有效,但 NavigableString不可用。
findAll(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
参数name 匹配tags的名字,获得相应的结果集。
1 最简单用法是仅仅给定一个tag name值。下面的代码寻找文档中所有的 <B> Tag:
soup.findAll('b')
2 你可以传一个正则表达式。下面的代码寻找所有以b开头的标签:
tagsStartingWithB = soup.findAll(re.compile('^b'))
3 你可以传一个list或dictionary。下面两个调用是查找所有的<TITLE>和<P>标签。 他们获得结果一样,但是后一种方法更快一些:
soup.findAll(['title', 'p'])
soup.findAll({'title' : True, 'p' : True})
4 你可以传一个True值,这样可以匹配每个tag的name:也就是匹配每个tag。
allTags = soup.findAll(True)
5 你可以传callable对象,就是一个使用Tag对象作为它唯一的参数,并返回布尔值的对象。 findAll使用的每个作为参数的Tag对象都会传递给这个callable对象, 并且如果调用返回True,则这个tag便是匹配的。
下面是查找两个并仅两个属性的标签(tags):
soup.findAll(lambda tag: len(tag.attrs) == 2)
下面是寻找单个字符为标签名并且没有属性的标签:
soup.findAll(lambda tag: len(tag.name) == 1 and not tag.attrs)
keyword参数用于筛选tag的属性。下面这个例子是查找拥有属性align且值为center的 所有标签:
soup.findAll(align="center") soup.findAll(id=re.compile("para$")) soup.findAll(align=["center", "blah"]) soup.findAll(align=lambda(value): value and len(value) < 5)
attrs是一个字典,用起来就和keyword参数一样:
soup.findAll(attrs={'id' : re.compile("para$")})
你可以使用attrs去匹配那些名字为Python保留字的属性, 例如class, for, 以及import; 或者那些不是keyword参数但是名字为Beautiful Soup搜索方法使用的参数名的属性, 例如name, recursive, limit, text, 以及attrs本身。
text 是一个用于搜索NavigableString对象的参数。 它的值可以是字符串,一个正则表达式, 一个list或dictionary,True或None, 一个以NavigableString为参数的可调用对象:如果你使用text,任何指定给name 以及keyword参数的值都会被忽略。
soup.findAll(text="one") soup.findAll(text=u'one') soup.findAll(text=["one", "two"]) soup.findAll(text=re.compile("paragraph")) soup.findAll(text=True) soup.findAll(text=lambda(x): len(x) < 12)
recursive 是一个布尔参数(默认为True),用于指定Beautiful Soup遍历整个剖析树, 还是只查找当前的子标签或者剖析对象。
[tag.name for tag in soup.html.findAll()]
[tag.name for tag in soup.html.findAll(recursive=False)]
设置limit 参数可以让Beautiful Soup 在找到特定个数的匹配时停止搜索。
soup.findAll('p', limit=1) soup.findAll('p', limit=100)
find(name, attrs, recursive, text, **kwargs):只返回一个结果。
NavigableString没有contents:它们是剖析树的叶子。
s = soup.h1 while getattr(s, 'name', None) != 'ul': s = s.nextSibling s.li soup.h1.findNextSibling('ul').li soup.find(text='Heading').findNext('ul').li
findNextSiblings(name, attrs, text, limit, **kwargs) and findNextSibling(name, attrs, text, **kwargs)
这两个方法以nextSibling的成员为依据, 获得满足条件的Tag或NavigableText对象。
findPreviousSiblings(name, attrs, text, limit, **kwargs) and findPreviousSibling(name, attrs, text, **kwargs)
这两个方法以previousSibling成员为依据,获得满足条件的Tag和 NavigableText对象。
findAllNext(name, attrs, text, limit, **kwargs) and findNext(name, attrs, text, **kwargs)
这两个方法以next的成员为依据, 获得满足条件的Tag和NavigableText对象。
findAllPrevious(name, attrs, text, limit, **kwargs) and findPrevious(name, attrs, text, **kwargs)
这两方法以previous的成员依据, 获得满足条件的Tag和NavigableText对象。
findParents(name, attrs, limit, **kwargs) and findParent(name, attrs, **kwargs)
这两个方法以parent成员为依据, 获得满足条件的Tag和NavigableText对象。 他们没有text参数,因为这里的对象的parent不会有NavigableString。
bTag = soup.find('b') [tag.name for tag in bTag.findParents()] bTag.findParent('body').name
发表评论
-
Htmlunit使用
2015-04-11 20:12 1096http://my.oschina.net/u/852445/ ... -
垂直爬虫 webmagic
2014-09-05 20:24 3032新版文档地址 http://webmagic.io/docs/ ... -
python Tkinter的一些记录
2013-10-14 11:06 17871. Label里面的文本对齐方式:http://www.hi ... -
Python中执行外部命令并捕获双向输出
2013-10-12 15:08 2428原文:http://my.oschina.net/qihh/b ... -
python: 界面开发Tkinter
2013-10-10 16:38 1676python GUI开发 工具选择 http://blog.c ... -
Python多线程学习
2013-10-08 09:39 1443http://www.cnblogs.com/tqsummer ... -
问题: Max retries exceeded with url
2013-10-07 11:36 29383解决一: http://stackoverflow.com/q ... -
python + request + lxml的几个例子
2013-10-06 22:09 4474例子没有加入失败后重做的功能,这个也可以考虑增加。 第三个例子 ... -
python对文件的创建等处理
2013-10-06 21:24 1171http://www.qttc.net/201209207.h ... -
python: json,base64 的使用
2013-10-06 19:12 2980JSON 1. import json 2. json.dum ... -
python requests 下载图片和数据库读取
2013-10-02 15:56 18553python requests 下载图片 de ... -
python类型转换
2013-10-01 14:12 1065http://jayzotion.iteye.com/blog ... -
python字符串编码判断
2013-09-30 14:13 2218Python 字符编码判断 http://blog.sina. ... -
Python:数组、列表(list)、字典(dict)、字符串(string)常用基本操作小结
2013-09-30 13:07 13706连接 list 与分割字符串h ... -
Python模块学习 ---- datetime
2013-09-30 09:39 2206[Python Tip]如何计算时间 ... -
python html parser库lxml的介绍和使用
2013-09-30 09:39 7405使用由 Python 编写的 lxml 实现高性能 XML 解 ... -
用Python操作Mysql和中文问题
2013-09-29 13:55 2639http://www.iteye.com/topic/5730 ... -
Python 字符串操作(截取/替换/查找/分割)
2013-09-29 13:01 6223python字符串连接 先介绍下效率比较低的,有些新手朋友就会 ... -
Python中使用中文
2013-09-29 10:25 1148http://blog.csdn.net/kernelspir ... -
python + request + pyquery[安装失败]
2013-09-28 20:51 2184比urllib好用的requests http://www.b ...
相关推荐
Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档 Beautiful Soup 4.4.0 文档
**Python使用Beautiful Soup爬虫教程** Beautiful Soup是一个强大的Python库,专门用于从HTML和XML文档中提取数据。它提供了一种简单易用的接口,帮助开发者解析和导航复杂的网页结构。在本教程中,我们将深入探讨...
**Beautiful Soup中文教程** Beautiful Soup的中文教程可以帮助中文用户更好地理解和使用这个库。文档可能涵盖基础概念、高级技巧、常见问题以及示例代码。通过阅读这个文档(如Beautiful Soup documentation.mht)...
Python 爬虫入门教程之 Beautiful Soup 解析 本教程主要讲解 Python 爬虫入门知识,通过 Beautiful Soup 解析网页,抓取中国旅游网首页信息,了解网页结构,使用 requests 库抓取网站数据,并进行数据清洗和组织。 ...
Beautiful Soup 4.2.0 中文文档 mobi Beautiful Soup 4.2.0 中文文档 mobi
- 示例: `soup.select('.title')` 查找所有 class 为 title 的标签。 #### 7. 修改文档树 - **方法**: - 修改 Tag 名称和属性: `tag.name = 'new_name'`, `tag['class'] = 'new_class'` - 修改字符串: `tag....
内容概要: Beautiful Soup是Python中的一个强大...Beautiful Soup有很多优点,如能够按照标签、属性、字符串等方式检索文档,可以修改文档的编码、属性等,在Python爬虫开发中,Beautiful Soup是非常重要的工具之一。
Beautiful Soup不仅能够处理不规则或损坏的标记,还能够通过不同的解析器将标记转化为BeautifulSoup对象。 Beautiful Soup库能够兼容多种HTML和XML解析器,包括Python标准库中的`html.parser`,以及第三方库如`lxml...
1. **安装Beautiful Soup**:在Python环境中,通常通过pip来安装这个库,命令为`pip install beautifulsoup4`。同时,由于Beautiful Soup通常与另一个库如`lxml`或`html.parser`一起使用,因此还需要安装对应的解析...
### Beautiful Soup 入门 #### 一、概述 《Getting Started with Beautiful Soup》是一本由Vineeth G. Nair撰写的关于Python网页抓取工具Beautiful Soup的书籍。本书主要面向那些希望学习如何构建自己的网页抓取器...
print(soup.prettify()) ``` 5. **信息的标记形式** - **XML**:扩展标记语言,用于结构化数据,支持注释。 - **JSON**:JavaScript对象表示法,类似于Python的字典,没有注释。 - **YAML**:一种轻量级的数据...
本教程将深入探讨如何利用Beautiful Soup进行高效且精准的网络爬虫开发。 首先,让我们了解什么是Beautiful Soup。Beautiful Soup是由Leonard Richardson编写的Python库,它提供了一种简单的方式来导航、搜索和修改...
【Python网络爬虫与Beautiful Soup库入门】 网络爬虫是一种自动化获取互联网信息的程序,它通过模拟人类浏览器的行为,从网站上抓取所需的数据。在Python中,Beautiful Soup库是用于解析HTML和XML文档的强大工具,...
本教程将详细介绍如何利用Python的Requests库和BeautifulSoup库来爬取豆瓣电影Top250的数据,以便进行数据分析或者建立自己的电影推荐系统。 首先,我们需要了解Requests库。Requests是一个用Python编写的HTTP...
BeautifulSoup是一个在Python编程语言中广泛使用的HTML和XML的解析库,它是Leonard Richardson用Python编写的。...它特别擅长处理那些结构不规范的标记,这对于从网页中提取信息尤其重要。 BeautifulSoup的主要特点...
Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup 会帮你节省数小时甚至数天的工作时间
在Python2.x版本中,Beautiful Soup 4(BS4)是常用的选择,尽管现在Python3已经成为主流,但BS4仍然能够很好地支持Python2.x。以下是对Beautiful Soup库的详细介绍: 1. **Beautiful Soup简介** - Beautiful Soup...
### Beautiful Soup 中文文档知识点详解 #### 一、概述 Beautiful Soup 是一款强大的 Python 库,主要用于解析 HTML 和 XML 文件。它可以有效地处理不规范的标签结构,并生成易于操作的解析树(parse tree)。通过...