用python爬虫批量下载pdf

来源:互联网 发布:淘宝店铺装修模板复制 编辑:程序博客网 时间:2024/05/16 14:05

今天遇到一个任务,给一个excel文件,里面有500多个pdf文件的下载链接,需要把这些文件全部下载下来。我知道用python爬虫可以批量下载,不过之前没有接触过。今天下午找了下资料,终于成功搞定,免去了手动下载的烦恼。

我参考了以下资料,这对我很有帮助:
1、廖雪峰python教程
2、用Python 爬虫批量下载PDF文档 http://blog.csdn.net/u012705410/article/details/47708031
3、用Python 爬虫爬取贴吧图片 http://blog.csdn.net/u012705410/article/details/47685417
4、Python爬虫学习系列教程 http://cuiqingcai.com/1052.html

由于我搭建的python版本是3.5,我学习了上面列举的参考文献2中的代码,这里的版本为2.7,有些语法已经不适用了。我修正了部分语法,如下:

# coding = UTF-8# 爬取李东风PDF文档,网址:http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/index.htmimport urllib.requestimport reimport os# open the url and readdef getHtml(url):    page = urllib.request.urlopen(url)    html = page.read()    page.close()    return html# compile the regular expressions and find# all stuff we needdef getUrl(html):    reg = r'(?:href|HREF)="?((?:http://)?.+?\.pdf)'    url_re = re.compile(reg)    url_lst = url_re.findall(html.decode('gb2312'))    return(url_lst)def getFile(url):    file_name = url.split('/')[-1]    u = urllib.request.urlopen(url)    f = open(file_name, 'wb')    block_sz = 8192    while True:        buffer = u.read(block_sz)        if not buffer:            break        f.write(buffer)    f.close()    print ("Sucessful to download" + " " + file_name)root_url = 'http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/'raw_url = 'http://www.math.pku.edu.cn/teachers/lidf/docs/textrick/index.htm'html = getHtml(raw_url)url_lst = getUrl(html)os.mkdir('ldf_download')os.chdir(os.path.join(os.getcwd(), 'ldf_download'))for url in url_lst[:]:    url = root_url + url    getFile(url)

上面这个例子是个很好的模板。当然,上面的还不适用于我的情况,我的做法是:先把地址写到了html文件中,然后对正则匹配部分做了些修改,我需要匹配的地址都是这样的,http://pm.zjsti.gov.cn/tempublicfiles/G176200001/G176200001.pdf。改进后的代码如下:

# coding = UTF-8# 爬取自己编写的html链接中的PDF文档,网址:file:///E:/ZjuTH/Documents/pythonCode/pythontest.htmlimport urllib.requestimport reimport os# open the url and readdef getHtml(url):    page = urllib.request.urlopen(url)    html = page.read()    page.close()    return html# compile the regular expressions and find# all stuff we needdef getUrl(html):    reg = r'([A-Z]\d+)' #匹配了G176200001    url_re = re.compile(reg)    url_lst = url_re.findall(html.decode('UTF-8')) #返回匹配的数组    return(url_lst)def getFile(url):    file_name = url.split('/')[-1]    u = urllib.request.urlopen(url)    f = open(file_name, 'wb')    block_sz = 8192    while True:        buffer = u.read(block_sz)        if not buffer:            break        f.write(buffer)    f.close()    print ("Sucessful to download" + " " + file_name)root_url = 'http://pm.zjsti.gov.cn/tempublicfiles/'  #下载地址中相同的部分raw_url = 'file:///E:/ZjuTH/Documents/pythonCode/pythontest.html'html = getHtml(raw_url)url_lst = getUrl(html)os.mkdir('pdf_download')os.chdir(os.path.join(os.getcwd(), 'pdf_download'))for url in url_lst[:]:    url = root_url + url+'/'+url+'.pdf'  #形成完整的下载地址    getFile(url)

这就轻松搞定啦。

原创粉丝点击