这是此问题的后续内容:How do I parse every html file in a directory for images? 基本上,我有一个html文件目录,每个文件都包含我想在同一目录中单独保存的图像。
在对程序进行建议的更改后,我仍然收到错误:
Image: theme/pfeil_grau.gif
Traceback (most recent call last):
File "C:\Users\gokalraina\Desktop\modfile.py", line 25, in <module>
im = Image.open(image)
File "C:\Python27\lib\site-packages\PIL\Image.py", line 1956, in open
prefix = fp.read(16)
TypeError: 'NoneType' object is not callable
这是我正在使用的修改后的代码(感谢nightcracker)。
import os, os.path
import Image
from BeautifulSoup import BeautifulSoup as bs
path = 'C:\Users\gokalraina\Desktop\derm images'
for root, dirs, files in os.walk(path):
for f in files:
soup = bs(open(os.path.join(root, f)).read())
for image in soup.findAll("img"):
print "Image: %(src)s" % image
im = Image.open(image)
im.save(path+image["src"], "JPEG")
答案 0 :(得分:1)
代码将BeautifulSoup.Tag
对象传递给Image.open
,但Image.open
期待路径或文件对象。您可以使用image["src"]
获取图像的相对路径,因此代码为:
im = Image.open(image["src"])
但是,该路径与HTML文件中写入的路径相同,这可能是从HTML文件目录开始的相对路径。如果是这样,将root
加入image["src"]
将获得每张图片的绝对路径:
im = Image.open(os.path.join(root, image["src"]))
答案 1 :(得分:0)
Image.open()
可能无法处理远程文件。您最好使用urllib
或urllib2
模块下载图片。