如何用Beautiful Soup 4获取网页img标签的真实src而非懒加载图
获取懒加载图片真实地址的解决方案
这个问题是典型的图片懒加载导致的:网站为了优化加载速度,初始给img标签的src设为占位图(比如你遇到的lazy_loading.gif),真实图片地址会存放在自定义属性里,等页面滚动到图片位置时,再通过JavaScript把真实地址替换到src中。
解决步骤
1. 检查img标签的自定义属性
先查看目标页面的img标签源码,真实地址通常会存在data-src、data-original或data-lazy这类属性里。针对你提到的页面,class="chapter-img"的图片,真实地址大概率在data-src属性中。
2. 用BeautifulSoup提取对应属性
修改代码,提取目标属性而非src:
import requests from bs4 import BeautifulSoup url = "https://welovemanga.one/2777/92578/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") # 定位所有目标img标签 img_tags = soup.find_all("img", class_="chapter-img") for img in img_tags: # 优先提取data-src属性 real_src = img.get("data-src") if real_src: print(real_src) else: # 尝试其他可能的懒加载属性 real_src = img.get("data-original") or img.get("data-lazy") print(real_src if real_src else "未找到真实图片地址")
3. 若自定义属性不存在,模拟JS渲染
如果检查后发现img标签的属性里没有真实地址,说明地址是通过JavaScript动态生成的,需要用能执行JS的工具(比如Selenium或Playwright)模拟浏览器加载页面:
Selenium示例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options url = "https://welovemanga.one/2777/92578/" # 配置无头模式(可选,不弹出浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless=new") chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=chrome_options) driver.get(url) # 获取所有目标img元素 img_elements = driver.find_elements(By.CLASS_NAME, "chapter-img") for img in img_elements: # 此时JS已完成替换,直接获取src即可 real_src = img.get_attribute("src") print(real_src) driver.quit()
注意事项
- 必须添加
User-Agent请求头,避免被网站识别为爬虫返回异常内容。 - 使用Selenium时,需要对应安装浏览器驱动(比如ChromeDriver)并配置好环境。
内容的提问来源于stack exchange,提问作者Moon
相关产品推荐
相关产品推荐

