Python爬取图片时报soup、url未定义NameError问题排查求助
问题排查与修复方案
报错根因
soup未定义:soup是你在get_all_images函数内部定义的局部变量,作用域仅局限于该函数内部,全局代码中直接调用soup.find_all无法访问到该变量,因此触发NameErrorurl未定义:url是get_all_images的入参,同样属于函数局部作用域的变量,你在全局代码中调用urljoin时没有定义对应的全局url变量,因此触发报错
修复代码
你需要把图片提取、地址拼接的逻辑收敛到get_all_images函数内部,或者调用函数拿到对应返回值后再做后续处理,参考实现如下:
import requests from bs4 import BeautifulSoup as bs from urllib.parse import urljoin from tqdm import tqdm def get_all_images(url): """ 返回指定页面下所有图片的绝对URL """ soup = bs(requests.get(url).content, "html.parser") img_url_list = [] for img in tqdm(soup.find_all("img"), "Extracting images"): img_url = img.attrs.get("src") if not img_url: continue # 拼接为绝对URL img_url = urljoin(url, img_url) img_url_list.append(img_url) return img_url_list # 调用示例 target_page_url = "替换为你要爬取的页面URL" all_image_urls = get_all_images(target_page_url) # 后续可以对all_image_urls做其他处理
内容的提问来源于stack exchange,提问作者Zunaid Aalam
相关产品推荐
相关产品推荐

