利用python读取Excel中的url链接,读取url网页内容,下载里面的pdf文件到本地。
Excel原始内容如下:
第三列的数据即url链接,是Hyperlink函数,由于python读取该Excel内容,第三列显示的是如上的文字,而不是文字指向的链接,所以我们需要对Excel做初步处理。
把hyperlink函数内的链接地址提取出来的方法:将含有hyperlink函数的超链接那一列,利用菜单栏处的数据->分列,根据“,”进行分列,然后利用替换将不要的字符全部去掉,这样就可以得到链接了。
如果文字上的超链接不是用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)