使用Python Mechaniz下载图像

2024-05-20 15:47:16 发布

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

我正在尝试编写一个Python脚本来下载一个图像并将其设置为我的墙纸。不幸的是,机械化文档非常糟糕。我的脚本正确地跟踪了链接,但是我很难将图像真正保存到我的计算机上。根据我的研究,.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

Tags: 文档图像browser脚本url墙纸链接计算机
3条回答

不知道为什么还没有找到这个解决方案,但是也可以使用mechanize.Browser.retrieve函数。也许这只适用于较新版本的mechanize,因此没有被提及?

无论如何,如果您想将the answer缩短为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()

还请记住,您可能希望将所有这些都放入像这样的tryexcept块中:

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

你当然要根据自己的需要来调整。也许你想让它在遇到问题时爆炸。这完全取决于你想要实现什么。

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赋值。它是你想象的存在的地方。

您可以通过打开img src的url来获取/下载图像。

image_response = browser.open_novisit(img['src'])

要立即保存文件,只需使用fopen:

with open('image_out.png', 'wb') as f:
    f.write(image_response.read())

相关问题 更多 >