因为最近需要做一个关于课程类的项目,但苦于没有相关课程的信息及简介。当我在看MOOC上面的Python爬虫课程时,突然想到MOOC上面的课程信息如此完善,我为何不利用下MOOC上面的课程信息呢,说干就干,我随便在MOOC上找到了一页课程信息后,便决定使用Python的requests库去获取课程信息了。课程信息如下
image.png
一、测试代码如下
import requests
print(requests.get("https://www.icourse163.org/category/computer").text)
很容易的就得到了该页面的源代码
image.png
本以为拿到了源代码但可以随便的提取数据了,但是我在下载下来的源代码中找了很久没有发现页面正常显示的时的课程信息。如上面的课程截图有C语言,我搜索了下C语言,可是没有在源代码中搜索到。
image.png
当我仔细看的查看课程列表页面的源代码的时候我才发现原来MOOC上面的课程列表信息是通过js加载的数据,js需要浏览器才能加载,普通的请求只能拿到渲染前的源代码,所以在源代码里面没有找到相关的课程信息。发现问题之后就好办了,既然需要浏览器加载js来渲染数据,那我们就给它一个浏览器然他渲染之后再去拿数据就是了。在python当中,可以使用selenium去模拟各种各样的浏览器,如chrome,safari,firefox。甚至是手机上的浏览器。selenium+phantomjs便是一个无头浏览器。它俩的结合便可以达到更好的数据采集效率。不过在python中需要安装下selenium,至于phantomjs到官网去下载一个就是了。
安装 selenium
pip3 install selenium
下载phantomjs
image.png
这两个工具安装好之后,便可以直接使用了,现在来试试去获取课程列表的那个页面,看看能不能加载出数据。
# -*- coding: UTF-8 -*-
from selenium import webdriver
chrome=webdriver.PhantomJS(executable_path="E:\phantomJs\phantomJs.exe")
chrome.get("https://www.icourse163.org/category/computer")
print(chrome.page_source)
# executable_path为你下载phantomjs的地址
# page_source为当前页面的源代码
于是现在源代码中便有了课程列表的信息
image.png
有了课表列表页面的源代码后,我们就可以提取课程的Url地址,提取出Url地址后,就可以进行课表的详情页面,然后就可以随便拿课程的详细信息了。
二、解析课程列表页面的课表url地址
在python中有许多的解析网页源代码的库,如正则表达式、beautifulsoup、pyquery等,通过运行这些解析库,可以让我们更加方便的提取我们自己想要的数据。本次将使用pyquery库,pyquery库同样需要安装。
安装