下载地址: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

还可以:pip install beautifulsoup4

官方文档:

http://www.crummy.com/software/BeautifulSoup/bs4/doc/

(也可以使用 pyQuery)

使用

  1. from bs4 import BeautifulSoup
  2. soup = BeautifulSoup(html_str, 'html.parser')

输出文档

  1. with open('test.html', 'w') as f:
  2. 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:

    1. print type(soup.a)
    2. #<class 'bs4.element.Tag'>
    1. print soup.p.attrs
    2. #{'class': ['title'], 'name': 'dromouse'}
    1. css_soup = BeautifulSoup('<p class="body strikeout"></p>')
    2. css_soup.p['class']
    3. # ["body", "strikeout"]

NavigableString:

    1. print soup.p.string
    2. #The Dormouse's story

足够有用:

  1. soup.title
  2. # <title>The Dormouse's story</title>
  3.  
  4. soup.title.name
  5. # u'title'
  6.  
  7. soup.title.string
  8. # u'The Dormouse's story'
  9.  
  10. soup.title.parent.name
  11. # u'head'
  12.  
  13. soup.p
  14. # <p class="title"><b>The Dormouse's story</b></p>
  15.  
  16. soup.p['class']
  17. # u'title'
  18.  
  19. soup.a
  20. # <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>
  21.  
  22. soup.find_all('a')
  23. # [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
  24. # <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
  25. # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]
  1. print soup.find("a", attrs={"class": "sister"}) #只找第一个
  1. print soup.find_all("a", attrs={"class": "sister"}, limit=2)
  1. import re
  2. soup.find(string=re.compile("sisters"))
  1. soup.find(id="link3")
  2. # <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>
  1. head_tag.contents
  2. [<title>The Dormouse's story</title>]
  3.  
  4. head_tag.children
  5. [<title>The Dormouse's story</title>]
  6.  
  7. title_tag.parent
  8. # <head><title>The Dormouse's story</title></head>
  9.  
  10. sibling_soup.b.next_sibling
  11. # <c>text2</c>
  12.  
  13. sibling_soup.c.previous_sibling
  14. # <b>text1</b>

find_all == findAll

find_all(nameattrsrecursivestringlimit**kwargs)

我的程序:

  1. from bs4 import BeautifulSoup
  2.  
  3. def parse_html(text):
  4. soup = BeautifulSoup(text, from_encoding="UTF-8")
  5. # 找出id="historyTable"的table, 找到它内部的第一个table,获取所有的 tr
  6. target = soup.find(id="historyTable").find('table').findAll('tr')
  7. results = []
  8. rec = []
  9. for tr in target[1:]: # ignore th
  10. tds = tr.findAll('td') # 获取所有的 td
  11. build_no = str(tds[1].span.string.strip()) # 找出第二个td的span节点,取出它的text内容
  12. patch = str(tds[0].a.string) # 第一个td 的 a 节点的text
  13. status_node = tds[2].find('a')
  14. status = str(status_node.find('span').string)
  15. status_link = '%s/%s'%(TEAMCITY_HOME, status_node.attrs['href']) # 属性
  16. started = str(tds[5].string.replace(u'\xa0', ' ')) # 去掉无法解析的字符
  17.  
  18. print '-'*10
  19. print '%s\t'%patch,
  20. print '%s\t'%build_no,
  21. print '%s\t'%status,
  22. print '%s\t'%started

python 使用 BeautifulSoup 解析html的更多相关文章

  1. Python爬虫 | Beautifulsoup解析html页面

    引入 大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据.因此,在聚焦爬虫中使用数据解析.所以,我们的数据爬取的流程为: 指定url 基于reque ...

  2. Python【BeautifulSoup解析和提取网页数据】

    [解析数据] 使用浏览器上网,浏览器会把服务器返回来的HTML源代码翻译为我们能看懂的样子 在爬虫中,也要使用能读懂html的工具,才能提取到想要的数据 [提取数据]是指把我们需要的数据从众多数据中挑 ...

  3. python用BeautifulSoup解析源码时,去除空格及换行符

    一.去除空格 strip()   " xyz ".strip() # returns "xyz"   " xyz ".lstrip() # ...

  4. python爬虫数据解析之BeautifulSoup

    BeautifulSoup是一个可以从HTML或者XML文件中提取数据的python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式. BeautfulSoup是python爬虫三 ...

  5. 第14.12节 Python中使用BeautifulSoup解析http报文:使用select方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>和<第14.11节 Python中使用BeautifulSo ...

  6. 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...

  7. 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台

    搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...

  8. Python配合BeautifulSoup读取网络图片并保存在本地

    本例为Python配合BeautifulSoup读取网络图片,并保存在本地. BeautifulSoup可代替正则表达式,更好地解析Html文本,获取其中的指定内容,如Tag.Property等 # ...

  9. python中html解析-Beautiful Soup

    1. Beautiful Soup的简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...

随机推荐

  1. 最小生成树算法详解(prim+kruskal)

    最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...

  2. shell脚本学习(五)

    流程控制 先说几个注意的地方 1)注意你是在unix下编程,注意文件的编码如果你发现报错请用notepad++打开,编辑->文档格式转换->点unix,然后再上传运行即可 2)sh的流程控 ...

  3. 一个菜鸟正在用SSH写一个论坛(1)

    嗯..搞定了注册和登录,说明我的SSH整合已经没有问题了,那么我就继续折腾了. 我的目的是用SSH框架写一个论坛(当然是功能最简单的那种),搞定了整合之后我打算先做出一些基本的功能,于是我就先简单的设 ...

  4. Codeforces Round #404 (Div. 2) C 二分查找

    Codeforces Round #404 (Div. 2) 题意:对于 n and m (1 ≤ n, m ≤ 10^18)  找到 1) [n<= m] cout<<n; 2) ...

  5. 【Tarjan算法】【DFS】Petrozavodsk Summer Training Camp 2016 Day 9: AtCoder Japanese Problems Selection, Thursday, September 1, 2016 Problem B. Point Pairs

    这份代码可以作为找割边的模板.割边分割出来的部分是无向图的 边-双连通分量. 平面上2*n+1个点,在同一横坐标上的点之间可以任意两两匹配.同一纵坐标上的点之间也可以.问你对于所有的点i,输出i被移除 ...

  6. Java学习笔记(14)

    需求:一个银行账户5000块,两夫妻一个拿着存折,一个拿着卡,开始取钱比赛,每次只能取1000,要求不准出现线程安全问题 public class Demo10 { public static voi ...

  7. Problem F: 尖兵

    #include<stdio.h> struct man{ ]; int grade; }; int main(void) { int t; int i,j,n; ],max; scanf ...

  8. Problem E: 十六进制转十进制

    #include<stdio.h> int main(void) { ]; int sum,i; while(gets(str)!=NULL) { sum=; ;str[i]!='\0'; ...

  9. redis源码解析之dict数据结构

    dict 是redis中最重要的数据结构,存放结构体redisDb中. typedef struct dict { dictType *type; void *privdata; dictht ht[ ...

  10. ConstraintLayout导读

    ConstraintLayout是Android Studio 2.2中主要的新增功能之一,也是Google在去年的I/O大会上重点宣传的一个功能,可以把ConstraintLayout看成是一个更高 ...