02 BeautifulSoup

本文是关于BeautifulSoup库的入门教程,介绍了如何使用该库进行网页抓取和解析的基本操作,包括选择器的使用、元素遍历和提取数据的方法。
摘要由CSDN通过智能技术生成
# Author:Nimo_Ding

'''
爬虫四个步骤:
获取数据 - requests库完成
解析数据 - BeautifulSoup网页解析库完成
提取数据 - BeautifulSoup网页解析库完成
保存数据

BeautifulSoup库目前已经进阶到第4版了
安装:pip3 install BeautifulSoup4
'''


# 调用requests库
import requests

# 调用BeautifulSoup库
from bs4 import BeautifulSoup

# 获取网页源代码,返回一个Response对象,赋值给res
res = requests.get('https://localprod.pandateacher.com/python-manuscript/crawler-html/spider-men5.0.html')

# 把Response对象的内容以字符串的形式返回
html= res.text

# 1、解析数据:
# 把网页解析为BeautifulSoup对象
# 第0个参数是要被解析的文本,必须是字符串。
# 第1个参数是解析器,html.parser是Python的一个内置库,最简单的那个。
soup = BeautifulSoup( html,'html.parser')

print(type(soup))
# <class 'bs4.BeautifulSoup'>
# 查看soup数据类型,是一个BeautifulSoup对象

# print(soup)
# soup打印出来的源代码和我们之前用response.text打印出来的源代码是一模一样的。
# 但是response.text是字符串<class 'str'>
# soup是<class 'bs4.BeautifulSoup'>

# 2、提取数据:
#       I:find()与find_all()是BeautifulSoup对象的两个方法,它们可以匹配
#           html的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。
#           两者用法一样,区别在于工作量
#           find():只提取首个满足要求的数据
#           find_all():提取所有满足要求的数据
#           用法:BeautifulSoup对象.find(标签,属性)
#                   soup.find('div',class_='book')
#                   soup.find_all('div',class_='book')
#                   class后面的_是为了和Python中的class类做区分,避免程序冲突。
#       II:Tag对象(标签对象)

# 测试:爬取网页中的三本书名、连接、书籍介绍。
# 通过定位标签div和属性class_提取我们想要的数据
items = soup.find_all(class_='books')
# 这个items是<class 'bs4.element.ResultSet'>
# 可以当成一个列表看待

for item in items:
    print(item.find('h2').text) # 书类别,主要取第一个匹配上的即可,用find。
    print(type(item.find('h2'))) # 是个tag:<class 'bs4.element.Tag'>

    print(item.find(class_='title').text) # 书名
    a=item.find(class_='title')
    print(a['href']) # 书链接
    print(type(item.find(class_='title'))) # 是个tag:<class 'bs4.element.Tag'>

    print(item.find(class_='info').text) # 书的介绍
    print(type(item.find(class_='info'))) # 是一个tag:<class 'bs4.element.Tag'>


'''

HTML常用标签:
    <html> 定义html文档
    <head> 定义文档头部
    <body> 定义文档主体
    <a> 定义超链接
    <audio> 定义音频
    <button> 定义按钮
    <div> 定义块区域
    <h1>、<h2>、<h3> 定义标题
    <p> 定义段落-paragraph
    <img> 定义图片
    <ol> 定义有序列表
    <ul> 定义无序列表
    <li> 定义单个列表条目

HTML属性:
    class 为html元素定义一个或多个类名classname
    id 定义元素的唯一id
    href 用来定义链接
    style 规定元素的行内样式 inline style

response对象:
    response.status_code
    response.content
    response.text
    response.encoding

BeautifulSoup对象.find(标签,属性)
BeautifulSoup对象.find_all(标签,属性)

soup.find('div',class_='books')
soup.find_all('div',class_='books')
标签和属性可以任选其一来进行find,

Tag对象(标签对象)的三种常用属性与方法:
    Tag.find()     -- 提取Tag中的Tag
    Tag.find_all() -- 提取Tag中的Tag
    Tag.text       -- 提取Tag中的文字
    Tag['属性名']   -- 输入参数:属性名,可以提取Tag中这个属性的值


<class 'bs4.element.ResultSet'>
这是列表结构,可以当成列表来处理。

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

总结:

要在以上代码中添加每天固定时间爬取数据的功能,你可以使用`schedule`模块来实现定时任务。请按照以下步骤进行修改: 1. 首先,在PyCharm中安装`schedule`模块。可以使用以下命令在终端中安装: ```shell pip install schedule ``` 2. 然后,将以下代码添加到PyCharm中: ```python import requests from bs4 import BeautifulSoup import schedule import time def crawl_net_value(): # 设置基金代号 fund_code = '400015' # 构造爬取链接 url = f'http://fund.eastmoney.com/{fund_code}.html' # 发送请求 response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 获取基金净值 net_value = soup.find(class_='dataItem02').find_all('span')[2].text print(f'基金{fund_code}的净值为:{net_value}') def job(): print("开始执行爬取基金净值的操作...") crawl_net_value() print("爬取基金净值的操作执行完毕!") # 设定定时任务 schedule.every().day.at("20:30").do(job) # 无限循环执行定时任务 while True: schedule.run_pending() time.sleep(1) ``` 这段代码中,我们引入了`schedule`和`time`模块。定义了`crawl_net_value`函数用于爬取基金净值并输出结果。`job`函数用于执行爬取基金净值的操作并输出相应信息。然后,使用`schedule.every().day.at("20:30").do(job)`来设定每天的20:30执行`job`函数的定时任务。最后,使用无限循环`while True`来不断运行定时任务。 请确保你的代码正确运行并没有报错。一旦你运行了这段代码,它将在每天的20:30自动执行爬取基金净值的操作并输出结果。 希望这次能帮到你,如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值