如何通过Class获取图片的src属性并存储至MongoDB
解决图片src无法保存到MongoDB的问题
你当前的代码通过find()获取到的是BeautifulSoup的Tag对象,而非图片链接字符串,直接存入MongoDB会被序列化为null。只需提取标签的src属性值即可解决问题,具体修改如下:
修改后的代码片段
from urllib.parse import urljoin # 处理相对路径时需导入 cate_list = [ "https://myaeon2go.com/products/category/1208101/fresh-foods", "https://myaeon2go.com/products/category/8630656/ready-to-eat", "https://myaeon2go.com/products/category/6528959/grocery", "https://myaeon2go.com/products/category/6758871/snacks", "https://myaeon2go.com/products/category/8124135/chill-&-frozen", "https://myaeon2go.com/products/category/4995043/beverage", "https://myaeon2go.com/products/category/3405538/household", "https://myaeon2go.com/products/category/493239/baby-&-kids", ] cookies = { "hideLocationOverlay": "true", "selectedShippingState": "Kuala Lumpur", "selectedPostalCode": "56000", } for url in cate_list: result = requests.get(url, cookies=cookies) doc = BeautifulSoup(result.text, "html.parser") # 替换为实际的产品容器选择器(需通过浏览器开发者工具确认) for product in doc.select(".product-container"): # 定位图片标签 img_tag = product.find("img", {"class": "pgJEkulRiYnxQNzO8njV shown"}) # 提取src属性,用get()避免标签不存在时抛出异常 img_src = img_tag.get("src") if img_tag else None # 若src是相对路径,拼接为完整可访问URL if img_src and not img_src.startswith("http"): img_src = urljoin(url, img_src) # 此时img_src为字符串,可直接存入MongoDB # 示例插入操作:collection.insert_one({"image_src": img_src})
关键说明
- 提取属性值:
find()返回的Tag对象需通过.get("src")提取属性值,比直接用["src"]更安全——当图片标签不存在时,get()会返回None而非抛出异常。 - 处理相对路径:部分网站图片src为相对路径,需用
urljoin拼接当前页面URL,生成完整可访问的链接。 - 产品容器选择器:需确保
doc.select(".product-container")中的选择器匹配页面中单个产品的容器标签,可通过浏览器开发者工具查看页面结构获取正确选择器。
内容的提问来源于stack exchange,提问作者Calvin Lee
相关产品推荐
相关产品推荐

