python - NameError: 全局名 'buf' 未定义

0 投票
1 回答
1468 浏览
提问于 2025-04-18 02:45

我不知道这个错误是什么意思。关于这个错误或者其他代码的任何建议都非常感谢。

import urllib
import urllib2
import os
import re
from bs4 import BeautifulSoup
def image_scrape():
    url = raw_input("Type url for image scrape: ")
    content = urllib2.urlopen(url).read()
    soup = BeautifulSoup(content)
    name = 0
    for tag in soup.find_all(re.compile("img")):
        path = 'C:\Users\Sorcerer\Downloads'
        name += 1
        filename = name
        file_path = "%s%s" % (path, filename)
        downloaded_image = file(file_path, "wb")
        downloaded_image.write(buf)
        downloaded_image.close()

image_scrape()

1 个回答

2

你在代码中有一行:

downloaded_image.write(buf)

Python解释器在你的代码中没有见过这个变量 buf,所以就报错了。

关于你代码的其他想法:

  • 建议使用 os 模块来处理你这一行的操作:

    file_path = "%s%s" % (path, filename)
    

    可以这样做:

    import os
    path = os.path.normpath('C:\\Users\\Sorcerer\\Downloads')
    file_path = os.path.join(path, name)
    
  • 看起来你是想在页面中找到所有的图片链接,并把它们保存到 file_path 指定的位置。如果图片链接在变量 tag 中,你可以这样做:

    import requests
    r = requests.get(tag, stream=True)
    if r.status_code == 200:
        with open(name, 'wb') as f:
            for chunk in r.iter_content():
                f.write(chunk)
        f.close()
    

撰写回答