python 下载乌普萨拉大学的图像处理课件(.pdf)(含代码)

笔者下载乌普萨拉大学网站的pdf时,发现如果一个个点开再另存为太机械化了,不如写一个脚本,让其自动下载。
但是在用到urllib.request.urlretrieve下载的时候,报错:件下载不完全错误。而且下载时间巨长。
解决方案1
使用socket模块,设置一个超时时间。
解决方案2
使用urllib.request.urlopen(url),再将其二进制写入想要.pdf文件。这种方法还不错
除此之外,还有很多地方的pdf需要用这种方法下载:
比如上一篇blog提到的
1、cs486计算机视觉课件 课件
2、CS280: Computer Vision 课件
3、CS4670/5670 Lectures, Spring 2016 康奈尔大学计算机视觉课件
4、CSE/EE486 Computer Vision I 宾夕法尼亚州立大学计算机视觉课件
等等这些网站上的课件都有一个特点,都是在tbody 大标签下,所以只需要替换程序中的url文件即可。
代码如下:

# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import re
import os
import urllib
#import socket
#socket.setdefaulttimeout(30) #设置超时时间为30s
def gethtml(url,headers):
    r=requests.get(url,headers=headers)
    return r
def bs4parser(html):
    soup=BeautifulSoup(html,'html.parser')
    return soup
if __name__=="__main__":
    headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586'}
    url=r'http://www.it.uu.se/edu/course/homepage/bild1/ht17'
    r=gethtml(url,headers=headers)
    r.encoding=r.apparent_encoding
    s1=bs4parser(r.text)
    for tr in s1.find('tbody').find_all('tr'):
        for a in tr('a'):
            temp=re.findall('(.pdf)',a['href'])
            if len(temp)!=0:
#                i=1
#                urllib.request.urlretrieve(str('http://www.it.uu.se')+str(a['href']),r'C:\Users\Y\Desktop\s2\%g.pdf'%i)
                #urlib.request.urlretrieve 会造成文件下载不完全错误,解决方法用socket模块
                #urllib.request.urlopen 要好很多
                u = urllib.request.urlopen(str('http://www.it.uu.se')+str(a['href']))
                filename=os.path.split(str(a['href']))[-1]
                f=open(r'C:\Users\Y\Desktop\s1\%s'%filename,'wb')
                block_sz = 8192
                while True:
                    buffer = u.read(block_sz)
                    if not buffer:
                        break
                    f.write(buffer)
                f.close()
                print(str('http://www.it.uu.se')+str(a['href'])+":"+"完成")
#                i+=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值