使用Python Mechanize下载图片
我正在尝试写一个Python脚本来下载一张图片,并把它设置为我的桌面壁纸。不幸的是,Mechanize的文档写得很糟糕。我的脚本能够正确地跟随链接,但我在把图片保存到电脑上时遇到了困难。根据我的研究,.retrieve()这个方法应该可以完成这个任务,但我该怎么指定文件下载到哪个路径呢?以下是我现在的代码...
def followLink(browser, fixedLink):
browser.open(fixedLink)
if browser.find_link(url_regex = r'1600x1200'):
browser.follow_link(url_regex = r'1600x1200')
elif browser.find_link(url_regex = r'1400x1050'):
browser.follow_link(url_regex = r'1400x1050')
elif browser.find_link(url_regex = r'1280x960'):
browser.follow_link(url_regex = r'1280x960')
return
4 个回答
3
你可以通过打开图片的链接来获取或下载这张图片。
image_response = browser.open_novisit(img['src'])
现在要保存这个文件,只需要用 fopen 函数:
with open('image_out.png', 'wb') as f:
f.write(image_response.read())
5
不知道为什么这个解决方案没被提到,但你可以使用 mechanize.Browser.retrieve
这个函数。也许这个方法只在新版的 mechanize
中有效,所以没被提到过?
无论如何,如果你想简化 zhangyangyu 的回答,可以这样做:
import mechanize, os
from BeautifulSoup import BeautifulSoup
browser = mechanize.Browser()
html = browser.open(url)
soup = BeautifulSoup(html)
image_tags = soup.findAll('img')
for image in image_tags:
filename = image['src'].lstrip('http://')
filename = os.path.join(dir, filename.replace('/', '_'))
browser.retrieve(image['src'], filename)
browser.back()
另外,记得把这些代码放进一个 try
except
块里,像这样:
import mechanize, os
from BeautifulSoup import BeautifulSoup
browser = mechanize.Browser()
html = browser.open(url)
soup = BeautifulSoup(html)
image_tags = soup.findAll('img')
for image in image_tags:
filename = image['src'].lstrip('http://')
filename = os.path.join(dir, filename.replace('/', '_'))
try:
browser.retrieve(image['src'], filename)
browser.back()
except (mechanize.HTTPError,mechanize.URLError) as e:
pass
# Use e.code and e.read() with HTTPError
# Use e.reason.args with URLError
当然,你需要根据自己的需求来调整这些代码。也许你希望在遇到问题时程序直接停止。这完全取决于你想要实现的目标。
9
import mechanize, os
from BeautifulSoup import BeautifulSoup
browser = mechanize.Browser()
html = browser.open(url)
soup = BeautifulSoup(html)
image_tags = soup.findAll('img')
for image in image_tags:
filename = image['src'].lstrip('http://')
filename = os.path.join(dir, filename.replace('/', '_'))
data = browser.open(image['src']).read()
browser.back()
save = open(filename, 'wb')
save.write(data)
save.close()
这个方法可以帮助你从一个网页上下载所有的图片。关于解析HTML内容,最好使用BeautifulSoup或者lxml这两个工具。而下载的过程其实就是读取数据,然后把它写入到你电脑上的一个文件里。你需要给dir这个变量赋一个你自己的值,它就是你存放图片的地方。