BS是什么?

BeautifulSoup是一个基于标签的文本解析工具。可以根据标签提取想要的内容,很适合处理html和xml这类语言文本。如果你希望了解更多关于BS的介绍和用法,请看BeautifulSoup 4 官方文档

为什么要用BS?

BS可以和许多框架配合使用,让我们在编写爬虫程序时关注于操作逻辑,而不需要再关心其具体实现,最直观地体现就是不需要再编写正则表达式去匹配文本。

如何使用BS?

现在正式开始今天的主要内容:如何使用BS爬取慕课网所有课程及其对应的评分。本文依托的Python环境为Python 3.6.0,pip版本为pip3,BS版本为BS4。

要使用BS,首先需要安装BS:

pip3 install BeautifulSoup4

同时需要获取网页文本,需要安装request:

pip3 install request

接着来分析慕课网的网页结构:

可以看到每一门课都对应一个简单的网址,如"JAVA遇见HTML——Servlet篇"课程对应的网址为:http://www.imooc.com/learn/269 。且目前的最大课程编号为888,因此这里可以用一个简单的循环获得所有课程链接:

baseUrl = "http://www.imooc.com/learn/"
k = 0
while k < 1000:
url = baseUrl + str(k)

JAVA遇见HTML——Servlet篇中打开开发者视图,可以看到负责课程名称的内容在如下元素中:

<div class="hd clearfix">
<h2 class="l">JAVA遇见HTML——Servlet篇</h2>
</div>

负责课程评分等信息的内容在如下元素中:

<div class="statics clearfix">
<div class="moco-btn l learn-btn green-btn red-btn">
<a href="/video/5534" class="J-learn-course">开始学习</a>
<em></em>
<i class="follow-action js-follow-action icon-star_outline" data-cid="269" data-cmd="follow" title="收藏"></i>
</div>
<div class="static-item l">
<span class="meta">学习人数</span>
<span class="meta-value js-learn-num">111926</span>
</div>
<div class="static-item l">
<span class="meta">难度级别</span>
<span class="meta-value">初级</span>
<em></em>
</div>
<div class="static-item l">
<span class="meta">课程时长</span>
<span class="meta-value"> 3小时10分</span>
<em></em>
</div>
<div class="static-item l score-btn">
<span class="meta">综合评分</span>
<span class="meta-value">9.6</span>
<em></em>
</div>
</div>

这两部分内容包含了我们所有想要获得的信息,下面就可以使用BS4对页面进行处理了。

利用request获取该课程页面的网页源码:

def GetHtmlContext(url):
try:
f = request.urlopen(url)
data = f.read()
return data
'如果链接对应的内容不存在,返回0'
except:
return 0

获得源码后就可以使用BS4对网页标签进行解析了,上面已经给出了想要获得信息的界面结构,因此可以轻易地完成解析:

def GetData(html, url):
data = []
soup = BeautifulSoup(html, "html.parser") title = soup.find('div', attrs={'class': 'hd clearfix'})
data.append(title.find('h2', attrs={'class': 'l'}).getText())
lesson = soup.find('div', attrs={'class': 'statics clearfix'}) for attr in lesson.find_all('div', attrs={'class': 'static-item l'}):
data.append(attr.find('span', attrs={'class': 'meta-value'}).getText())
grade = lesson.find('div', attrs={'class': 'static-item l score-btn'})
data.append(grade.find('span', attrs={'class': 'meta-value'}).getText())
data.append(url)
data.remove('')

这里不仅获取了课程评分,还获取了课程难度,课程时长以及对应的链接。

完整的代码示例如下:

"""
爬取imooc网站评分过9的课程名称及课程链接等信息
"""
import sys
from urllib import request from bs4 import BeautifulSoup def GetHtmlContext(url):
try:
f = request.urlopen(url)
data = f.read()
return data
except:
return 0 def GetData(html, url): data = []
soup = BeautifulSoup(html, "html.parser") title = soup.find('div', attrs={'class': 'hd clearfix'})
data.append(title.find('h2', attrs={'class': 'l'}).getText())
lesson = soup.find('div', attrs={'class': 'statics clearfix'}) for attr in lesson.find_all('div', attrs={'class': 'static-item l'}):
data.append(attr.find('span', attrs={'class': 'meta-value'}).getText())
grade = lesson.find('div', attrs={'class': 'static-item l score-btn'})
data.append(grade.find('span', attrs={'class': 'meta-value'}).getText())
data.append(url)
data.remove('')
print(outputMode.format(data[0], data[1], data[2], data[3], data[4], chr(12288))) # 将输出重定向到txt文件
output = sys.stdout
outputfile = open("D:\lessondata.txt", 'w', encoding='utf-8')
sys.stdout = outputfile outputMode = "{0:{5}^20}\t{1:^10}\t{2:^10}\t{3:^10}\t{4:{5}<10}"
print(outputMode.format('课程名称', '难度', '课程时长', '综合评分', '课程链接', chr(12288)))
baseUrl = "http://www.imooc.com/learn/"
k = 0
while k < 1000:
url = baseUrl + str(k)
html = GetHtmlContext(url)
k += 1
if(html != 0):
GetData(html, url) outputfile.close()
sys.stdout = output

