含有章节索引的 *PUG 文章通用模板 ::-- ["hoxide"] [DateTime(2006-04-29T09:12:35Z)] TableOfContents

Include(CPUGnav)

1. 导出网易博客相册的图片地址

简述 网易blog的相册比原来的网易相册复杂许多,一层一层的javascript分析头都大了,所以就用pywin32调用IE来干这个活了。

1.1. 代码

# coding:cp936

import win32com.client
import time
import re
import sys

class Album163blog:
    def __init__(self, name, nextword=u'下一页'):
        self.name = name
        self.nextword = nextword
        self.ie = win32com.client.Dispatch('InternetExplorer.Application')

    def __index__(self):
        return 'http://%s.blog.163.com/album/' % self.name

    def __indexloaded__(self):
        return any([True for x in self.ie.Document.links if x.href.find('prev')])

    def visible(self):
        self.ie.Visible = True
        return self

    def connect(self):
        self.ie.Navigate2(self.__index__())
        time.sleep(5)
        while self.ie.Busy and self.ie.ReadyState != 4: #READYSTATE_COMPLETE
            time.sleep(1)
        while not self.__indexloaded__():
            time.sleep(1)
        return self

    def next(self):
        link = ([x for x in self.ie.Document.links if x.innerText.find(self.nextword) >= 0])[0]
        link.click()
        time.sleep(2)
        return self

    def imgs_href(self):
        def urlconv(url):
            return re.sub(r'prevPhoto.do\?', 'prevPhDownload.do?host=%s&' % self.name, url)
        return [urlconv(x.href) for x in self.ie.Document.links if x.href.find(u'prevPhoto') >=0]


if __name__ == '__main__':
    name = sys.argv[1]

    imgurls = []
    ab = Album163blog(name, u'下一页')
    ab.visible().connect()

    while True:
        links = ab.imgs_href()
        if len(links) == 0:
            break
        print '\n'.join(links)
        ab.next()

1.2. 提醒

如果地址倒出不完全的话是网速较慢引起的,增加程序中翻页函数(next)的sleep时间即可。

1.3. 反馈