python爬虫:爬取网站所有页面上某些内容

举例场景:爬取腾讯课堂中,查询python的所有课程的封面图、课程标题、课程数量、课程价格,这4个部分的内容。

代码如下:

import requests
# import lxml  # 导入用于请求的包lxml
from bs4 import BeautifulSoup    # 导入用于请求的包bs4
from math import ceil  # 向上取整
from pprint import pprint

BASE_URL = "https://ke.qq.com/course/list/python"  # 腾讯课堂的网站,搜索python的第一个页面
def get_content(url:str):
    """对某一个url进行http请求,获取返回的文本"""
    header = {'user-agent':"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}

    response = requests.get(url, headers=header)
    response_text = response.content.decode("utf-8")
    return response_text

def get_pages(one_page_num:int):
    """计算网页的总页数"""
    content = get_content(BASE_URL)
    # 实例化bs4对象
    soup = BeautifulSoup(content, 'lxml')
    # 找到页面上显示的总结果数
    total_courses = int(soup.find('em', class_="result__count").text.replace("+", "")) # 去掉数字后面的+,例如,200+
    # 计算中页数,向上取整
    return ceil(total_courses/one_page_num)

def get_pages_url(pages:int):
    """拼接每一页的url"""
    # 定义一个页面url存放的list
    url_list = []
    for page in range(1, pages+1):
        url_list.append(BASE_URL + '?page=' + str(page))
    return url_list

def get_info(url:str):
    """抓取某个页面的内容:封面图、课程标题、课程数量、课程价格"""
    content = get_content(url)  #  腾讯课堂的网站,搜索python,一页上抓取某些内容
    # 实例化bs4对象
    soup = BeautifulSoup(content, 'lxml')
    # 第一次筛选
    first_filter = soup.find_all('div', class_='course-list')[0]  # 仅又一个值,注意class后面带有下划线_
    # 第二次筛选
    second_filter = first_filter.find_all('section', class_="course-card-expo-wrapper")  # 一页中共有24个值
    # print(len(second_filter))
    # print(second_filter)
    # 定一个集合,使用循环来遍历第二次抓取出的内容
    page_info = []
    for one in second_filter:
        temp_dict = {}
        # 抓取封面图片地址
        img = one.find('div', class_="kc-course-card-cover").img.attrs['src']
        # img = one.find('div', class_="kc-course-card-cover").find('img').attrs['src']
        temp_dict["img"] = img
        # 抓取课程title
        title = one.find('div', class_="kc-course-card-content").h3.attrs['title']
        temp_dict['title'] = title
        # 抓取课程数量
        try:   # 有的课程没有展示课程数量,找不到对应的字段信息,因此添加一个异常捕获
            course_num = one.find('div', class_="kc-course-card-cover-course-num---tapHtg").text
        except AttributeError as e:
            pprint(e)
            temp_dict['course_num'] = "没有在展示出课程数量"
        else:
            temp_dict['course_num'] = course_num
        # 抓取课程价格
        price = one.find('span', class_="kc-course-card-price").text
        temp_dict['price'] = price
        # 添加到集合中
        page_info.append(temp_dict)
    return page_info

def get_all_info(urls:list):
    """抓取所有页面的内容"""
    # 定义一个list存放所有页面上抓取到的内容
    all_info = []
    for url in urls:
        # 抓取某一页的内容,extend在列表末尾扩展序列元素
        all_info.extend(get_info(url))
    return all_info


if __name__ == '__main__':
    # 一页展示的数量
    one_page_num = 24
    # 计算总页数
    pages = get_pages(one_page_num)
    # 获取所有页的url
    urls = get_pages_url(pages)
    # 抓取所有页面的内容
    results = get_all_info(urls)

    # 打印抓取总课程数量
    pprint(len(results))
    # 循环打印出抓取的每门课程的课程数量
    for one in results:
        pprint(one['course_num'])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/34365.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat 8.5 环境搭建指南

文章目录 导言环境搭建总结 导言 欢迎阅读本篇博客,本文将为您提供关于如何搭建Tomcat 8.5环境的详细指南。Tomcat是一个流行的开源Java Servlet容器,它提供了一个运行Java Web应用程序的平台。无论您是新手还是有经验的开发人员,本文都将帮…

4、架构:Canvas VS DOM

在可视化搭建的低代码平台中,设计器是一个非常关键的模块,可以帮助用户通过拖拽、配置等方式快速搭建应用界面。 在技术选型方面,目前市面上主流的设计器技术包括基于 HTML/CSS/JavaScript 的 Web 设计器。 在渲染方案方面,主流…

王道《计算机网络》思维导图汇总

第一章 1.1.1 概念与功能 1.1.2 组成与分类 1.1.3 标准化工作及相关组织 1.1.4 性能指标 速率 带宽 吞吐量 时延 时延带宽积 往返时延RTT 利用率 1.2.1 分层结构、协议、接口、服务 1.2.2 OSI参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 1.2.4 TCP/IP 参…

Linux下的分布式迁移工具dsync使用

一、Linux下的分布式迁移工具dsync使用 dsync 是一个在 Linux 系统上用于迁移文件和目录的工具。它可以在不同的存储设备之间进行数据同步和迁移操作。dsync 是 rsync 工具的一个衍生版本,专注于在本地文件系统之间进行数据迁移。 这里是官网:dsync 1、…

游泳买耳机买什么的比较好,列举几款实战性好的游泳耳机

对于运动用户来说,在运动时都会选择听一些节奏感比较强的音乐,让自己运动是更有活力。现在已经是三伏天中的前伏期间,不少人会选择在三伏天的日子里进行减肥瘦身,耳游泳已经成为很多人都首选运动,游泳是非常好的有氧运…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代,软件已经成为我们办公和生活的必备工具。然而,市面上的大部分国产软件都需要付费才能使用,给我们的经济负担增加了不少。幸运的是,国内有一些良心软件,它们质量上乘,功能强大,…

2023牛客网秋招国内大厂最牛的 Java 面试八股文合集(全彩版)

秋收即将来临,找工作的小伙伴比比皆是,很对小伙伴早早的就开始储备技术,准备秋招面试了。 为了帮助小伙伴更好的应对面试,我拉来十几个大佬,汇总一线大厂的情况,给你整了一套超全的面试资料: 16…

深度学习项目实战二: LetNet5网络结构搭建

深度学习项目实战二: LetNet5网络结构搭建 文章目录 深度学习项目实战二: LetNet5网络结构搭建@[TOC](文章目录)一、卷积基本运算公式二、LetNet5网络1. 网络结构![在这里插入图片描述](https://img-blog.csdnimg.cn/0008fe6e5886414eac09eed49556ad99.png)2. 导入相关包3. 代码…

熔断与降级 Hystrix

一、Hystrix(豪猪)简介 1、Hystrix的设计目的 (1)对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 (2)阻止某一个依赖服务的故障在整个系统中蔓延,服务A->服务B->服务C,服务C故障了…

四、交换网络实验4——单臂路由配置

更多网络基础内容可见: 网络基础学习目录及各章节指引 4.6.4 配置单臂路由器 实验目的 学习配置单臂路由 实验工具 Cisco Packet Tracer 实验环境 安装模拟器的Windows系统 实验步骤 第一步:根据拓扑配置基本信息

【Linux修炼】开发工具使用

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

无人机遥感在农林信息提取中的实现方法与GIS融合制图教程

详情点击链接:无人机遥感在农林信息提取中的实现方法与GIS融合制图 遥感技术作为一种空间大数据手段,能够从多时、多维、多地等角度,获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势,是智慧农业必须采用的重…

Vue指令案例

案例需求&#xff1a; 将Vue数据模型中的数据以表格的形式渲染展示 具体代码如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-wid…

《MySQL》对表进行操作(DDL语句)

文章目录 &#x1f4a1;创建表&#x1f4a1;修改表&#x1f4a1;删除表 在了解下列语句前&#xff0c;先掌握一下指令 # 查看表内容 desc [表名] # 详细查看表内容 show create table [表名] \G&#x1f4a1;创建表 # 创建表 create table [表名] ([字段1] [类型1],[字段2] […

ChatGPT实战:高考志愿填报

近期&#xff0c;随着各地陆续发布高考成绩&#xff0c;高考志愿填报市场随之升温&#xff0c;“高报师”再次成为“香饽饽”。填报志愿对中学生来说太难&#xff0c;在一个懵懂的年纪做这样一个决策&#xff0c;份量是比较重的。当普通人没很多的信息做参考的时候&#xff0c;…

pytorch快速入门中文——01

PyTorch 深度学习&#xff1a;60分钟快速入门 原文&#xff1a;https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html 作者&#xff1a; Soumith Chintala https://www.youtube.com/embed/u7x8RXwLKcA 什么是 PyTorch&#xff1f; PyTorch 是基于以下两个…

Linux历史及环境搭建(VMware搭建CentOS7环境以及使用XShell连接Vmware)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机2.5 使用XShell连接VMware 结语 1.Linux历史 在这里简要介绍Linux的发展…

AI医疗。

随着技术的发展&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到了我们生活的许多领域&#xff0c;包括凭其强大的预测和分析能力已经走入了医疗卫生领域。特别是在使用OpenAI的GPT-4技术的chatbot&#xff0c;如chatGPT和GPT-4等&#xff0c;已经成为了给医疗行业注…

Bert

参考资料&#xff1a; 《机器学习》李宏毅 1 Bert 是怎么运作的&#xff1f; Bert 是一种自监督学习&#xff08;Self-supervised Learning&#xff09;模型。Bert 的目标是 pre-train 出一个能够理解语义的多功能语言模型&#xff0c;使之能够在特定任务上只学习较少的带标…

MAVEN的学习

MAVEN的作用是什么&#xff1f; 依赖管理&#xff1a;方便快捷的管理项目的资源&#xff08;jar包&#xff09;&#xff0c;避免版本冲突问题统一项目结构&#xff1a;提供标准、统一的项目结构项目构建&#xff1a;标准跨平台&#xff08;Linux、windows、MacOS&#xff09;的…
最新文章