最后输出结果:

当然你可以也将数据输出到xml文件或数据库,那样更加便于查看和分析,这里就不详细描述了。

参考资料

Python爬虫之爬取慕课网课程评分的更多相关文章

  1. 简单python爬虫案例(爬取慕课网全部实战课程信息)

    技术选型 下载器是Requests 解析使用的是正则表达式 效果图: 准备好各个包 # -*- coding: utf-8 -*- import requests #第三方下载器 import re ...

  2. Node.js爬虫-爬取慕课网课程信息

    第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...

  3. python 爬虫之爬取大街网(思路)

    由于需要,本人需要对大街网招聘信息进行分析,故写了个爬虫进行爬取.这里我将记录一下,本人爬取大街网的思路. 附:爬取得数据仅供自己分析所用,并未用作其它用途. 附:本篇适合有一定 爬虫基础 crawl ...

  4. Python爬虫项目--爬取自如网房源信息

    本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...

  5. Python爬虫,爬取实验楼全部课程

    目的: 使用requests库以及xpath解析进行实验楼所有课程,存入MySQL数据 库中. 准备工作: 首先安装,requests库,lxml库,以及peewee库.在命令行模式,使用以下命令. ...

  6. python爬虫实战---爬取大众点评评论

    python爬虫实战—爬取大众点评评论(加密字体) 1.首先打开一个店铺找到评论 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经 ...

  7. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...

  8. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  9. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

随机推荐

  1. js中变量base64加密传输

    首先对base64进行定义: var Base64 = { _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01 ...

  2. kvm 虚拟化的使用

    kvm原理:基于内核空间虚拟化,加载内核模块,来做到虚拟化(简称内核空间).基于qemu连接内核,driver驱动连接kvm的API接口(简称用户空间): hypervisor 管理硬件设备,传统的虚 ...

  3. Python里Pure paths、PurePosixPath、PureWindowsPath的区别

    Python是跨平台的,可以在不同的操作系统上运行.但是不同系统上路径 的表示方式是不一样的. 例如windows上路径使用“\”分割子目录和父目录,linux上是使用“/”来分割.这就是PurePo ...

  4. 【个人笔记】《知了堂》mysql表连接

    为什么使用表连接 什么是表连接? 如果数据来自多个表,那么可以采用链接查询的方式来实现.因此表连接就是多个表连接合在一起实现查询效果 表连接的原理 表连接采用的是笛卡尔乘积,称之为横向连接. 笛卡尔乘 ...

  5. 月亮之眼_KEY

    [问题描述] 吉儿是一家古董店的老板娘,由于她经营有道,小店开得红红火火.昨天,吉儿无意之中得到了散落民间几百年的珍宝--月亮之眼.吉儿深知"月亮之眼"价值连城:它是由许多珍珠相连 ...

  6. [js高手之路] html5 canvas系列教程 - 像素操作(反色,黑白,亮度,复古,蒙版,透明)

    接着上文[js高手之路] html5 canvas系列教程 - 状态详解(save与restore),相信大家都应该玩过美颜功能,而我们今天要讲的就是canvas强大的像素处理能力,通过像素处理,实现 ...

  7. Linux学习——shell编程之运算符

    shell编程之运算符 一:shell中常见算术运算符号和优先级 二:算术运算符 Shell 变量:是弱类型!不能进行加减乘除!比较麻烦! 例子 :shell变量弱类型 a=11 b=22 echo ...

  8. 【重点突破】——Cookie的使用

    cookie:小甜饼 cookie:保存客户端浏览器中一个纯文本文件 版本高的浏览器可查看   F12->Resource  左下方cookie    查看 cookie作用: 保存:[安全性要 ...

  9. eclipse安装lombok插件问题解决

    在 java平台上,lombok 提供了简单的注解的形式来帮助我们消除一些必须有但看起来很臃肿的代码, 比如属性的get/set,及对象的toString等方法,特别是相对于 POJO.简单的说,就是 ...

  10. 【Learning】多项式乘法与快速傅里叶变换(FFT)

    简介: FFT主要运用于快速卷积,其中一个例子就是如何将两个多项式相乘,或者高精度乘高精度的操作. 显然暴搞是$O(n^2)$的复杂度,然而FFT可以将其将为$O(n lg n)$. 这看起来十分玄学 ...