Python Beautifulsoup

简介
简单来说,Beautiful Soup 是python的一个库,最主要的功能是从网页抓取数据。
官方解释如下:
Beautiful Soup 提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。Beautiful Soup 自动将输入文档转换为Unicode 编码,输出文档转换为 utf-8 编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup 就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。Beautiful Soup 已成为和lxml、html6lib 一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

安装

pip install beautifulsoup4

使用

from bs4 import BeautifulSoup
soup = BeautifulSoup(markup,'html.parser')
print soup.prettify()  # 格式化输出

四大对象种类

Beautiful Soup 将复杂的html文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4中:

  1. Tag
  2. NavigableString
  3. BeautifulSoup
  4. Comment
# Tag 举例

soup.title
soup.head
soup.a
soup.p
soup.p.attrs # 属性
soup.p['class']  # 属性值
soup.p['class']  # 属性值
# NavigableString ,获取标签内部的文字

soup.p.string

搜索文档树

find_all(name,attrs,recursive,text,**kwargs)
搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件
1)name参数
 A.传字符串
	tag.find_all('title',class_='sister')  # 搜索标签为title, 属性class='sister'的tag ,为防止class跟关键词重名,所以加一个下划线
 B.传正则表达式
	soup.find_all(re.compile("^b"))
 C. 传列表
	soup.find_all(["a","b"])
 D. 传True
 	soup.find_all(True)  # True可以匹配任何值,查找到所有的tag,不会返回字符串节点
 E. 传方法
 	def has_class_but_no_id(tag):
 		return tag.has_attr('class') and not tag.has_attr('id')
 	
 	soup.find_all(has_class_but_no_id)   # 将方法作为参数传入
 	
2)  keyword 参数
soup.find_all(id='link2')
soup.find_all(href=re.compile('elsie'))
soup.find_all(href=re.compile('elsie'),id='link1')   # 多个指定名字的参数可以同时过滤tag的多个属性
soup.find_all(attrs={'data-foo':'value'})  #有些tag属性在搜索中不能使用,比如 data-*属性,但是可以通过attrs参数定义一个字典参数来搜索包含特殊属性的tag

3)text 参数

通过text参数可以搜索文档中的字符串内容。与那么参数的可选值一样,text参数接受字符串、正则表达式、列表、True

soup.find_all(text='jim')
soup.find_all(text=['tillie','elsie','jim'])
soup.find_all(text=re.compile('jim'))

4) limit参数

限制返回结果的数量
soup.find_all('a',limit=2)

5) recursive 参数
调用tag的find_all() 方法时,Beautiful Soup 会检索当前tag的所有子孙节点,如果只想搜索tag的直接子节点,可以使用参数 recursive=False 。
soup.find_all('title',recursive=False)

CSS 选择器
在写CSS时,标签名不加任何修饰,类名前加点,id名前加#
这里用到的方法是 soup.select(), 返回类型是 list

1) 通过标签名查找
soup.select('title')

2) 通过类名查找
soup.select('.sister')

3) 通过id名查找
soup.select('#link1')

4) 组合查找
soup.select('p #link1')

5) 属性查找
soup.select('a[class="sister"']')

6) 通过 get_text() 方法获取内容
soup.select()[0].get_text()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值