2016-05-05 3 views
1
url = 'http://www.wired.com/category/science/' 
    req = urllib.request.Request(url, data=None, 
      headers={ 
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
    } 
    ) 
    f = urllib.request.urlopen(req) 
    html = f.read() 
    from bs4 import BeautifulSoup 
    soup = BeautifulSoup(html, 'html.parser') 


    title_tag = soup.title 

    for link in soup.find_all('img'): 

     alt_data =link.get('alt') 

     if not alt_data: 
      alt_data= 'no alt text' 

     URL=link.get('src') 
     import uuid 
     random_value = uuid.uuid1() 
     IMAGE = URL.rsplit('/', 1)[1] 

     content =urllib.request.urlretrieve(url, IMAGE) 
     from django.core.files import File 

     cntent_typ=ContentType.objects.get(name='image') 
     obj = Content.objects.create(content_type=cntent_typ, url=url, title=alt_data, text=alt_data, image=File(open(content[0]))) 
     obj.save() 

にイメージファイルを保存読み込むことができませんを示しています。開始:JPEG画像ファイル(未JPEGファイルを解釈する画像xcxxxcx.jpg エラーをロードできませんでした。 0x3c 0x21) どうすればこの問題を解決できますか?は、Python/Djangoの

+0

あなたはおそらく 'がurllib.request.urlretrieve代わりに' urllib.request.urlretrieve(URL、IMAGE)の(urlparse.urljoin(URL、URL)、IMAGE) ''が必要です。 –

+0

@MuhammadTahir ..Got ..UnicodeDecodeError at/ 'utf-8'コーデックは、位置0のバイト0x89をデコードできません:無効な開始バイト –

答えて

0

以下は、コードの実例です(画像の保存を除いて)。私が変更したのは、私のコメントで言及したもの、すなわちurllib.parse.urljoin(url, URL)を使用していますが、あなたのコメントにあなたが言ったエラーはあなたのURLにいくつかのUnicode文字があったためです。だから、URLを正しくエンコードするためにfrom django.utils.encoding import iri_to_uriを使用しました。

import urllib.request 
from urllib.parse import urljoin 
import uuid 
from django.utils.encoding import iri_to_uri 


url = 'http://www.wired.com/category/science/' 
req = urllib.request.Request(url, data=None, 
    headers={ 
     'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36' 
    } 
) 
f = urllib.request.urlopen(req) 
html = f.read() 
from bs4 import BeautifulSoup 
soup = BeautifulSoup(html, 'html.parser') 


title_tag = soup.title 

for link in soup.find_all('img'): 

    alt_data =link.get('alt') 

    if not alt_data: 
     alt_data= 'no alt text' 

    URL=link.get('src') 
    random_value = uuid.uuid1() 
    IMAGE = URL.rsplit('/', 1)[1] 
    print(urljoin(url, iri_to_uri(URL))) 
    content =urllib.request.urlretrieve(urljoin(url, iri_to_uri(URL)), IMAGE)