终于写出了第一个Python小程序,批量下载单页pdf

2012-08-14 16:09:34 +08:00
 ouankou
前几天找本很老的书,纸质书只有图书馆有,电子版要么上淘宝买要么到论坛上灌水刷金币买。好不容易找到一个网站可以在线看,但只能单页保存,GF帮忙点了好久才下了几十页。于是就想试着写个脚本批量下载。
一个高手看起来巨简单的的程序,我在官网上看了N久的库文献加上N多google代码片段,断断续续写了3天才出来,不过总算稍微入点门了⋯⋯
代码如下,看那一堆注释就知道每一步我都要调试几遍才能过去。最后组合单页pdf,去水印本来也想直接完成的,但mac终端下没有现成的程序,准备手动用Acrobat完成了。
因为我没有看几页《A byte of Python》就开始写了,只是想完成需求就好了,所以写得肯定有好多不正规的地方。请大家帮忙指点一下,哪些地方可以改进或是写得更正规一点?
谢谢啦!


#下载西山电子书
import urllib.request
import re
import os
#循环 次数=书页数
for i in range(1, 231):
#get pdf所在网页
fileHandle = urllib.request.urlopen('http://www.bjmem.com/bjm/bjwh/include/showpdf.jsp?bookId=5259&xuhao=' + str(i) + '&pdfuri=/bjm/bjwh/zrdl/200711/')
#打开网页文件搜索SRC一行,读取pdf网址
pagesrc = str(fileHandle.read(), 'utf-8')
fileHandle.close()
# print (pagesrc)
posbegin = re.search('PARAM NAME="SRC" VALUE=', pagesrc)
# print (posbegin.end())
#original = re.compile(pagesrc)
#print (original)
posend = re.search('.pdf', pagesrc)
# print (posend.end())
# print (pagesrc[posbegin.end():posend.end()])
pdfaddress = 'http://www.bjmem.com/' + pagesrc[posbegin.end():posend.end()]
# print (pdfaddress)
#wget下载pdf,并按页码命名
cmd = 'wget -c ' + pdfaddress + ' -O bjxs' + str(i) + '.pdf'
os.system (cmd)
#print (url)
#用工具组合pdf为一个文件
7264 次点击
所在节点    Python
12 条回复
TheSe7en
2012-08-14 16:36:07 +08:00
贊一個!
neildd
2012-08-14 16:39:02 +08:00
其实文件名是流水号的话,用wget一个命令就完成了,根本用不着写脚本。
ouankou
2012-08-14 16:43:02 +08:00
@neildd 问题就是网页参数是流水号,而且从-6开始,变态⋯⋯。pdf地址内尾部是随机的6位数字,至少我看不出什么规律,所以就手动提取了。

类似这样的,最后六位数字每页都不同。
<PARAM NAME="SRC" VALUE=/bjm/bjwh/zrdl/200711/P020071117503730461643.pdf>
zern
2012-08-14 17:05:30 +08:00
欢迎LZ来我的豆瓣pdf小站寻找古本PDF哈哈

http://site.douban.com/171180/

介绍分享珍稀古本或优质PDF文件
--
huihen
2012-08-14 20:06:12 +08:00
楼上不错
armoni
2012-08-14 20:16:34 +08:00
curl提取pdf地址,然后wget,这事儿还是shell好使
twor2
2012-08-14 21:13:46 +08:00
赞一个
zhaobei92
2012-08-17 18:30:35 +08:00
pagesrc = str(fileHandle.read(), 'utf-8') 这句好像不能实现吧。
ouankou
2012-08-17 18:34:22 +08:00
@zhaobei92 是的,那个编码选错了,这里贴的代码已经改了不少。这句改成了:
pagesrc = str(fileHandle.read(), 'euc-jp', 'ignore')

请参见:
https://github.com/ouankou/Caribrenamer
ouankou
2012-08-17 18:35:59 +08:00
@zhaobei92 哦⋯⋯不好意思,回复错了。

这个脚本可以正常实现啊,已经下完整本书了。
zhaobei92
2012-08-17 18:40:06 +08:00
@ouankou 难道你用的是python3.0 .我用python2.7提示str里只能给一个参数啊。
ouankou
2012-08-17 18:49:34 +08:00
@zhaobei92 哦,是的,不好意思,没有说明。我确实用的Python3,可能有些语句用法不完全一样。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/45109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX