用爬虫批量下载课程主页的课件

问题描述

最近在看 Meshfree 拟合函数的方法, 教材 需要用到的 Matlab 代码和数据有在课程主页上. 要跑每个代码需要先下载到本地. 简单的方法, 可以每个文件单独点击下载. 但是我懒得这样做(而且想练习一下之前看的爬虫), 所以写了程序来批量下载所有数据文件.

所以问题是, 已知一个网页, 网页上有链接指向想要下载的文件, 需要过滤得到需要文件的网址, 下载保存到本地.

问题解决

使用 Python3.6

from urllib.request import urlretrieve
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

downloadDirectory = '/Users/Username/Documents/meshfree/matlab-code/'
baseUrl = 'http://www.math.iit.edu/~fass/590/handouts/'

# open url and filter it to get a list of file names to be downloaded
html = urlopen(baseUrl)
bs = BeautifulSoup(html, 'html.parser')
downloadList = bs.findAll("a", href=re.compile("^[A-Za-z0-9_+]+\.[a-z+]+$"))

# download files
for download in downloadList:
    path = download.attrs['href']
    fileUrl = baseUrl + path
    if fileUrl is not None:
        print(fileUrl)
        urlretrieve(fileUrl, downloadDirectory+path)

  • urlretrieve 用于下载文件
  • urlopen 用于打开 url 网址, 获取 HTML 文件
  • BeautifulSoup 用于解析 HTML 文件
  • re 利用正则表达式从 HTML 文件中获取想要的信息
  • downloadDirectory: 数据文件保存到本地的地址, 我的电脑上的一个路径.
  • baseUrl: 目标网址
  • findAll: 从 HTML 文件中找到所有符合条件的网址
  • re.compile: 使用正则表达式过滤
  • downloadList: 过滤得到的待下载文件列表

最后使用 urlretrieve 函数逐一下载 待下载文件列表中的文件.

参考

Web Scraping with Python

Related