使用Python Mechanize下载映像

XVi*_*usX 4 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
Run Code Online (Sandbox Code Playgroud)

zha*_*gyu 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()
Run Code Online (Sandbox Code Playgroud)

这可以帮助您从网页下载所有图像.至于解析html,你最好使用BeautifulSoup或lxml.下载只是读取数据然后将其写入本地文件.您应该将自己的值分配给dir.它是图像存在的地方.


0xC*_*22L 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()
Run Code Online (Sandbox Code Playgroud)

还要记住,您可能希望将所有这些放入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
Run Code Online (Sandbox Code Playgroud)

当然,您需要根据自己的需要进行调整.如果遇到问题,也许你希望它能够爆炸.这完全取决于你想要达到的目标.