2012-03-07 11 views
0

これはこの質問のフォローアップです:How do I parse every html file in a directory for images? 本質的に、私はそれぞれが同じディレクトリに別々に保存したい画像を含むhtmlファイルのディレクトリを持っています。ディレクトリ内の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つを含む、それまでの全体の出力を、明記してください。 –

+0

私はそれを追加しました。それが壊れる前に唯一の印刷物があった。 –

答えて

1

コードはBeautifulSoup.TagオブジェクトをImage.openに渡していますが、Image.openはパスまたはファイルオブジェクトが必要です。ただし、そのパスは、おそらくHTMLファイルのから始まる相対パスであるHTMLファイルに記述された同じパスです

im = Image.open(image["src"]) 

:あなたはimage["src"]で、画像への相対パスを取得することができますので、コードは次のようになりますディレクトリ。もしそうなら、rootimage["src"]に参加すると、各画像の絶対パスを取得します:「:%s画像」%のimage`ビット

im = Image.open(os.path.join(root, image["src"])) 
0

Image.open()リモートファイルを処理できないことがあります。 urllibまたはurllib2モジュールを使用して画像をダウンロードしてください。

+0

htmlファイルは、インターネットから直接アクセスするのではなく、ハードドライブのディレクトリにあります。 –

+0

次に、ファイルURIを処理できない可能性があります。まずリンクをローカルパスに変換してみてください:http://stackoverflow.com/questions/5977576/is-there-a-convenient-way-to-map-a-file -uri-to-os-path – Dikei

+0

ファイルURIとは何ですか、変換する必要のあるリンクは何ですか? –

関連する問題