首页 > 其他分享 >爬虫 | 解析蓝桥云课课程数据

爬虫 | 解析蓝桥云课课程数据

时间:2023-07-22 09:44:05浏览次数:40  
标签:www cn 标签 爬虫 云课 蓝桥 courses https lanqiao

爬取 蓝桥云课 页面的课程名字和课程链接。爬取内容如下图所示:

我们先要打开开发者工具来定位代码,理清我们需要的数据与标签之间的关系。

每一个class为col-3div标签就是一个课程的信息和链接。

比如,我们定位 Python 新手入门课程,如下图所示:

观察代码后,我们可以知道,课程地址都在 class 名为 course-link 的 a 标签里,而课程名字在 a 标签的子标签里。 a 标签里有三层 div 标签,我们可以通过 class = "course-cover relative" 来获取包含课程名称的 a 标签,然后在去获得 img 标签中 alt 的数据。

获取蓝桥云课课程页面,是使用 requests.get() 来获取的。使用方法如果忘记了,请看上面的例子,这里就不再赘述。下面代码写在 try...except 中的目的是为了保证未能成功抓取数据时,不会报错。

import requests

try:
    url = "https://www.lanqiao.cn/courses/"
    r = requests.get(url)

    # 查看状态码是否正确
    print(r.raise_for_status)
    # <bound method Response.raise_for_status of <Response [200]>>

    r.encoding = r.apparent_encoding  # 转换成 utf-8 的编码形式
    demo = r.text  # 获取页面内容并赋值给定义变量 demo
    # print(demo)
except:
    print("未能获取页面内容")
from bs4 import BeautifulSoup
soup = BeautifulSoup(demo, 'html.parser')
# print(soup)
# html界面

由于该页面中,我们需要的数据是被一层一层的 div 标签包裹,我们需要由外向里层层剥开这些标签,最终定位到所需的数据。首先,我们用 find() 来搜索 body 标签里的 div 标签

div = soup.find('body').div  # 搜索 body 中的 div 标签,然后赋值给定义变量 div
print(div)

我们所需的数据是属性名为 course-linka 标签所包裹,所以用 find_all() 搜索 div标签中所有属性名为 course-linka 标签。

a = div.find_all('a', 'course-link')  # 搜索所有属性名为 course-link 的 a 标签
print(a)

运行上面结果,我们可以清楚地看到,课程地址在 a 标签中的 href 里,而课程名字在 属性名为 titlediv 标签里。我们把课程链接存入 href_list 列表中,把课程名称存入 names 列表中。

href_list = []  # 用来存储课程链接的列表
names = []  # 用来存储课程名字的列表

for i in a:  # 遍历 a 标签
    href_list.append("https://www.lanqiao.cn" +
                     i.get('href'))  # 把课程地址存入 href_list 列表里
    # 把属性名为 title 的 div 标签中的文本内容存入 names 列表里
    names.append(i.find('div', 'title').text.strip())

print(href_list)
print(names)

运行结果:

['https://www.lanqiao.cn/courses/63', 'https://www.lanqiao.cn/courses/1', 'https://www.lanqiao.cn/courses/3584', 'https://www.lanqiao.cn/courses/2752', 'https://www.lanqiao.cn/courses/1283', 'https://www.lanqiao.cn/courses/1127', 'https://www.lanqiao.cn/courses/1330', 'https://www.lanqiao.cn/courses/1341', 'https://www.lanqiao.cn/courses/3483', 'https://www.lanqiao.cn/courses/5349', 'https://www.lanqiao.cn/courses/4012', 'https://www.lanqiao.cn/courses/4848', 'https://www.lanqiao.cn/courses/1354', 'https://www.lanqiao.cn/courses/606', 'https://www.lanqiao.cn/courses/1238', 'https://www.lanqiao.cn/courses/1292']
['新手入门指南之玩转蓝桥云课', 'Linux 基础入门', 'oeasy 教您玩转 python', 'C++ 基础入门实战', '机器学习开放基础课程', 'Django 基础入门', 'Python 新手入门课', 'C++ 从零实现 NoSQL 数据库', 'Effective Java 中文版(第 3 版)', '玩转 Node.js 开发', 'Django 框架基础', '微信公众号开发入门', '知识图谱构建射雕三部曲人物关系', 'Ansible 基础入门', 'JavaScript 基础入门', 'Python 异步网络编程实战']

我们定义一个名为 info_dict 的字典,把课程名字作为字典的 Key,把课程的链接作为课程的 Value

info_dict = {}  # 保存数据的字典

for i in range(len(names)):  # 遍历 names 列表的下标值
    # 把课程名字作为字典的 Key,把课程的链接作为课程的 Value,并保存到 info 字典里
    info_dict[names[i]] = href_list[i]

print(info_dict)

运行结果:

