找回密码
  注册[Register]
查看: 306|回复: 5

[python] [爬虫]斯坦福课程资料获取

[复制链接]
发表于 2021-7-7 11:12 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

Stanford计算机专业课程:https://docs.google.com/spreadsheets/d/1zfw8nPvJeewxcFUBpKUKmAVE8PjnJI7H0CKimdQXxr0/htmlview
里面涵盖了Stanford本科计算机专业基础课程乃至一些高端(至少我不知道是什么的东西),众所周知,Stanford计算机专业不是盖的。
本着仓鼠精神,是绝对要把这些资料搬走的,又懒得一个一个下载,花了一个周末简单了解了一下requests库和Beautiful库,不得不说,我虽然了解过python但是没有敲过任何py程序,在啃文档的时候还是吃了不少亏。
还好谷歌云盘(看域名像)没有做什么防护,很轻松的拿下课程号CS356的Topics in Computer and Network Security一门课程的全部pdf资料。
对于这些资料,如果你英语不好(三分之一以上单词不认识)的话,请酌情观看。
下面是代码,想要直接看资料的可以直接去首行的链接。
[Python] 纯文本查看 复制代码
# 爬!
# 获取https://docs.google.com/spreadsheets/d/1zfw8nPvJeewxcFUBpKUKmAVE8PjnJI7H0CKimdQXxr0/htmlview下PDF文档
# 获取https://cs356.stanford.edu/ CS356——计算机网络安全主题下所有pdf
 
from requests import get 
from requests.exceptions import ReadTimeout
from bs4 import BeautifulSoup
 
def main():
    url = 'https://cs356.stanford.edu/'
    html = request_stanford(url)
    url_list = parse(html)
    new_list = new(url_list)
    download(new_list)
    return 0
 
 
# 获取网站源代码
def request_stanford(url):
    try:
        header = {
            'user-agent': 'Mozilla/5.0'
                        '(Windows NT 10.0; Win64; x64)'
                        'AppleWebKit/537.36 (KHTML, like Gecko)'
                        'Chrome/91.0.4472.114 Safari/537.36 OPR/77.0.4054.172'
        }
        response = get(url, headers = header)
     
    except ReadTimeout as e:
        print(e)
    return response.text
 
# 调用BeautifulSoup get_url_list
def parse(html):
    soup = BeautifulSoup(html, features = 'lxml')
    s = soup.find_all('a')
    url_list = []
    for link in soup.find_all('a'):
        url = link.get('href')
        url_list.append(url)
    url_list = list(filter(lambda url_str: 'pdf' in url_str, url_list))
    return url_list
 
 
# 补全URL
def new(*url_list):
    new_list = []
    for urls in url_list:
        for url in urls:
            if 'http' in url:
                new_list.append(url)
            else:
                url = 'https://cs356.stanford.edu/' + url
                new_list.append(url)
    return new_list
 
 
 
 
# build_folder download
def download(*urls):
    folder_path = 'E:\Stanford\cs256_Topics in Computer and Network Security'
    i = 0
    for url in urls:
        for u in url:
            print('正在下载:{}'.format(u))
            filename = str(u).split('/')[-1]
            filename = '[' + str(i) + ']' + filename
            i = i + 1
            filepath = folder_path + '/' + filename
            pdf = get(u)
            with open(filepath,'wb') as book:
                book.write(pdf.content)
    return 0
 
if __name__ == '__main__':
    main()



思路挺简单的,
<1>分析https://cs356.stanford.edu/下HTML。
<2>BeautifulSoup拿到HTML再直接提取所有超链接,找出herf内容,筛选出所有后缀为.pdf的链接。
<3>补全URL。
<4>下载。这里并没有用多线程,因为这个界面数据量并不大,而且看着一条一条不断下载也挺爽的(好吧,其实我是还没学到多线程)。
缺点:首先是多线程,其次是没有用到报错分析。这个是国外站点,访问并不稳定,如果不通可以多试两次。
后面是爬到的资料和源码,(注意爬虫用到requests和BeautifulSoup(集成在bs4中了))想要试试源码需要先安装python环境并配置path,最后再pip install 一下。
https://cloud.189.cn/t/JfUrey6J36z2 (访问码:rko6)
建议高考结束的考生可以先去Stanford站点学习一下,了解一下计算机专业,相关专业已经录取了的也可以查一下本校培养计划,按照课程先看一下外国名校的内容。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2021-7-7 13:42 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-7-7 13:48 | 显示全部楼层

支持楼主,谢谢分享。
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-7-7 15:00 来自手机 | 显示全部楼层
感谢大佬分享,大佬666666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-7-7 15:58 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2021-7-7 16:21 | 显示全部楼层
牛一批的了的
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-6 20:10 , Processed in 0.035570 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表