[Python][爬虫]斯坦福课程资料获取
本帖最后由 ZeroWong1919 于 2021-7-6 20:36 编辑事情是这样的,上周末我发现了一个不错的网站:Stanford计算机专业课程:https://docs.google.com/spreadsheets/d/1zfw8nPvJeewxcFUBpKUKmAVE8PjnJI7H0CKimdQXxr0/htmlview
里面涵盖了Stanford本科计算机专业基础课程乃至一些高端(至少我不知道是什么的东西),众所周知,Stanford计算机专业不是盖的。
本着仓鼠精神,是绝对要把这些资料搬走的,又懒得一个一个下载,花了一个周末简单了解了一下requests库和Beautiful库,不得不说,我虽然了解过python但是没有敲过任何py程序,在啃文档的时候还是吃了不少亏。
还好谷歌云盘(看域名像)没有做什么防护,很轻松的拿下课程号CS356的Topics in Computer and Network Security一门课程的全部pdf资料。
对于这些资料,如果你英语不好(三分之一以上单词不认识)的话,请酌情观看。
下面是代码,想要直接看资料的可以直接去首行的链接。
# 爬!
# 获取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站点学习一下,了解一下计算机专业,相关专业已经录取了的也可以查一下本校培养计划,按照课程先看一下外国名校的内容。 报错
Traceback (most recent call last):
File "C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/爬计算机pdf.py", line 77, in <module>
main()
File "C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/爬计算机pdf.py", line 14, in main
download(new_list)
File "C:/Users/Administrator/AppData/Local/Programs/Python/Python36-32/爬计算机pdf.py", line 72, in download
with open(filepath,'wb') as book:
OSError: Invalid argument: 'E:\x01/HowtoReadPaper.pdf' goodxjp82 发表于 2021-7-8 14:52
现在发现,普通小市民也得学学这类爬虫,要不然又得脱节社会咯
python上手还是挺快的,比其他语言简单的不是一星半点。不过之前没接触过编程就学习python的话可能会把人养懒了不想学习其他语言了啊,哈哈哈,真的是太方便了。不但可以爬虫还可以自动化办公,批量操作Excel,word等等。对普通人来讲都是很实用的。 多谢分享!马上试试! 还有一点,BeautifulSoup提取出链接的列表之后不知道怎么去嵌套,所以有两个地方连续用了两个for in,实际上第一个基本等于没用(但是没有还不行),我实在是不知道怎么用别的方法处理了,欢迎大佬们提出意见。 学习中~~~~~ 学习中~~~~~受教 谢谢楼主很好的学习资料 lmaxys 发表于 2021-7-6 21:11
谢谢楼主很好的学习资料
什么学习资料!这是编程语言区,乱说的话,一会儿我就被管理抓起来了。{:301_977:} 多谢分享,谢谢您的资料 多谢楼主分享 谢谢分享,学习了,斯坦福的课程不错。