dakkor
如何实现用Python将一个网页“本地化”?

我手上有一些HTML网页,只有HTML文件,没有图片,我想把图片下载下来保存到本地然后更改HTML里面的图片文件使其指向本地文件。现在我的初步想法是用BeautifulSoup分析然后下载再把元素写回去。不知道Python里有没有现成的库。或者如果有什么其他的工具能够更简单地实现这个目的就更好了

dakkor
现在问题是不支持中文文件名
展开Biu

现在问题是不支持中文文件名……

[查看全文]
dakkor
本帖最后由
展开Biu

本帖最后由 dakkor 于 2012-8-24 20:35 编辑

总之花了一点时间写了个原型,代码很丑陋,没有做异常抛出处理,估计bug也很多,就先将就着吧。调用了wget来下载,懒得再写urllib2的文件代码了,反正wget也很稳健。

[mw_shl_code=python,true]import os

import sys

from BeautifulSoup import BeautifulSoup

import urllib2

import re

Fullpath = sys.argv[1]

if os.path.isfile(Fullpath) == 0:

sys.exit()

filePath = os.path.dirname(Fullpath)

fileName = os.path.splitext(Fullpath)[0]

print fileName

fp = open(Fullpath,'r')

soup = BeautifulSoup(fp.read())

Links = soup.findAll('img')

downIMGpath = os.path.join(filePath,fileName)

print downIMGpath

if os.path.exists(downIMGpath) == 0:

os.mkdir(downIMGpath)

i = 0

for imgLink in Links:

imgsubName = re.sub('http://.+/.+\.','.',imgLink['src'])

cmdLine = 'wget ' + imgLink['src'] + ' -nv -t 10 -c -Y on -O ' + downIMGpath + '\\' + str(i) + imgsubName

os.system(cmdLine)

imgLink['src'] = downIMGpath + '/' + str(i) + imgsubName

i = i+1

fp.close()

fp = open(Fullpath,'w+')

fp.write(soup.prettify())

fp.close

[/mw_shl_code]

[查看全文]
dakkor
现在这个思路最大的问题是对于某些用
展开Biu

现在这个思路最大的问题是对于某些用JS或者CSS实现的东西搞不定。因为我是通过搜索IMG标签来实现的

[查看全文]
dakkor
我从前曾经见过一个相当暴力的方法
展开Biu

我从前曾经见过一个相当暴力的方法:调用IE的COM接口然后从临时文件目录提取,但是我觉得这样实现太奇怪了

[查看全文]
nongeek
稍微看了下
展开Biu

稍微看了下BeautifulSoup,好像挺不错的样子,以前用python做过一点网页的东西都是直接用regex...

就照lz说的方法就感觉挺简单的了,现成的工具怕是没有...

[查看全文]
轻舟过
就是下载图片什么的
展开Biu

就是下载图片什么的?

用自带的urllib2就可以了吧

[查看全文]
不能吃的鸭子