bs4介绍

python爬虫之bs4模块(超详细)

一、bs4简介

二、使用方法

三、BeautifulSoup四大对象种类

(1)tag

(2)NavigableString

(3)BeautifulSoup

(4)Comment

四、CSS选择器

一、bs4简介

即BeautifulSoup,是python种的一个库,最主要的内容就是从网页中抓取数据。

 

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。

 

Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。

 

Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

 

二、使用方法

1.首先导入bs4库

 

from bs4 import BeautifulSoup

1

2.然后我们利用requests或者urllib2来打开一个网址(这里以https://www.baidu.com为例)

 

import requests

url = "https://www.baidu.com"

r1 = requests.get(url,'lxml')

r1.encoding='utf-8'

#print (r1.text)

1

2

3

4

5

输出结果:

python bs4

3.创造一个BeautifulSoup对象

 

bs_1=BeautifulSoup(r1.text,'lxml')

#print(bs_1)

1

2

两个参数:第一个参数是要解析的html文本,第二个参数是使用那种解析器,对于HTML来讲就是html.parser,这个是bs4自带的解析器。

 

如果一段HTML或XML文档格式不正确的话,那么在不同的解析器中返回的结果可能是不一样的。

 

解析器 使用方法 优势

python标准库 BeautifulSoup(html, “html.parser”) 1、Python的内置标准库

2、执行速度适中

3、文档容错能力强

lxml HTML BeautifulSoup(html, “lxml”) 1.速度快

2.文档容错能力强

lxml XML BeautifulSoup(html, [“lxml”, “xml”]) BeautifulSoup(html, “xml”) 1.速度快

2.唯一支持XML的解析器

html5lib BeautifulSoup(html, “html5lib”) 1.做好的容错性

2.以游览器的方式解析文档

3.生成HTML5的文档

4.然后通过这个对象来实现对获取到的源码进行筛选和处理

 

print(bs_1.prettify()) #格式化输出全部内容

 

print(bs_1.标签名)

 

#标签名有html,head,title,meta,body,script,style等等

1

2

3

4

5

三、BeautifulSoup四大对象种类

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

 

(1)tag

Tag对象与 xml 或 html 原生文档中的 tag 相同。

 

bs_1=BeautifulSoup(r1.text,'lxml')

tag = bs_1.head

print(type(tag))

#<class 'bs4.element.Tag'>

1

2

3

4

如果不存在,则返回 None,如果存在多个,则返回第一个。

 

Name :每个 tag 都有自己的名字

tag.name

# 'head'

1

2

Attributes:tag 的属性是一个字典

tag['class']

# 'boldest'

 

tag.attrs

# {'class': 'boldest'}

 

type(tag.attrs)

# <class 'dict'>

1

2

3

4

5

6

7

8

多值属性:最常见的多值属性是class,多值属性的返回 list

soup = BeautifulSoup('<p class=""></p>')

 

print(soup.p['class']) # ['body', '']

 

print(soup.p.attrs) # {'class': ['body', 'aaa']}

1

2

3

4

5

如果某个属性看起来好像有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,那么Beautiful Soup会将这个属性作为字符串返回。

 

a1 = BeautifulSoup('<p id="my id"></p>', 'html.parser')

print(a1.p['id']) # 'my id'

1

2

Text:返回 tag 的所有字符串连成的字符串

 

其他方法

tag.has_attr('id') #返回 tag 是否包含 id 属性

1

以上代码还可以写成 ’ id ’ in tag.attrs 的形式,之前说过,tag 的属性是一个字典。

 

(2)NavigableString

字符串常被包含在 tag 内,Beautiful Soup 用 NavigableString 类来包装 tag 中的字符串。但是字符串中不能包含其他 tag。

 

a1 = BeautifulSoup('<b class="aaa">bbb</b>')

 

s = a1.b.string

 

print(s) # bbb

 

print(type(s)) # <class 'bs4.element.NavigableString'>

1

2

3

4

5

6

7

(3)BeautifulSoup

BeautifulSoup 对象表示的是一个文档的全部内容。大部分时候,可以把它当作 Tag 对象。但是 BeautifulSoup 对象并不是真正的 HTM L或 XML 的 tag,它没有attribute属性,name 属性是一个值为“[document]”的特殊属性。

 

(4)Comment

comment一般表示文档的注释部分

 

a1 = BeautifulSoup("<b><!--This is a comment--></b>")

 

comment = a1.b.string

 

print(comment) # This is a comment

 

print(type(comment)) # <class 'bs4.element.Comment'>

1

2

3

4

5

6

7

四、CSS选择器

css的规则:

 

标签名不加任何修饰,类名前加点,id名前加#,在这里用的方法大致是一样的,用到的方法是bs_1.select(),它的返回值是一个列表list

 

通过标签名字

 

print bs_1.select('title')

1

通过类名

 

print bs_1.select('.class')

1

通过id

 

print bs_1.select('#a_1')

1

组合查找

 

这里和在写css的格式是一样的

 

print bs_1.select('.class #id')

 

#意思是查找.class类下的id是id的元素

1

2

3

子查询

 

print bs_1.select('head > title')

1

属性查找

 

print bs_1.select(p[class="new"])

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值