终于写出了第一个Python小程序,批量下载单页pdf - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
ouankou
V2EX    Python

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

  •  
  •   ouankou
    ouankou 2012-08-14 16:09:34 +08:00 7924 次点击
    这是一个创建于 4810 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前几天找本很老的书,纸质书只有图书馆有,电子版要么上淘宝买要么到论坛上灌水刷金币买。好不容易找到一个网站可以在线看,但只能单页保存,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为一个文件
    12 条回复    1970-01-01 08:00:00 +08:00
    TheSe7en
        1
    TheSe7en  
       2012-08-14 16:36:07 +08:00
    一!
    neildd
        2
    neildd  
       2012-08-14 16:39:02 +08:00
    其实文件名是流水号的话,用wget一个命令就完成了,根本用不着写脚本。
        3
    ouankou  
    OP
       2012-08-14 16:43:02 +08:00
    @neildd 问题就是网页参数是流水号,而且从-6开始,变态。pdf地址内尾部是随机的6位数字,至少我看不出什么规律,所以就手动提取了。

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

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

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

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

    这个脚本可以正常实现啊,已经下完整本书了。
    zhaobei92
        11
    zhaobei92  
       2012-08-17 18:40:06 +08:00
    @ouankou 难道你用的是python3.0 .我用python2.7提示str里只能给一个参数啊。
    ouankou
        12
    ouankou  
    OP
       2012-08-17 18:49:34 +08:00
    @zhaobei92 哦,是的,不好意思,没有说明。我确实用的Python3,可能有些语句用法不完全一样。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3936 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 04:12 PVG 12:12 LAX 21:12 JFK 00:12
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86