Python爬虫第二课

BeautifulSoup

下载插件

windowns: pip install BeautifulSoup4
Mac: pip3 install BeautifulSoup4

bs对象 = BeautifulSoup(想要解析的文本,‘解析器’)
在括号中,要输入两个参数,第0个参数是要被解析的文本,注意了,它必须必须必须是字符串。
括号中的第1个参数用来标识解析器,我们要用的是一个Python内置库:html.parser。(它不是唯一的解析器,但是比较简单的)
例子:

#(来自风变编程)
import requests
from bs4 import BeautifulSoup
#引入BS库
rs = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
html = rs.text
soup = BeautifulSoup(html ,'html.parser')#把网页解析为BeautifulSoup对象
print(soup)

rs.text<class ‘str’>
soup = BeautifulSoup(html ,‘html.parser’)<class ‘bs4.BeautifulSoup’>
rs.text是属于字符串而**soup = BeautifulSoup(html ,‘html.parser’)**属于被解析过的BeautifulSoup对象,之所以打印出来的效果是一样的,是因为BeautifulSoup对象在直接打印的时候会调用该对象内的str方法,所以直接打印 bs 对象显示字符串是str的返回结果。

提取数据(find(),find_all(),Tag对象)

find()与find_all()是BeautifulSoup对象的两个方法,它们可以匹配html的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。

它俩的用法基本是一样的,区别在于,find()只提取首个满足要求的数据,而find_all()提取出的是所有满足要求的数据。

方法作用用法示例
find()提取满足要求的首个数据BeautifulSoup对象.find(标签,属性)soup.find(‘div’,class_=‘books’)
find_all()提取满足要求的所有数据BeautifulSoup对象.find(标签,属性)soup.find_all(‘div’,class_=‘books’)

*class_,这里有一个下划线,是为了和python语法中的类 class区分,避免程序冲突。当然,除了用class属性去匹配,还可以使用其它属性,比如style属性等。

find() 例子:

#(来自风变编程)
import requests
from bs4 import BeautifulSoup
url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/spder-men0.0.html'
res = requests.get (url)
print(res.status_code)
soup = BeautifulSoup(res.text,'html.parser')
item = soup.find('div') #使用find()方法提取首个<div>元素,并放到变量item里。
print(type(item)) #打印item的数据类型
print(item)       #打印item 

打印结果为:

200
<class 'bs4.element.Tag'>
<div>大家好,我是一个块</div>

可以看出来特它的数据类型是一个Tag类型的
find_all() 例子:

#(来自风变编程)
import requests
from bs4 import BeautifulSoup
url = 'https://localprod.pandateacher.com/python-manuscript/crawler-html/spder-men0.0.html'
res = requests.get (url)
print(res.status_code)
soup = BeautifulSoup(res.text,'html.parser')
items = soup.find_all('div') #用find_all()把所有符合要求的数据提取出来,并放在变量items里
print(type(items)) #打印items的数据类型
print(items)       #打印items

打印结果为:

200
<class 'bs4.element.ResultSet'>
[<div>大家好,我是一个块</div>, <div>我也是一个块</div>, <div>我还是一个块</div>]

运行结果是那三个

元素,它们一起组成了一个列表结构。打印items的类型,显示的是<class ‘bs4.element.ResultSet’>,是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理。

遍历出来的元素的数据类型是<class ‘bs4.element.Tag’>
这与find()提取出来的数据类型是一样的
Tag类对象的常用属性和方法

方法作用
Tag.find()和Tag.find_all()提取Tag中的Tag
Tag.text提取Tag中的文字
Tag[‘属性名’]输入参数:属性名,可以提取Tag中这个属性的值

来自风变编程

ps:革命尚未成功,同志仍需努力!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值