【问题标题】:Scraping a page for images but files are returned as empty为图像抓取页面,但文件返回为空
【发布时间】:2013-07-27 20:51:14
【问题描述】:

我正在修改 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)

有什么想法吗?

【问题讨论】:

    标签: python parsing scripting web-scraping


    【解决方案1】:

    在你的:

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

    您需要将 parsed 中的一些元素替换为 image["src"] 中的元素

    【讨论】:

    • 你能说得更具体一点吗?
    【解决方案2】:

    使用pyquery 会更容易:

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

    (注意名称的时髦用法,= ['string'] 展开单元素列表)。

    【讨论】:

      【解决方案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"在脚本所在的目录中。 希望这就是你所追求的;如果您遇到任何困难,请告诉我们。

      【讨论】:

        猜你喜欢
        • 2019-07-28
        • 2018-06-26
        • 2016-11-16
        • 2010-10-28
        • 1970-01-01
        • 2021-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多