在前面的例子用,我用了BeautifulSoup来从58同城抓取了手机维修的店铺信息,这个库使用起来的确是很方便的。本文是BeautifulSoup 的一个详细的介绍,算是入门把。文档地址:http://www.crummy.com/software/BeautifulSoup/bs4/doc/

什么是BeautifulSoup?

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。

直接看例子:

#!/usr/bin/python

# -*- coding: utf-8 -*-

from bs4 import BeautifulSoup

html_doc = """

The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

"""

soup = BeautifulSoup(html_doc)

print soup.title

print soup.title.name

print soup.title.string

print soup.p

print soup.a

print soup.find_all('a')

print soup.find(id='link3')

print soup.get_text()

结果为:

The Dormouse's story

title

The Dormouse's story

The Dormouse's story

Elsie

[Elsie, Lacie, Tillie]

Tillie

The Dormouse's story

The Dormouse's story

Once upon a time there were three little sisters; and their names were

Elsie,

Lacie and

Tillie;

and they lived at the bottom of a well.

...

可以看出:soup 就是BeautifulSoup处理格式化后的字符串,soup.title 得到的是title标签,soup.p  得到的是文档中的第一个p标签,要想得到所有标签,得用find_all

函数。find_all 函数返回的是一个序列,可以对它进行循环,依次得到想到的东西.

get_text() 是返回文本,这个对每一个BeautifulSoup处理后的对象得到的标签都是生效的。你可以试试 print soup.p.get_text()

其实是可以获得标签的其他属性的,比如我要获得a标签的href属性的值,可以使用 print soup.a['href'],类似的其他属性,比如class也是可以这么得到的(soup.a['class'])。

特别的,一些特殊的标签,比如head标签,是可以通过soup.head 得到,其实前面也已经说了。

如何获得标签的内容数组?使用contents 属性就可以 比如使用 print soup.head.contents,就获得了head下的所有子孩子,以列表的形式返回结果,

可以使用 [num]  的形式获得 ,获得标签,使用.name 就可以。

获取标签的孩子,也可以使用children,但是不能print soup.head.children 没有返回列表,返回的是 ,

不过使用list可以将其转化为列表。当然可以使用for 语句遍历里面的孩子。

关于string属性,如果超过一个标签的话,那么就会返回None,否则就返回具体的字符串print soup.title.string 就返回了 The Dormouse's story

超过一个标签的话,可以试用strings

向上查找可以用parent函数,如果查找所有的,那么可以使用parents函数

查找下一个兄弟使用next_sibling,查找上一个兄弟节点使用previous_sibling,如果是查找所有的,那么在对应的函数后面加s就可以

如何遍历树?

使用find_all 函数

举例说明:

print soup.find_all('title')

print soup.find_all('p','title')

print soup.find_all('a')

print soup.find_all(id="link2")

print soup.find_all(id=True)

返回值为:

