python学习 认识爬虫 解析提取数据

本文介绍了使用Python的BeautifulSoup库解析网页数据的方法。首先,通过创建BeautifulSoup对象来解析HTML文本,然后详细讲解了find和find_all方法用于查找元素。接着,讨论了如何处理Tag对象以提取所需数据,包括提取h2、title和info标签的内容,并展示了如何去除HTML标签获取纯文本信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.BeautifulSoup 解析网页中的数据
1.用法
bs对象=BeautifulSoup(要解析的文本,‘解析器’)
注意:要解析的文本,必须是字符串
解析器:我们要用的是一个Python内置库:html.parser。(它不是唯一的解析器,但是比较简单的)

import requests
from bs4 import BeautifulSoup
res = requests.get('URL') 
soup = BeautifulSoup( res.text,'html.parser')
print(type(soup)) #查看soup的类型
print(soup) # 打印soup

看看运行结果,soup的数据类型是<class ‘bs4.BeautifulSoup’>,说明soup是一个BeautifulSoup对象。

二.提取数据
1.find与find_all()

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

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

使用了find(),find_all()后,我们打印出来的东西还不是目标数据,里面含着HTML标签,所以下面,我们要进入到提取数据中的另一个知识点——Tag对象。

2.Tag

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

例子:
https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html
在这里插入图片描述
现在我们想提取三本书的信息:

import requests 
from bs4 import BeautifulSoup 
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')# 返回一个Response对象,赋值给res
html= res.text# 把Response对象的内容以字符串的形式返回
soup = BeautifulSoup( html,'html.parser') # 把网页解析为BeautifulSoup对象
items = soup.find_all(class_='books') # 通过定位标签和属性提取我们想要的数据
for item in items:
    print('想找的数据都包含在这里了:\n',item) # 打印item

运行结果:
在这里插入图片描述
可见:我们提取出的数据包含HTML标签,所以需要进一步提取
,会用到Tag。
接下来,我们分别提取出每本书的h2、title和info标签的内容。

kind = item.find('h2') # 在列表中的每个元素里,匹配标签<h2>提取出数据
title = item.find(class_='title') #在列表中的每个元素里,匹配属性class_='title'提取出数据
brief = item.find(class_='info') #在列表中的每个元素里,匹配属性class_='info'提取出数据

现在,kind、title和brief都是Tag对象,我们需要提取Tag对象中的内容,我们用Tag.text提出Tag对象中的文字,用Tag[‘href’]提取出URL。

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:                      # 遍历列表items
    kind = item.find('h2')               # 在列表中的每个元素里,匹配标签<h2>提取出数据
    title = item.find(class_='title')     #  在列表中的每个元素里,匹配属性class_='title'提取出数据
    brief = item.find(class_='info')      # 在列表中的每个元素里,匹配属性class_='info'提取出数据
    print(kind.text,'\n',title.text,'\n',title['href'],'\n',brief.text)  # 打印书籍的类型、名字、链接和简介的文字

现在就提取出了所有不带HTML标签的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值