{'新手入门指南之玩转蓝桥云课': 'https://www.lanqiao.cn/courses/63', 'Linux 基础入门': 'https://www.lanqiao.cn/courses/1', 'oeasy 教您玩转 python': 'https://www.lanqiao.cn/courses/3584', 'C++ 基础入门实战': 'https://www.lanqiao.cn/courses/2752', '机器学习开放基础课程': 'https://www.lanqiao.cn/courses/1283', 'Django 基础入门': 'https://www.lanqiao.cn/courses/1127', 'Python 新手入门课': 'https://www.lanqiao.cn/courses/1330', 'C++ 从零实现 NoSQL 数据库': 'https://www.lanqiao.cn/courses/1341', 'Effective Java 中文版(第 3 版)': 'https://www.lanqiao.cn/courses/3483', '玩转 Node.js 开发': 'https://www.lanqiao.cn/courses/5349', 'Django 框架基础': 'https://www.lanqiao.cn/courses/4012', '微信公众号开发入门': 'https://www.lanqiao.cn/courses/4848', '知识图谱构建射雕三部曲人物关系': 'https://www.lanqiao.cn/courses/1354', 'Ansible 基础入门': 'https://www.lanqiao.cn/courses/606', 'JavaScript 基础入门': 'https://www.lanqiao.cn/courses/1238', 'Python 异步网络编程实战': 'https://www.lanqiao.cn/courses/1292'}

当然,我们也可以用 zip 函数更方便的实现效果。

info_dict = dict(zip(names, href_list))
info_dict

实验总结

本课程通过爬取学校排名和蓝桥云课课程链接这两个例子来学习了 Beautiful Soup 库的基本知识,包括标签基本元素、Beautiful Soup 库解析器、遍历文档树、搜索文档树等知识。学到这里我们已经可以用 Beautiful Soup 库来实现一个小爬虫了。不过本实验只完成了 Beautiful Soup 库最基本的应用和练习。接下来同学们可以根据自己的情况结合官方文档,进一步去学习。

标签:www,cn,标签,爬虫,云课,蓝桥,courses,https,lanqiao
From: https://www.cnblogs.com/zhangxuegold/p/17572874.html

相关文章

  • [爬虫]1.1.1网络爬虫的概念
    网络爬虫,也称为网页爬虫或者网页蜘蛛,是一种用来自动浏览互联网的网络机器人。它们会按照特定的规则,从网页上获取信息,然后将这些信息保存下来。网络爬虫的名字来源于它们的工作方式,它们就像是在网络上爬行的蜘蛛,通过链接从一个网页爬到另一个网页。工作原理网络爬虫的基本工作原......
  • Python爬虫超详细讲解(零基础入门,老年人都看的懂)
    本文已收录至Github,推荐阅读......
  • Python爬虫入门七之正则表达式
    在前面我们已经搞定了怎样获取页面的内容,不过还差一步,这么多杂乱的代码夹杂文字我们怎样把它提取出来整理呢?下面就开始介绍一个十分强大的工具,正则表达式!1.了解正则表达式正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规......
  • 有cookie的情况下爬虫如何运行
    importrequestsimportreimporttimeimporthashlibimportthreadingimportjsonfromlxmlimportetreefrompymysql.convertersimportescape_stringfromfake_useragentimportUserAgentfrommylib.moduleimport*headers={'user-agent':......
  • 针对于 Scrapy 爬虫框架的搭建与解析
    Scrapypipinstallscrapy1、Scrapy爬虫框架爬虫框架:爬虫框架是实现爬虫功能的一个软件结构和功能组件集合。爬虫框架是一个半成品,能够帮助用户实现专业的网络爬虫。解析Scrapy爬虫框架:Scrapy爬虫框架包含”5+2“结构,他有五个主模块以及两个中间键构成。engine......
  • 5分钟教你从爬虫到数据处理到图形化一个界面实现山西理科分数查学校-Python
    5分钟教你从爬虫到数据处理到图形化一个界面实现山西理科分数查学校-Python引言在高考结束后,学生们面临的一大挑战是如何根据自己的分数找到合适的大学。这是一个挑战性的任务,因为它涉及大量的数据和复杂的决策过程。大量的信息需要被过滤和解析,以便学生们能对可能的大学选择有......
  • [蓝桥杯 2022 国 B] 卡牌
    题目描述这天,小明在整理他的卡牌。他一共有\(n\)种卡牌,第\(i\)种卡牌上印有正整数数\(i(i\in[1,n])\),且第\(i\)种卡牌现有\(a_{i}\)张。而如果有\(n\)张卡牌,其中每种卡牌各一张,那么这\(n\)张卡牌可以被称为一套牌。小明为了凑出尽可能多套牌,拿出了\(m\)张空......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第八题:蚂蚁感冒(10')(4.9更新)
    第八题:蚂蚁感冒(10')  长100厘米的细长直杆子上有n只蚂蚁。它们的头有的朝左,有的朝右。   每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒。  当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行。  这些蚂蚁中,有1只蚂蚁感冒了。并且在和其它蚂蚁碰面时,会把......
  • 2014 蓝桥杯 预赛 c/c++ 本科B组 第三题:李白打酒 (8' )
    第三题:李白打酒(8')  话说大诗人李白,一生好饮。幸好他从不开车。  一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:  无事街上走,提壶去打酒。  逢店加一倍,遇花喝一斗。  这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。......
  • 动态加载页面的爬虫方法
    首先,可以直接手动拉到网页最下面,然后把F12里面的网页节点元素复制成文本,去获取目标进行下载,代码如下,用到的库BeautifulSoup:importosimporturllib.requestimportrefrombs4importBeautifulSoupasbsimportrandomasrdimporttimedefget_imgs(text):soup=bs......