BeautifulSoup怎么用

BeautifulSoup库目前已经进阶到第4版(Beautiful Soup 4),由于它不是Python标准库,而是第三方库,需要单独安装它,不过,我们的学习系统已经安装好了。

解析数据:

python无法安装gmssl Python无法安装beautifulsoup_python无法安装gmssl

根据之前所学的requests.get(),我们可以先获取到一个Response对象,并确认自己获取成功:
# 调用requests库
import requests
# 获取网页源代码,得到的res是response对象
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html') 
# 检查请求是否正确响应
print(res.status_code)
# 把res的内容以字符串的形式返回
html = res.text 
# 打印html
print(html)

上面的代码是第0关学过的内容,好,接下来就轮到BeautifulSoup登场解析数据了,请特别留意第2行和第6行新增的代码。

import requests
# 引入BS库,下面的bs4就是beautifulsoup4
from bs4 import BeautifulSoup
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
# 把网页解析为BeautifulSoup对象
soup = BeautifulSoup(res.text,'html.parser')

使用BeautifulSoup去解析数据:

from bs4 import BeautifulSoup
soup = BeautifulSoup(字符串,'html.parser')

使用BeautifulSoup来提取数据:

这一步,又可以分为两部分知识:find()与find_all(),以及Tag对象(标签对象)。

python无法安装gmssl Python无法安装beautifulsoup_python_02


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

2) find()只提取首个满足要求的数据。find()方法将代码从上往下找,找到符合条件的第一个数据,不管后面还有没有满足条件的其他数据,停止寻找,立即返回。

3)而find_all()顾名思义(find all:查找全部),提取出的是所有满足要求的数据。代码从上往下找,一直到代码的最后,把所有符合条件的数据揣好,一起打包返回。

python无法安装gmssl Python无法安装beautifulsoup_html_03


在BeautifulSoup中,不止find()和find_all(),还有select()也可以达到相同目的。

python无法安装gmssl Python无法安装beautifulsoup_数据_04

例子
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')
# 使用find()方法提取首个<div>元素,并放到变量item里。
item = soup.find('div') 
# 打印item的数据类型
print(type(item))
# 打印item  
print(item)       		
结果:
<class 'bs4.element.Tag'>
<div>大家好,我是一个块</div>
说明这是一个Tag类标签对象。
例子
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')
# 用find_all()把所有符合要求的数据提取出来,并放在变量items里
items = soup.find_all('div') 
# 打印items的数据类型
print(type(items)) 
# 打印items
print(items)       
结果:
<class 'bs4.element.ResultSet'>
[<div>大家好,我是一个块</div>, 
<div>我也是一个块</div>, 
<div>我还是一个块</div>]
打印items的类型,显示的是<class 'bs4.element.ResultSet'>,是一个ResultSet类的对象。其实是Tag对象以列表结构储存了起来,可以把它当做列表来处理。
Tag类对象的常用属性和方法

python无法安装gmssl Python无法安装beautifulsoup_数据_05


我们用Tag.text提出Tag对象中的文字,用Tag[‘href’]提取出URL。

python无法安装gmssl Python无法安装beautifulsoup_python_06


上一关,我们的操作对象从URL链接到了Response对象。而这一关,我们的操作对象是这样的:Response对象——字符串——BS对象。到这里,又产生了两条分岔:一条是BS对象——Tag对象;另一条是BS对象——列表——Tag对象。

python无法安装gmssl Python无法安装beautifulsoup_html_07

例子
import requests
from bs4 import BeautifulSoup
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
html = res.text
soup = BeautifulSoup( html,'html.parser')
items = soup.find_all(class_='books')
for item in items:
    kind = item.find('h2')
    title = item.find(class_='title')
    brief = item.find(class_='info')
    print(kind.text,'\n',title.text,'\n',title['href'],'\n',brief.text)