2013-07-27 45 views
0

我正在修改this script刮頁like this書頁圖像。直接從stackoverflow使用腳本,它會正確返回所有圖像,除了我想要的一個圖像。該頁面以空文件的形式返回,其標題如下:img.php?dir = 39d761947ad84e71e51e3c300f7af8ff & file = 1.png。刮圖片的頁面,但文件返回爲空

在我下面的修改版本中,我只是拉着書頁的圖像。

這裏是我的腳本:

from bs4 import BeautifulSoup as bs 
import urlparse 
from urllib2 import urlopen 
from urllib import urlretrieve 
import os 
import sys 

out_folder = '/Users/Craig/Desktop/img' 

def main(url, out_folder): 
    soup = bs(urlopen(url)) 
    parsed = list(urlparse.urlparse(url)) 

    for image in soup.findAll('img', id='page_image'): 
     print "Image: %(src)s" % image 
     filename = image["src"].split("/")[-1] 
     parsed[2] = image["src"] 
     outpath = os.path.join(out_folder, filename) 
     if image["src"].lower().startswith("http"): 
      urlretrieve(image["src"], outpath) 
     else: 
      urlretrieve(urlparse.urlunparse(parsed), outpath) 

def _usage(): 
    print "usage: python dumpimages.py http://example.com [outpath]" 

if __name__ == "__main__": 
    url = sys.argv[-1] 
    if not url.lower().startswith("http"): 
     out_folder = sys.argv[-1] 
     url = sys.argv[-2] 
     if not url.lower().startswith("http"): 
      _usage() 
      sys.exit(-1) 
    main(url, out_folder) 

任何想法?

回答

3

這裏的問題是,你正在使用檢索圖片的網址是:

http://bookre.org/loader/img.php?dir=39d761947ad84e71e51e3c300f7af8ff&file=1.png?file=1077091&pg=1

當你真正希望它是:

http://bookre.org/loader/img.php?dir=39d761947ad84e71e51e3c300f7af8ff&file=1.png

這裏的東西我砍死一起在2分鐘內從您列出的網站下載所需的圖像:

import urllib 
import urllib2 
import urlparse 
from bs4 import BeautifulSoup 

def main(url): 
    html = urllib2.urlopen(url) 
    soup = BeautifulSoup(html.read()) 

    parsed = list(urlparse.urlparse(url)) 

    for image in soup.find_all(id="page_image"): 
     if image["src"].lower().startswith("http"): 
      urllib.urlretrieve(image["src"], "image.png") 
     else: 
      new = (parsed[0], parsed[1], image["src"], "", "", "") 
      urllib.urlretrieve(urlparse.urlunparse(new), "image.png") 


if __name__ == '__main__': 
    main("http://bookre.org/reader?file=1077091&pg=1") 

該腳本將圖像保存爲"image.png",該腳本位於該目錄中。 希望這是您所追求的內容;如果您遇到任何困難,請告知我們。

+0

看起來不錯。謝謝! –

0

在你:

else: 
    urlretrieve(urlparse.urlunparse(parsed), outpath) 

您需要更換一些元素與那些從圖像[ 「SRC」]

+0

你能更具體一點嗎? –

+0

並感謝您的幫助! –

0

解析所以更容易與pyquery

from pyquery import PyQuery as pq 
image, = [img.attrib['src'] for img in pq(url=url)('img#page_image')] 
... 

(請注意名稱的簡單使用,= ['string']來展開單元素列表)。