- 浏览: 241769 次
文章分类
最新评论
BeautifulSoup 安装及其使用
BeautifulSoup 是个好东东。
官网见这里: http://www.crummy.com/software/BeautifulSoup/
下载地址见这里:http://www.crummy.com/software/BeautifulSoup/bs4/download/4.1/ ,附件有4.1.2的安装源码
文档见这里: http://www.crummy.com/software/BeautifulSoup/bs3/documentation.zh.html ,是中文翻译的,不过文档有点旧,是 3.0 的文档版本,看起来没有什么意思。
我推荐大家看个: http://www.crummy.com/software/BeautifulSoup/bs4/doc/ ,这个是 python 的官网英文版,看起来要舒服,清晰很多。
在 python 下,你想按照 jquery 格式来读取网页,免除网页格式、标签的不规范的困扰,那么 BeautifulSoup 是个不错的选择。按照官网所说, BeautifulSoup 是 Screen-Scraping 应用,旨在节省大家处理 HTML 标签,并且从网络中获得信息的工程。 BeautifulSoup 有这么几个优点,使得其功能尤其强大:
1 : Beautiful Soup provides a few simple methods and Pythonic idioms for navigating, searching, and modifying a parse tree: a toolkit for dissecting a document and extracting what you need. It doesn't take much code to write an application 。关键词: python 风格、提供简单方法
2 : Beautiful Soup automatically converts incoming documents to Unicode and outgoing documents to UTF-8. You don't have to think about encodings, unless the document doesn't specify an encoding and Beautiful Soup can't autodetect one. Then you just have to specify the original encoding 。关键词:编码转换,使用 Python 的同学都会认同 Python 编码格式的繁琐, BeautifulSoup 能简化这一点。
3 : Beautiful Soup sits on top of popular Python parsers like lxml and html5lib , allowing you to try out different parsing strategies or trade speed for flexibility 。关键词:兼容其它 html 解析器,能够让你随心替换。
看完这几个特性,想必有人心动了吧,我们先看下 BeautifulSoup 的安装:
安装方法:
1 : apt-get install python-bs4
2 : easy_install beautifulsoup4
3 : pip install beautifulsoup4
4 :源码安装: python setup.py install
根据不同的操作系统,选用不同的安装方法,这些方法都能安装成功,不同点在于安装的工具不同。我自己的系统采用的是第四种安装方法,下面我来简要介绍下第四种安装方法:
curl http://www.crummy.com/software/BeautifulSoup/bs4/download/4.1/beautifulsoup4-4.1.2.tar.gz >> beautifulsoup4-4.1.2.tar.gz tar zxvf beautifulsoup4-4.1.2.tar.gz cd beautifulsoup4-4.1.2 python setup.py install
Ok ,你就能看到安装信息,提示安装成功。
安装成功,肯定想迫不及待的使用,你打开 python command 窗口,你很 happy 的输入:
from beautifulsoup import beautifulsoup
sorry , ImportError ,为什么会有这个 import error ,我都安装好了的。打开官网,重新看下说明,原来安装的是 BeautifulSoup 4.1 版本,这个 import 是 3.x 的说法。重新打开 command ,输入:
from bs4 import BeautifulSoup
咦,没有输出提示。恭喜你, BeautifulSoup 包引入成功。
看文上篇博客, http://isilic.iteye.com/blog/1733560 ,想试下 dir 命令,看看 BeautifulSoup 提供了哪些方法:
dir(BeautifulSoup)
看到一堆的方法,有点头大,将方法列出来会方便看许多。
>>> for method in dir(BeautifulSoup): ... print method ...
请仔细看下其中的 findXxx , nextXxx , previousXxx 方法,这些方法提供了 html 页面的遍历、回溯、查找、匹配功能;这些功能已经能够提供获取页面信息的方法了。
我们以百度首页为例,试用下 BeautifulSoup 的强大功能。
>>> import urllib2 >>> page=urllib2.urlopen('http://www.baidu.com') >>> soup=BeautifulSoup(page) >>> print soup.title >>> soup.title.string
看到结果显示不错, helloworld 的教程让人心里真是舒服啊。
想进一步试用功能,我想找出百度首页上所有的链接,这个貌似很难,需要各种正则匹配,各种处理;等等,我们现在是在谈论这个 BeautifulSoup ,看看 BeautifulSoup 怎么实现这个功能。
>>> for lind in soup.find_all('a'): ... print lind['href'] ...
看到输出了吗?是不是很简单。
对于熟悉 Jquery 和 CSS 的同学,这种操作就是个折磨,需要不停的根据选择出来的结果进行遍历。看到上面的输出,看到有很多的 # 这些非正常的 URL ,现在想把这些 URL 全部过滤掉,使用 select 语法就很简单了。
>>> for link in soup.select('a[href^=http]'): ... print link['href']; ...
有人说我根据判断出来的 URL 做处理不行嘛,当然可以,我这里只是想试下 select 的语法,至于 select 中的语法定义,大家可以自行度之。准确的说,这个 select 语法都能重新开篇文章了。
再进一步,连接中的 / 或者 /duty 链接都是有含义的,是相对于本站的绝对地址,这些 / 开头的怎么不被过滤掉?如果是绝对地址的话,又该怎么防止被过滤掉? href 标签里面是个 javascript 又该怎么过滤?如果考虑 css 文件和 js 文件的话,怎么把这些文件的 url 也给找出来?还有更进一步的,怎么分析出 js 中 ajax 的请求地址?这些都是可以进一步扩展的一些要求。
好吧,我承认后面这些 URL 过滤已经超出了 BeautifulSoup 的能力范围了,但是单纯考虑功能的话,这些都是要考虑的内容,这些疑问大家考虑下实现原理就行,如果能做进一步的学习的话,算是本文额外的功劳了。
下面简单过下 BeautifulSoup 的用法:
DEFAULT_BUILDER_FEATURES FORMATTERS ROOT_TAG_NAME STRIP_ASCII_SPACES:BeautifulSoup的内置属性 __call__ __class__ __contains__ __delattr__ __delitem__ __dict__ __doc__ __eq__ __format__ __getattr__ __getattribute__ __getitem__ __hash__ __init__ __iter__ __len__ __module__ __ne__ __new__ __nonzero__ __reduce__ __reduce_ex__ __repr__ __setattr__ __setitem__ __sizeof__ __str__ __subclasshook__ __unicode__ __weakref__ _all_strings _attr_value_as_string _attribute_checker _feed _find_all _find_one _lastRecursiveChild _last_descendant _popToTag:BeautifulSoup的内置方法,关于这些方法使用需要了解Python更深些的内容。 append:修改element tree attribselect_re childGenerator children clear:清除标签内容 decode decode_contents decompose descendants encode encode_contents endData extract:这个方法很关键,后面有介绍 fetchNextSiblings下一兄弟元素 fetchParents:父元素集 fetchPrevious:前一元素 fetchPreviousSiblings:前一兄弟元素:这几个能够对当前元素的父级别元素和兄弟级别进行查找。 find:只找到limit为1的结果 findAll findAllNext findAllPrevious findChild findChildren:子集合 findNext:下一元素 findNextSibling:下一个兄弟 findNextSiblings:下一群兄弟 findParent:父元素 findParents:所有的父元素集合 findPrevious findPreviousSibling findPreviousSiblings:对当前元素和子元素进行遍历查找。 find_all_next find_all_previous find_next find_next_sibling find_next_siblings find_parent find_parents find_previous find_previous_sibling find_previous_siblings:这些下划线方法命名是bs4方法,推荐使用这类 format_string get getText get_text:得到文档标签内的内容,不包括标签和标签属性 handle_data handle_endtag handle_starttag has_attr has_key index insert insert_after insert_before:修改element tree isSelfClosing is_empty_element new_string new_tag next nextGenerator nextSibling nextSiblingGenerator next_elements next_siblings object_was_parsed parentGenerator parents parserClass popTag prettify:格式化HTML文档 previous previousGenerator previousSibling previousSiblingGenerator previous_elements previous_siblings pushTag recursiveChildGenerator renderContents replaceWith replaceWithChildren replace_with replace_with_children:修改element tree 元素内容 reset select:适用于jquery和css的语法选择。 setup string strings stripped_strings tag_name_re text unwrap wrap
需要注意的是,在BeautifulSoup中的方法有些有两种写法,有些是驼峰格式的写法,有些是下划线格式的写法,但是看其方法的含义是一样的,这主要是BeautifulSoup为了兼容3.x的写法。前者是3.x的写法,后者是4.x的写法,推荐使用后者,也就是下划线的方法。
根据这些方法,应该能够得到遍历、抽取、修改、规范化文档的一系列方法。大家如果能在工作中使用 BeautifulSoup ,一定会理解更深。
BeautifulSoup 支持不同的 parser ,默认是 Html 格式解析,还有 xml parser 、 lxml parser 、 html5lib parser 、 html.parser ,这些 parser 都需要响应的解析器支持。
html,这个是默认的解析器
BeautifulSoup("<a><b /></a>") # <html><head></head><body><a><b></b></a></body></html>
xml格式解析器
BeautifulSoup("<a><b /></a>", "xml") # <?xml version="1.0" encoding="utf-8"?> # <a><b /></a>
lxml格式解析器
BeautifulSoup("<a></p>", "lxml") # <html><body><a></a></body></html>
html5lib格式解析器
BeautifulSoup("<a></p>", "html5lib") # <html><head></head><body><a><p></p></a></body></html>
html.parser解析器
BeautifulSoup("<a></p>", "html.parser") # <a></a>
其中 parser 的区别大家看下这几个例子就知道了。
在使用 BeautifulSoup 解析文档的时候,会将整个文档以一颗大又密集的数据载入到内存中,如果你只是从数据结构中获得一个字符串,内存中保存一堆数据感觉就不划算了。并且如果你要获得指向某个 Tag 的内容,这个 Tag 又会指向其它的 Tag 对象,因此你需要保存这棵树的所有部分,也就是说整棵树都在内存中。 extract 方法可以破坏掉这些链接,它会将树的连接部分断开,如果你得到某个 Tag ,这个 Tag 的剩余部分会离开这棵树而被垃圾收集器捕获;当然,你也可以实现其它的功能:如文档中的某一块你本身就不关心,你可以直接把它 extract 出树结构,扔给垃圾收集器,优化内存使用的同时还能完成自己的功能。
正如 BeautifulSoup 的作者 Leonard 所说,写 BeautifulSoup 是为了帮助别人节省时间,减小工作量。一旦习惯使用上 BeautifulSoup 后,一些站点的内容很快就能搞定。这个就是开源的精神,将工作尽可能的自动化,减小工作量;从某个程度上来说,程序员应该是比较懒惰的,但是这种懒惰正好又促进了软件行业的进步。
- beautifulsoup4-4.1.2.tar.gz (127.8 KB)
- 下载次数: 3
发表评论
-
Python:Random模块学习
2013-04-05 19:11 10348Python:Random模块学习 在使用pyth ... -
Python Urllib2使用:代理及其它
2013-02-17 16:52 10319Python Urllib2使用 我们先看下Py ... -
Python多线程学习-叁-threading
2013-01-03 14:08 1823Python 多线程threading学习 ... -
Python多线程学习-贰-threading
2013-01-01 23:32 1729Python 多线程threading ... -
Python多线程学习-壹-threading
2012-12-29 16:24 3031Python多线程学习-threading 想学习py ... -
Python:Dir及str函数
2012-11-22 20:05 2713使用python写脚本时,使用到字符串的使用方法,和Ja ... -
Python:type及dir函数
2012-11-19 14:33 0使用python写脚本时,使用到字符串的使用方法,和Ja ...
相关推荐
使用Python和BeautifulSoup库进行网络抓取Goodreads图书清单,以及使用pandas和matplotli在Python中进行快速数据分析 我对在Goodreads上最受欢迎的书籍清单中最常推荐的书籍感兴趣,因此我决定使用网页抓取来收集前...
tvseriesfinale.py使用BeautifulSoup模块刮数据从和2011 - 2015年由和``title``为结束电视节目的标题(``canceled_shows`的子集生成可变``canceled_shows``为结束电视节目`)*截至2015年7月,wikipedia-state.py为...
"jieba", "beautifulsoup4", "wheel", "networkx", "sympy", \ "pyinstaller", "django", "flask", "werobot", "pyqt5", \ "pandas", "pyopengl", "pypdf2", "docopt", "pygame", \ "yapf", "isort", "pylint", ...
Python是一种多范式编程语言,既适合面向对象编程,也适合函数式... - 安装Numpy及其应用场景 - Numpy的ndarray数据结构(创建、访问、运算等) - 数据索引与切片 - 通用函数(对数组执行快速运算) - 广播(Broadcast)
Web_Scraping_and_Classification (Python) 使用 BeautifulSoup 和 Whoosh,维基百科文本被索引为世界上所有的首都城市及其国家。 接下来,使用贝叶斯分类器,根据城市名称预测大陆。 包含一个混淆矩阵,详细说明了...
Python爬虫开发中常见问题及其解决方法和经验总结主要包括以下几点: 网络请求问题 请求失败或超时:设置合理的超时时间,并使用异常处理机制(如try-except),当出现...解析错误:使用BeautifulSoup、lxml等库进行H
Altify Altify自动执行为图像标签插入替代文本属性的任务。 Altify使用Microsoft Computer Vision API的深度学习算法为HTML文件中的图像添加字幕,并以...(符合标准的网络惯例)依赖性Python 2.7 BeautifulSoup安装
准备篇介绍了机器学习的发展及应用前景以及常用科学计算平台,主要包括统计分析语言r、机器学习模块mlpy和neurolab、科学计算平台numpy、图像识别软件包opencv、网页分析beautifulsoup等软件的安装与配置。...
3.1 使用BeautifulSoup进行数据抓取 3.2 正则表达式在数据清洗中的应用 3.3 JSON数据格式与Python的交互 爬虫实例分析 4.1 网页新闻爬取实例 4.2 图片批量下载实例 4.3 社交媒体数据抓取 动态内容爬取技术 5.1 AJAX...
脚本使用了`requests`库来发送HTTP请求,`BeautifulSoup`库来解析HTML内容,以及`Tkinter`库来创建简单的用户界面。它可以作为理解网络请求、HTML内容处理和用户界面设计基础的实用示例。 ### 使用注意事项 - **...
- 3.1 使用BeautifulSoup进行数据抓取 - 3.2 正则表达式在数据清洗中的应用 - 3.3 JSON数据格式与Python的交互 4. **爬虫实例分析** - 4.1 网页新闻爬取实例 - 4.2 图片批量下载实例 - 4.3 社交媒体数据抓取 5...
- 详细的系统文档说明,描述如何安装、运行系统以及如何使用系统的各项功能。 - 可能还包括一些用于开发的依赖库和工具。 5. **应用价值**: - 对于政府机构、企业和个人来说,该系统可以提供有价值的舆论监测和...
如果您在err chatbot上拥有管理员权限,只需使用 !install err-rssfeed 为了安装插件。 然后!help查看可用的命令及其说明。 依存关系 pip install feedparser pip install beautifulsoup 如果是Python 3,则需要一...
在此项目中使用了 ( ),要通过pip安装它,请使用以下命令: pip install beautifulsoup4 文件夹api包含所有可用的文档: reascripthelp.html :REAPER中显示的文档(帮助-> ReaScript文档) reaper-apidocs....
将 Kindle 剪报文件(或每行一个单词的任何 .txt 文件)中的单个单词突出显示导入指定的 Anki 卡片组及其定义。 要求 从requirements.txt: user@machine:kindleanki$ pip freeze Send2Trash==1.3.0 argparse==...
EUserv_extend ...1,安装Python3及其依赖 # Install Python3 apt install python3 python3-pip -y # Intstall dependences pip install requests beautifulsoup4 2,在main.py第7-8行中将USERNAME&PASSWORD
在这一步,我学习了如何分析文本,使用什么度量,分类器及其设置如何更好地应对这一任务。 然后,第二步是商店中商品评论的情绪分析。 该任务分为以下子任务: 真正的在线商店的数据收集/解析 数据处理与清理 模型...
网页搜罗挑战-火星任务搜集火星资料Jupyter Notebook包括使用BeautifulSoup,Pandas和Splinter从以下站点抓取数据。 -精选最新新闻标题和段落文字-刮取特色图片-刮除包含的表格-刮取4个火星半球的图像及其相应的标题...
合金ML 基于遗传算法和神经网络的合金推荐系统该项目由的离合器特别利益小组完成该项目完全由Python 3及其各种库完成该项目有以下主要阶段: 1)Web抓取和数据集获取: 来自各种在线资源的报废合金特性数据从使用的...
UnZip.py ==>从ZipFile中提取特定文件(基于过滤器) ValidateFile.py ==>验证文件夹中的所有文件是否都以反斜杠结尾(用于验证plsql文件) Format_xml.py ==>使用BeautifulSoup格式化XML并将其写入文本文件,以便...