中国大学MOOC公开信息收集

警告:本教程仅可由于合法用途,由此带来的一切法律与其他形式责任自负。
这两天网课上得头疼,闲来无事,拿中国大学MOOC开开刀。
首先,打开自己的中国大学MOOC的“个人中心”页面。
1
可以看到,显示的信息包括用户名、关注、讨论等等。同时,发现其url格式为https://www.icourse163.org/home.htm?userId=XXX#/home/course
那好,随便修改一下userId再进行访问
2
成功跳转到了别人的个人中心界面。注意,这一部分其实应该属于公开信息!(因为如果你在讨论区域点击其他人的用户名一样会跳转到这个界面,官方并没有禁止访问)
想到刚开始用的时候老师曾经要求把用户名修改成学校+学号+姓名的格式(而且很多人不会再修改用户名)
那么,是否可以通过爬虫抓取用户名,从中筛选出有用的(也是相对敏感一些的)信息?当然可以。
尝试抓包,发现get到的html中并未含有有用信息(html在之后的加载过程中被修改了)
如果尝试模拟整个交互过程明显非常麻烦。怎么办?无头浏览器。通过模拟真实浏览器操作加载完整的html并进行抓取。
相关资料参见
selenium库的基本使用 - 简书
selenium无头浏览器–谷歌 - 北边的大鱼 - 博客园
下载chromedriver并进行配置。然后就可以进行抓取操作。
代码如下

import requests
import re
from selenium import webdriver

# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')  # # 浏览器不提供可视化页面
chrome_options.add_argument('--disable-gpu')  # 禁用GPU加速,GPU加速可能会导致Chrome出现黑屏,且CPU占用率高达80%以上
chrome_options.add_experimental_option('excludeSwitches', ['enable-logging']) #不打印日志 否则每次抓取都会打印

driver = webdriver.Chrome(options=chrome_options, executable_path=r'XXXXX') #这里是chromedriver路径
#创建对象
for i in range(1140089847,1150170000): #i即为userId
    url="https://www.icourse163.org/home.htm?userId={0}#/home/course"
    url=url.format(i)
    driver.get(url)
    username = driver.find_elements_by_class_name('f-thide')[1].text  #匹配到三个对象,第二个为用户名所在
    #if(('u'in username) or('U' in username) or('大学' in username)): #筛选有用信息
    print(i,end = " ")
    print(username)

运行后就可以在命令行看到用户名以及对应的userId。至于userId的范围请自行实验,初步估计在1000万以上。
唯一的问题是信息有效率比较低,可能数千个数据仅有一个有效,而且数据来源无法定向。
但是另一个方面,资料的质量和效率相对较高。运气好的话详细信息全部会有。
更重要的有两点。一当然是这属于公开数据,相对安全。二是有了userId,可以通过课程/讨论/关注与粉丝,定位到该用户的同学和老师,再按照这些人的课程/讨论/关注与粉丝定位更多人。
如果该用户的用户名为敏感信息,则相关用户的用户名很有可能都是同一格式。换言之,这种方法提供的不是一个个单独的数据,而是一个个相互联系的人。
转载请注明出处 xyzmpv

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值