(9)Python爬虫——下载PDF

利用python读取Excel中的url链接,读取url网页内容,下载里面的pdf文件到本地。
Excel原始内容如下:
(9)Python爬虫——下载PDF_第1张图片

第三列的数据即url链接,是Hyperlink函数,由于python读取该Excel内容,第三列显示的是如上的文字,而不是文字指向的链接,所以我们需要对Excel做初步处理。
把hyperlink函数内的链接地址提取出来的方法:将含有hyperlink函数的超链接那一列,利用菜单栏处的数据->分列,根据“,”进行分列,然后利用替换将不要的字符全部去掉,这样就可以得到链接了。
(9)Python爬虫——下载PDF_第2张图片

如果文字上的超链接不是用hyperlink函数,想提取文字上的超链接,可以利用Excel的宏,按Alt+F11进行宏编辑界面,点击菜单栏上的插入->模块,把下面的代码复制粘贴,按F5即可运行,文字上的超链接将被提取放在该文字的后一列。

Sub ExtractHL()
    Dim HL As Hyperlink
    For Each HL In ActiveSheet.Hyperlinks
        HL.Range.Offset(0, 1).Value = HL.Address
    Next
End Sub

Python代码如下:

#!/usr/bin/python
#-*- coding: utf-8 -*-
import xlrd #必须事先引入读excel的包xlrd
import urllib
import urllib2
import re
filePath=u"E:/工作/公司公告-2014.xls"#excel所在路径
baseUrl='http://snap.windin.com/ns/'#网页网址首部
tarPath="f:/pdf/2014/"#保存路径
try:
    workbook = xlrd.open_workbook(filePath)#打开Excel
    sheet = workbook.sheet_by_index(0)#第一张sheet表
    nrows = sheet.nrows #总行数
    print nrows
    #遍历对应列的每一行数据
    for rownum in range(1,2):#第一行是列名,所以从1开始即第二行读起
        #print rownum#显示当前是第几行
        code=sheet.cell(rownum,1).value#第二列的数据
        codeName=code.split(".")[0]#得到证券代码
        #print codeName
        title=sheet.cell(rownum,2).value#第三列的数据
        title=title.replace(":","_")
        title=title.replace("*","")#替换不符合文件命名的字符
        link=sheet.cell(rownum,3).value#网址链接
        #print link
        fileName=tarPath+codeName+'_'+title+'_'+str(rownum)+'.pdf'#保存的文件名
        #print fileName
        #爬虫:1、获取网页源代码,2、匹配正则表达式,找到pdf的下载链接,3、下载pdf到保存路径
        request = urllib2.Request(link)
        response = urllib2.urlopen(request)
        html=response.read()#读取网页源代码
        findLink=re.compile(r'getatt\.php\?id=\d*&att_id=\d*')#链接的正则匹配
        links=re.findall(findLink,html)
        if(len(links)==0):
            print "Failed:"+str(rownum)
        else:
            for l in links:
                #print l
                url=baseUrl+l#构造pdf的链接
                urllib.urlretrieve(url,fileName)
                #print "Succeed:"+str(rownum)
                print fileName
except Exception,e:
    print str(e)

你可能感兴趣的:(爬虫)