学习记录
课程来自:风变编程
使用requests和bs4模块实现网站内容的下载:
- 使用requests模块中的get方法,获取返回信息(response)
- 使用bs4模块中的BeautifulSoup方法对返回的信息(response)进行解析,解析器使用的是内置的'html.parser'
- 通过BeautifulSoup的find方法对解析后的内容进行匹配(class_='books')查询
获取的内容返回list=[div1,div2,div3]列表,通过for循环遍历,遍历的结果为bs4.element.Tag对象
# 备忘:- find_all获取的结果为list,数据类型为bs4.element.ResultSet
- find 获取的结果为单个标签,数据类型为bs4.element.Tag
- 使用find方法获取list列表中的每个标签
使用.text方法获取Tag中的文字,使用['属性']获取Tag的属性
# 举例:- Tag.text 获取标签文本
- Tag.['href'] 获取链接
整体流程
requests获取 → .text转成文本 → bs4.bs解析 → bs4.bs.find获取
代码示例
# 第一步:引入所需的模块及方法
import requests
# 引入requests模块,也可以直接使用from requests import get
from bs4 import BeautifulSoup
# 引入bs4模块中的BeautifulSoup方法
# 第二步:获取网站的源码
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')
#使用requests的get方法获取返回信息
html_txt = res.text
#取返回信息的文本(字符串形式)赋值给html_txt
# 第三步:使用BeautifulSoup方法解析
html_txt_div=BeautifulSoup(html_txt,'html.parser')
#使用python内置的方法html.parser对获取到的html文本内容进行解析,并赋值给html_txt_div.
#通过html.parser解析,相当于对html_txt文本进行了结构化的操作,然后才能使用BeautifulSoup的find方法对内容进行定位操作
# 第四步:使用find方法对html_txt_div的内容进行提取
item=html_txt_div.find_all(class_='books')
# 通过对html中的class元素进行定位,将提取的内容赋值给item
# 获取的结果可以视作list
# 注意:
- 此处class必须加_,否则会与python的关键字产生冲突;
- 同时可以使用多个元素对内容进行定位
print(item)
# 获取的内容为list=[div1,div2,div3]
# 第五步:使用for循环进行遍历列表
for i in item:
print(f'列表:\n{i}')
# 遍历的结果为Tag元素
# 使用find方法对i进行取值
h2 = i.find('h2') # 标题
title = i.find(class_='title') # 书名
info = i.find(class_='info') # 介绍
print(h2,title,info) # 取得标签
print(f'分类:{h2.text}\n书名:{title.text}\n介绍:{info.text}')
pirnt('链接:',title['href']) # 这里[]使用f'{}'转义报错,不知道为什么