gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:27:05 26 4
gpt4 key购买 nike

我正在尝试搜索网页的源代码,并使用 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'

这是我正在使用的脚本:

import urllib
import urllib2
import re

print "enter url of site (such as 'dribbble.com')"

url = raw_input()
fullurl = "http://"+url

src = urllib2.urlopen(fullurl)
src = src.read()

images = re.findall('src="(.*\.png[^"]*)', src)

z=0
while z < len(images):
urllib.urlretrieve(images[z], "image"+str(z)+".png")
print "done"
z+=1

如能深入了解此脚本为何不适用于 .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>

最佳答案

所以你得到的错误是这样的:

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,这可能是网络抓取过程的一部分。恐怕我对网络抓取的第一手了解不多,但也许其他人可以在评论中提出建议。

关于python - 为什么 .png 文件不能使用 Python 脚本下载,而它适用于其他图像类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com