为什么.png文件不能用Python脚本下载,而它适用于其他图像类型?

2024-04-25 14:32:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试搜索网页的源代码,并使用Python从中下载各种文件。这个脚本在源代码中搜索.jpg文件并按预期全部下载。但是,在修改脚本时(将“.jpg”更改为“.png”,如下所示),我得到错误:

Traceback (most recent call last):
File "img.py", line 19, in <module> urllib.urlretrieve(images[z], "image"+str(z)+".png")
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 91, in urlretrieve
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 237, in retrieve
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 205, in open
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 461, in open_file
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 475, in open_local_file
IOError: [Errno 2] No such file or directory: '/images/adapt-icon-search.png?1342791397'

下面是我使用的脚本:

^{pr2}$

如果能深入了解为什么这个脚本不能用于.png文件,我们将不胜感激。提前致谢。在

更新:以下是我要搜索的源的示例:

<span rel="tipsy" title="This shot has rebounds." class="rebound-mark has-rebounds">1</span>
                </a>            
        </div>
    </div>
    <h2>
        <a href="/Dash" class="url" rel="contact" title="Dash"><img alt="Avatar-new" class="photo fn" src="http://dribbble.s3.amazonaws.com/users/107759/avatars/original/avatar-new.png?1339961321" /> Dash</a>
        <a href="/account/pro" class="badge-link">
    <span class="badge badge-pro">Pro</span>
</a>
    </h2>

Tags: inpy脚本pngliblinelibraryframework
1条回答
网友
1楼 · 发布于 2024-04-25 14:32:58

你得到的错误是:

IOError: [Errno 2] No such file or directory: '/images/adapt-icon-search.png?1342791397'

所发生的是,您正在抓取的网页有一些PNG引用,这些引用不包括URL中包含的域名。当您试图在while循环中获取它们时,它会失败,因为您只提供远程主机上的位置:/images/adapt-icon-search.png?1342791397。在

您需要扩展您的代码来检测这些类型的url(这是完全合法的,事实上,非常常见)。对于您在这里点击的类型,您只需要在匹配的URL前面加上服务器的主机名(例如http://dribble.com/)。在

您可能还需要处理相对url,这也排除了主机名,但是开始时没有/字符。如果有上一页的路径的话,需要在上面加上一页的路径。因此,如果您正在抓取http://dribble.com/foo/bar.html,则需要在相对URL前面加上http://dribble.com/foo/。在

很可能有一个库可以为您自动处理非绝对url,可能作为web抓取过程的一部分。恐怕我不太了解网络抓取的第一手资料,但也许其他人可以在评论中推荐一个。在

相关问题 更多 >

    热门问题