[

The Dormouse's story]

[

The Dormouse's story

]

[Elsie, Lacie, Tillie]

[Lacie]

[Elsie, Lacie, Tillie]

通过css查找,直接上例子把:

print soup.find_all("a", class_="sister")

print soup.select("p.title")

通过属性进行查找

print soup.find_all("a", attrs={"class": "sister"})

通过文本进行查找

print soup.find_all(text="Elsie")

print soup.find_all(text=["Tillie", "Elsie", "Lacie"])

限制结果个数

print soup.find_all("a", limit=2)

结果为:

[Elsie, Lacie, Tillie]

[

The Dormouse's story

]

[Elsie, Lacie, Tillie]

[u'Elsie']

[u'Elsie', u'Lacie', u'Tillie']

[Elsie, Lacie]

总之,通过这些函数可以查找到想要的东西。

---end---

python中beautifulsoup的作用_python 中BeautifulSoup入门相关推荐

  1. python中赋值语句的作用_python中return可以使用赋值语句吗?

    在python中,有各种不同类型的语句.一个python程序是由模块构成的;一个模块由一条或多条语句组成;每个语句由不同的表达式组成;表达式可以创建和操作对象.下面来看看python中的语句. 赋值语 ...

  2. python主函数的作用_python中main函数的用法

    原博文 2020-03-27 20:25 − **什么场景下会有main函数?** 当该python脚本被作为模块(module)引入(import)时,其中的main()函数将不会被执行. **ma ...

  3. python中count的作用_python中函数COUNT()的功能是什么

    python中函数COUNT()的功能是统计字符串里某个字符出现的次数,语法为[str.count("char", start,end)],其中str为要统计的字符,star为索引 ...

  4. python中count的作用_python中内置的.count是什么?

    我一直在checkio.com上解决问题,其中一个问题是:"编写一个函数来查找在给定字符串中出现最大次数的字母" 最重要的解决方案是: import string def chec ...

  5. python匿名函数的作用_Python中的匿名函数及递归思想简析

    匿名函数 前言 上次咱们基本说了一下函数的定义及简单使用,Python中的基本函数及其常用用法简析,现在咱们整点进阶一些的.同样都是小白,咱也不知道实际需要不,但是对于函数的执行顺序以及装饰器的理解还 ...

  6. python中format函数作用_python中format函数什么意思

    python中format函数什么意思? Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % ...

  7. python except用法与作用_Python中关于try-except用法的错误和异常处理详解

    本文实例讲述了Python中的错误和异常处理操作.分享给大家供大家参考,具体如下: #coding=utf8 print ''''' 程序编译时会检测语法错误. 当检测到一个错误,解释器会引发一个异常 ...

  8. python中逗号的作用_Python中逗号作用的实例分析

    逗号在类型转化中的使用 主要是元组的转换 例如: >>> a=11 >>> b=(a) >>> b 11 >>> b=(a,) ...

  9. python中的pass语句_Python中pass的作用与使用代码示例

    本篇文章小编给大家分享一下Python中pass的作用与使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. Python中pass的作用 空语 ...

最新文章

  1. ubuntu利用apt-get卸载软件
  2. spring boot启用tomcat ssl
  3. linux进入text目录,Linux文件和目录操作命令 | Soo Smart!
  4. idea javafx添加maven_maven+IDEA+JavaFX+JFoenix
  5. Exchange 2013 邮箱管理
  6. 大道至简:微众银行区块链全栈技术体系纵览
  7. pythontuple数据类型_Python数据类型之Tuple元组实例详解
  8. 4G模块使用记录移远EC20、BC20
  9. 今晚去参加了ZTE IP产品线的活动
  10. vscode自定义代码片段
  11. 多功能时钟电路的设计框图_OLED显示屏,行驱动电路设计,单片机AT89C51与和显示屏的硬件接线...
  12. 【Java面试系列】Java微服务面试题
  13. cad用计算机怎么计算坐标,CAD坐标怎样计算
  14. 一网打尽!所有PMP的计算公式都在这里啦,赶紧学起来,建议收藏
  15. bitmap的六种压缩方式,Android图片压缩(转)
  16. P1424 小鱼的航程(改进版)
  17. JS显示团购剩下时间的代码整理
  18. php7 kernel32,usleep()
  19. java中Scanner用法
  20. python def 识别print_Python零基础快速入门(一):print()函数与变量

热门文章

  1. RocketMQ的顺序消费
  2. matlab实验大纲,matlab实验教学大纲.doc
  3. C语言位运算符:与、或、异或、取反、左移和右移
  4. 数据库的统计数据——sysstat
  5. 天线为什么会有多次谐振_天线谐振是怎么回事?
  6. 10分钟西门子SMART200PLC轻松实现连接自建MQTT云平台操作教程
  7. html5播放视频闪退,【答疑】3D MAX2018一打开就闪退的三种原因和解决方法 - 视频教程线上学...
  8. 搜狗输入法vscode 自动繁体_如何解决VSCode Vim中文输入法切换问题?
  9. 盲源分离matlab程序,分享一些盲源分离的代码及相关网址
  10. 软件测试的自我修养:正向思维与逆向思维