使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接

目的:使用selenium + chrome爬取中国大学Mooc网计算机学科的所有的课程链接列表

思路:找到每个分页的节点属性为class=”m-course-list” 的div元素,再找到该元素下面的类属性为class = “u-clist f-bg f-cb f-pr j-href ga-click”的div元素的属性data-href的值,使用xpath获取。

难点:在网页源码里面,是看不到相关的课程链接信息,点击分页,发现地址栏的url一直都在变,但改变url的某个值,发现没什么作用,抓包发现是异步加载,所以就采用selenium + chrome浏览器获取,但可以第一个分页的所有课程链接,而要获取点击下一页后的网页源码,还要借助unitest来解决,通过别的方法获取源码过于麻烦。

完整代码如下:

# -*- coding:utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import unittest
import time
from lxml import etree

class douyuSelenium(unittest.TestCase):
    ‘‘‘
    利用unittest模块的测试类来解决获取下一页的网页源码问题。
    正常情况,当点击下一页后,获取当前页的网页源码比较麻烦,而使用测试类的方法则可以很容易解决

    ‘‘‘

    def setUp(self):
        ‘‘‘
        初始化方法(固定写法)

        ‘‘‘

        # 创建谷歌浏览器对象。
        self.driver = webdriver.Chrome()
        # 统计链接个数
        self.num = 0
        self.num2 = 1
        # 保存链接列表
        self.link_list = []
        # 请求网页,如果该行代码放在testMooc方法,会导致抓取的数据有重复,而且漏抓
        self.driver.get(‘https://www.icourse163.org/category/computer‘)

    def testMooc(self):
        ‘‘‘
        具体的测试用例方法(方法名开头固定以test开头)

        ‘‘‘

        while True:

            # 让网页完全加载,避免网页没加载完导致获取的数据丢失
            time.sleep(3)
            # 获取网页源码
            html = self.driver.page_source
            # 把源码解析为html dom文档
            content = etree.HTML(html)
            # 使用xpath去匹配所有的课程链接
            course_list = content.xpath(‘//div[@class="m-course-list"]//div[@class="u-clist f-bg f-cb f-pr j-href ga-click"]/@data-href‘)

            for item in course_list:
                # 拼接获取完整的课程链接
                link = ‘https://www.icourse163.org‘ + item
                # 添加课程链接到保存的链接列表
                self.link_list.append(link)

            # 退出循环条件,从网页源码里面没找到某个类名,则返回为-1,进而作为当点击下一页时,如果没法点击时,则此时的返回值不为-1
            if (html.find(‘ux-pager_btn ux-pager_btn__next z-dis‘)) != -1:
                break

            # 模拟浏览器手动点击下一页
            self.driver.find_element_by_xpath(‘//li[@class="ux-pager_btn ux-pager_btn__next"]/a‘).click()

        # 输出课程链接及统计个数
        for each in self.link_list:
            if(self.num % 20 == 0):
                self.num2
                print(‘\n‘ + ‘=‘*30 + ‘第‘ + str(self.num2) + ‘页课程链接列表‘ + ‘=‘*30 + ‘\n‘)
                self.num2 += 1
            self.num += 1
            print(each)

        # 输出该学科的所有课程链接的个数
        print self.num,len(self.link_list)

    def tearDown(self):
        ‘‘‘ 退出方法(固定写法)‘‘‘

        self.driver.quit()

if __name__ == ‘__main__‘:
    unittest.main()

代码图片如下:

测试结果如下:

原文地址:https://www.cnblogs.com/silence-cc/p/9300999.html

时间: 2025-01-02 04:03:53

使用selenium + chrome爬取中国大学Mooc网的计算机学科的所有课程链接的相关文章

Python爬虫——定向爬取“中国大学排名网”

内容整理自中国大学MOOC——北京理工大学-蒿天-Python网络爬虫与信息提取 相关实战章节 我们预爬取的url如下 http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html 网页节选 在浏览器中读取网页源代码 可以 发现表格数据信息是直接写入HTML页面信息中,所以我们可以直接采取定向爬虫操作. 我们的整体设计思路如下: 1.从网络上获取大学排名网络内容 2.提取网页内容中信息到合适的数据结构 3.利用数据结构展示并输出结果 仔细观察可以发现

使用selenium + Chrome爬取某网站乌云公开漏洞文章并保存为pdf文件

目的:使用selenium + Chrome爬取某网站指定类型的乌云公开漏洞文章,即在win10终端输入漏洞类型(如未授权),则爬取所有该类型的漏洞文章,并把每个分页的数字作为文件夹名,来保存该分页下面的所有的漏洞文章. 总结:本例只是能简单的爬取某一类型漏洞的所有文章,但不能爬取多个类型漏洞的所有文章,有时可能会有一些小bug导致没爬取完就崩溃,需要手工修改进而重新爬.其它问题解决看注释. 关于python代码里面出现中文在windows里面的处理,还没完全掌握.可参考Python for W

python爬取中国大学排名

教程来自:[Python网络爬虫与信息提取].MOOC. 北京理工大学 目标:爬取最好大学网前50名大学 代码如下: import requests from bs4 import BeautifulSoup import bs4 def getHTMLText(url): try: r = requests.get(url,timeout = 30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text exce

爬取中国大学排名

我们需要爬取2019年中国内地的大学排名,这里以物理学科为例,http://www.zuihaodaxue.cn/BCSR/wulixue2019.html. 这个页面比较简单爬取难度不大,这里我们使用python的requests,bs4,BeautifulSoup库,关于BeatutifulSoup库的文档可以在这个网站查询https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/ 先定义一个get函数来爬取相关信息 def get(url): tr

【Python爬虫】从html里爬取中国大学排名

from bs4 import BeautifulSoupimport requestsimport bs4 #bs4.element.Tag时用的上#获取网页页面HTMLdef getHTMLText(url): try: r = requests.request("get", url,timeout=30) r.raise_for_status() #如不是200报错 r.encoding = r.apparent_encoding #猜测编码然后赋予给解码 编码模式 demo =

Python网络爬虫与信息提取(中国大学mooc)

目录 目录 Python网络爬虫与信息提取 淘宝商品比价定向爬虫 目标获取淘宝搜索页面的信息 理解淘宝的搜索接口翻页的处理 技术路线requests-refootnote 代码如下 股票数据定向爬虫 列表内容 爬取网站原则 代码如下 代码优化 Python网络爬虫与信息提取 淘宝商品比价定向爬虫 股票数据定向爬虫 1. 淘宝商品比价定向爬虫 功能描述 目标:获取淘宝搜索页面的信息 理解:淘宝的搜索接口翻页的处理 技术路线:requests-re[^footnote]. 代码如下: #CrowTa

【Python3 爬虫】U11_爬取中国天气网

目录 1.网页分析 2.代码实现 1.网页分析 庚子年初,各种大事件不期而至,又赶上最近气温突变,所以写个爬虫来爬取下中国天气网,并通过图表反映气温最低的前20个城市. 中国天气网:http://www.weather.com.cn/textFC/hb.shtml 打开后如下图: 从图中可以看到所有城市按照地区划分了,并且每个城市都有最低气温和最高气温,通过chrome查看Elements,如下: 从上图可以看到展示当天的数据,那么<div class='conMidtab'>..这个标签则没

[python爬虫] Selenium定向爬取PubMed生物医学摘要信息

本文主要是自己的在线代码笔记.在生物医学本体Ontology构建过程中,我使用Selenium定向爬取生物医学PubMed数据库的内容.        PubMed是一个免费的搜寻引擎,提供生物医学方面的论文搜寻以及摘要.它的数据库来源为MEDLINE(生物医学数据库),其核心主题为医学,但亦包括其他与医学相关的领域,像是护理学或者其他健康学科.它同时也提供对于相关生物医学资讯上相当全面的支援,像是生化学与细胞生物学.        PubMed是因特网上使用最广泛的免费MEDLINE,该搜寻引

Python爬取中国天气网天气

Python爬取中国天气网天气 基于requests库制作的爬虫. 使用方法:打开终端输入 "python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个"data.csv"文件,内容请参考链接:https://www.cnblogs.com/Rhythm-/p/9255190.html 运行效果: 源码: import sys import re import requests import webbrowser from