爬虫——爬取MOOC课程资源

step1:浏览需要爬取资源的主页,找到链接

每一节课的id号依此递增

step2:ctrl+shift+C 查看源码,刷新页面(才能出现视频资源)

刷新前:

刷新后:

step3:在源代码中查找原视频链接所在位置

<div class="m-lessoonDetail">会出现在下面代码中,用来定位视频所在位置

Step4:接下来就是根据源代码写爬虫切割字符获取资源啦~

ps:我们需要使用Selenium抓取JavaScript动态生成数据的网页

Selenium 可以帮我们应对这个问题。
简单说下这个东西有什么用吧,我们可以编写代码让浏览器:

1.自动加载网页;
2.模拟表单提交(比如模拟登录),获取需要的数据;
3.页面截屏;
4.判断网页某些动作是否发生,等等。
然后这个东西是不支持浏览器功能的,你需要和第三方的浏览器一起搭配使用,
 

1.首先安装Selenium

    直接通过pip命令行进行安装:

pip install selenium

2.若想调用Chrome浏览器,需要下载Chromedriver(32位没关系啦~,64位照样用)

        

       下面是下载Chromedriver的链接。

         https://download.jetbrains.8686c.com/python/pycharm-professional-2020.1.1.exe?_ga=2.18685306.215229255.1590761810-214338877.1584512586

      不要急~我们还需要将它放在python的Scripts文件夹下才能调用它

import sys
import time
from bs4 import BeautifulSoup  #网页解析,获取数据
import re  #正则表达式,进行文字匹配
from selenium import webdriver #用于模拟chmore访问网站
import xlwt #excel操作

def main():
    print("开始爬取......")
    baseurl = 'https://www.icourse163.org/learn/WHU-1001539003? 
 tid=1002049010#/learn/content?type=detail&id='  #需要爬取的url
    datalist = getData(baseurl) #获取爬取的内容
    savapath = u'数据结构_武汉大学.xlsx'  #存放路径
    saveData(datalist, savapath) #存入操作
    print("爬取完成!")

#获取页面全部内容,模拟浏览器访问页面
def askURL(url):
    browser = webdriver.Chrome()  # 调用本地的Chrome浏览器
    browser.get(url)  # 请求页面,会打开一个浏览器窗口
    time.sleep(2)
    try:
        browser.refresh()  # 刷新浏览器页面方法 refresh(只有刷新,含有资源的js才会显示)
        time.sleep(3)
    except Exception as e:
      print("Exception found", format(e))

    html_text = browser.page_source  # 获得页面代码
    browser.quit()  # 关闭浏览器
    return html_text

#解析内容
def getData(baseurl):
    videoLink = re.compile(r'src="(.*?)"',re.S)  #切割js内容,以获取视频链接
    videoName = re.compile(r'<div class="u-select">.*?>(.*?)(',re.S) #获取视频名
    datalist = []  #将视频链接与视频名存入列表
    for i in range(0,104):
    #for i in range(0, 2):
        url = baseurl+str(1002711856+i)
        html = askURL(url)
        soup = BeautifulSoup(html,"html.parser") #解析html,读取整个html
        for item in soup.find_all('div',class_="m-lessonDetail"):  # 找到每一个课程detail
            data = []
            item = str(item)   #转换成字符串
            name = re.findall(videoName, item)[1] #得到视频名
            if re.findall(videoLink,item) is not None:
                video = re.findall(videoLink,item)[0] #得到视频链接
            else:
                video ="  "  #视频链接为空,则留空
            if len(name)!=0:
                data.append(name)# 添加视频名
            else:
                data.append("  ")  #留空
            data.append(video)  #添加视频
            print("正在爬取第"+str(i)+"条"+name+video)
            datalist.append(data) #把处理好的一部视频放入datalist

    return datalist

#保存数据
def saveData(datalist,savepath):
    book=xlwt.Workbook(encoding="utf-8")
    sheet = book.add_sheet("数据结构_武汉大学") #创建sheet
    #col=('视频名','视频链接') 
    #sheet.append(col)  #可添加列头
    #for i in range(0,104):
    #for i in range(0,2):
    for i in range(len(datalist)):
        data=datalist[i]
        print("写入第%s条"%i)
        for j in range(0,2):
            sheet.write((i),(j),data[j])
    book.save(savepath) #保存

if __name__ == '__main__':
    main()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值