python 使用 BeautifulSoup 解析html
2015-12-15 17:48
756 查看
下载地址:http://www.crummy.com/software/BeautifulSoup/bs4/download/4.3/beautifulsoup4-4.3.2.tar.gz
说明:这个版本使用python 2.7比较好。
install: 解压缩,然后运行python setup.py install
linux系统还可以:sudo apt-get install Python-bs4
官方文档:
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
(也可以使用 pyQuery)
当你调用
Tag: 对于 Tag,它有两个重要的属性,是 name 和 attrs
NavigableString: 获取标签内部的文字
BeautifulSoup:you can treat it as a Tag object
Comment:获取注释 <!-- comment -->
Tag:
NavigableString:
find_all == findAll
find_all(name, attrs, recursive, string, limit, **kwargs)
我的程序:
说明:这个版本使用python 2.7比较好。
install: 解压缩,然后运行python setup.py install
linux系统还可以:sudo apt-get install Python-bs4
官方文档:
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
(也可以使用 pyQuery)
输出文档
with open('test.html', 'w') as f: f.write(soup.prettify().encode('utf-8'))
当你调用
__str__,
prettify或者
renderContents时, 你可以指定输出的编码。默认的编码(
str使用的)是UTF-8。 下面是处理ISO-8851-1的串并以不同的编码输出同样的串的例子。 soup.__str__("ISO-8859-1")
四大对象种类
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:Tag: 对于 Tag,它有两个重要的属性,是 name 和 attrs
NavigableString: 获取标签内部的文字
BeautifulSoup:you can treat it as a Tag object
Comment:获取注释 <!-- comment -->
Tag:
print type(soup.a) #<class 'bs4.element.Tag'>
print soup.p.attrs #{'class': ['title'], 'name': 'dromouse'}
css_soup = BeautifulSoup('<p class="body strikeout"></p>') css_soup.p['class'] # ["body", "strikeout"]
NavigableString:
print soup.p.string #The Dormouse's story
足够有用:
soup.title # <title>The Dormouse's story</title> soup.title.name # u'title' soup.title.string # u'The Dormouse's story' soup.title.parent.name # u'head' soup.p # <p class="title"><b>The Dormouse's story</b></p> soup.p['class'] # u'title' soup.a # <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a> soup.find_all('a') # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>, # <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>, # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
print soup.find_all("a", attrs={"class": "sister"}, limit=2)
import re soup.find(string=re.compile("sisters"))
soup.find(id="link3") # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
head_tag.contents [<title>The Dormouse's story</title>] head_tag.children [<title>The Dormouse's story</title>] title_tag.parent # <head><title>The Dormouse's story</title></head> sibling_soup.b.next_sibling # <c>text2</c> sibling_soup.c.previous_sibling # <b>text1</b>
find_all == findAll
find_all(name, attrs, recursive, string, limit, **kwargs)
我的程序:
def parse_html(text): soup = BeautifulSoup(text, from_encoding="UTF-8") # 找出id="historyTable"的table, 找到它内部的第一个table,获取所有的 tr target = soup.find(id="historyTable").find('table').findAll('tr') results = [] rec = [] for tr in target[1:]: # ignore th tds = tr.findAll('td') # 获取所有的 td build_no = str(tds[1].span.string.strip()) # 找出第二个td的span节点,取出它的text内容 patch = str(tds[0].a.string) # 第一个td 的 a 节点的text status_node = tds[2].find('a') status = str(status_node.find('span').string) status_link = '%s/%s'%(TEAMCITY_HOME, status_node.attrs['href']) # 属性 started = str(tds[5].string.replace(u'\xa0', ' ')) # 去掉无法解析的字符 print '-'*10 print '%s\t'%patch, print '%s\t'%build_no, print '%s\t'%status, print '%s\t'%started
相关文章推荐
- day8 python学习随笔(上)
- python 模拟 java hashcode
- leetcode之Balanced Binary Tree
- 机器学习实战python版Logistic回归
- 零基础入门学习Python(11):内嵌函数、闭包和变量作用域
- 基本采样算法及Python实现
- AES ECB加密实现(java/php/python)
- python中的quopri模块
- Python单例模式的4种实现方法
- Python基础教程 第1章: 基础知识 学习笔记
- Python之路【番外篇】回顾&类的静态字段
- python学习---一些特殊函数
- Python3.2官方文件翻译--课堂笔记和异常是阶级
- 【python入门教程】Django的安装和入门
- LeetCode ZigZag Conversion
- Python decorator
- python爬虫入门,讲得通俗易懂
- 格雷码 Python编写
- Python subprocess模块学习总结
- Python正则表达式指南