python 多进程 批量下载 pdf 文件

背景

由于最近正在学习斯坦福大学的编译原理网课,所以需要使用其配套的pdf课件。
根据b站热心网友提供的课件链接http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=Compilers&doc=docs/slides.html
可以看到需要下载的资源实在是太多了,手动点开下载要到何时。。。(之前学习李宏毅的线性代数,就深受这种龟速、原始人下载文件的方法困扰过)。因此,重拾并且借此机会深入学习爬虫、进程操作的技巧。

正题(说一下大概的思路)

  1. 爬取一个网页之前,先摸清其网页构架。这个课程网页极其简单(似乎外面大学CS类的课程网页都很简洁。。。)没有复杂的DOM,所以这里解析html的解析部分应该算是最基础的,如果大家要尝试其他复杂网页的爬取,可能会需要正则表达式等更高级的技巧。可以参考https://germey.gitbooks.io/python3webspider/
  2. 刚开始,我只是使用了简单的串行爬取,结果速度真的是一言难尽。所以,决定尝试使用多进程的方法。但是,起初我脑子里一直想着多线程。这是由于之前刚开始接触爬虫的时候,有被要求学多线程,但是感觉这里使用多线程,比较复杂,总觉得哪里不大对劲。。。最后在廖雪峰的教程上发现,多进程更符合自己的想法,所以就学习使用进程池的方法,下载文件。
  3. 由于这个网站没有反爬机制,所以就很顺利地实现多进程下载文件。如果碰到有反爬机制(一般来说,是爬取结果出现乱码或者返回值为空),可以参考一下这个教程https://heli06.github.io/category/bilibili%E5%A4%9A%E8%BF%9B%E7%A8%8B%E7%88%AC%E8%99%AB/

代码(大体思路,创造4个进程 ,分别对应一个文件的下载)

from bs4 import BeautifulSoup
import requests
import urllib.request
from multiprocessing import pool
import os
import time
#每个子进程执行地函数,即下载pdf文件
def run_proc(url,name):
    try:
        start=time.time()
        #在urlretrieve卡了一会,主要是没有明白filename参数的意思。
        #千万不可以只写路径名,这里要求给出下载后的文件所存放的路径和其名字&
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值