当前位置: 首页 > java >正文

ai agent(智能体)开发 python高级应用7: crawl4ai 0.6.3 加re正则表达式 获取百度中含有 韩立的图片要求横屏图片

遗憾本来想用ollama 本地模型 deepseek-r1:8b来获取 百度中含有 韩立的图片要求横屏图片 可惜“deepseek-r1:8b” 能力有限 只能换成 用Python re 正则表达式来解决问题了。

1. 直接处理 Markdown字符串 的优化代码,完美适配 crawl4ai 返回的字符串格式:

import asyncio
from crawl4ai import *
import redef parse_crawl4ai_md(md_content: str):"""解析 crawl4ai 返回的Markdown字符串参数:md_content (str): Markdown字符串返回:list: 前5个含"韩立"且宽>高的图片地址"""# 匹配图片地址和标题(适配crawl4ai结构)pattern = r'\* \[!\[\]\(([^)]+)\)[^\[]*?\[([^\]]+)\]'matches = re.findall(pattern, md_content)# 双重过滤(标题含"韩立" + 宽高比)results = []for url, title in matches:if '韩立' not in title:continue# 从URL参数解析尺寸(兼容多种格式)size_match = re.search(r'[?&](?:w|width)=(\d+).*?[?&](?:h|height)=(\d+)', url)if not size_match:continuetry:w, h = map(int, size_match.groups())if w > h:  # 核心筛选条件results.append(url.split('?')[0])  # 移除参数保留干净URLexcept:pass# 去重并返回前5个return list(dict.fromkeys(results))[:5]async def main():print("\n--- Using CSS Selectors ---")browser_config = BrowserConfig(headless=False)crawler_config = CrawlerRunConfig(#waterfall_Pq6qhcache_mode=CacheMode.BYPASS,css_selector=".page-content_11Pd_")async with AsyncWebCrawler(config=browser_config) as crawler:result = await crawler.arun(url='https://image.baidu.com/search/index?tn=baiduimage&fm=result&ie=utf-8&word=%E9%9F%A9%E7%AB%8B%E5%9B%BE%E7%89%87',config=crawler_config,)print(result.markdown)# 调用解析函数images = parse_crawl4ai_md(result.markdown)# 打印结果print("解析结果:")for i, url in enumerate(images, 1):print(f"{i}. {url}")if __name__ == '__main__':asyncio.run(main())

2. 代码重点说明:

  1. 零文件依赖
    直接处理内存中的Markdown字符串,无需生成临时文件

  2. 智能尺寸解析
    正则 r'[?&](?:w|width)=(\d+).*?[?&](?:h|height)=(\d+)' 支持多种参数格式:

    • ?w=800&h=600
    • &width=1200&height=800
    • ?h=300&w=400(顺序无关)
  3. 工业级健壮性

    • try-except 防御非法尺寸参数
    • dict.fromkeys() 去重同时保留顺序
    • url.split('?')[0] 清理跟踪参数
  4. 高性能处理
    单次正则扫描完成数据提取,时间复杂度 O(n)


3. 结果展示:

解析结果:
1. https://img1.baidu.com/it/u=457309065,2031518686&fm=253&fmt=auto&app=120&f=JPEG
2. https://img0.baidu.com/it/u=4284382542,1530607746&fm=253&fmt=auto&app=120&f=JPEG
3. https://img1.baidu.com/it/u=937583500,4077626415&fm=253&fmt=auto&app=120&f=JPEG
4. https://img2.baidu.com/it/u=2235209624,3474576670&fm=253&fmt=auto&app=120&f=JPEG
5. https://img0.baidu.com/it/u=1099097691,2461365158&fm=253&fmt=auto&app=120&f=JPEG

4. 进阶优化方向:

  1. 动态尺寸验证
    添加HTTP HEAD请求验证实际图片尺寸:

    import requests
    def verify_real_size(url):try:resp = requests.head(url, timeout=2, allow_redirects=True)if resp.status_code == 200:content_type = resp.headers.get('Content-Type', '')if 'image/' in content_type:# 从Header或解析二进制获取真实尺寸return (width, height) except:return (0, 0)
    
  2. 异步处理(非必需)
    使用 asyncio + aiohttp 加速批量验证:

    import aiohttp
    async def async_verify(url):async with aiohttp.ClientSession() as session:async with session.head(url) as resp:# 获取尺寸逻辑return await process_response(resp)
    
  3. 缓存机制(非必需)
    lru_cache 缓存已解析的URL尺寸信息:

    from functools import lru_cache
    @lru_cache(maxsize=1000)
    def get_cached_size(url):return verify_real_size(url)
    

    4. 要是能升级显卡硬件的话,本地:deepseek-r1 就会更聪明

    比如:rtx4090 48G

http://www.xdnf.cn/news/7429.html

相关文章:

  • ts导入vue文件时提示找不到模块或其相应的类型声明问题解决
  • ADVANTEST Q8326光学波长计操作手Operation Manual
  • 升级mysql (rpm安装)
  • MIMO 检测(6)--最大似然检测(1)
  • js逆向反调试的基本 bypass
  • 【C语言】大程序结构
  • Linux详解基本指令(一)
  • 对盒模型的理解
  • 澳大利亚TikTok网络专线+本地化策略:澳洲电商品牌的破局之道
  • 最大子树和--树形dp
  • day30python打卡
  • Rust 学习笔记:关于错误处理的练习题
  • 1-3V升3.2V升压驱动WT7013
  • 反射操作注解的详细说明
  • HTTPS核心机制拆解
  • Windows 如何安装CUDA
  • 【免杀】C2免杀技术(六)进程镂空(傀儡进程)
  • 往现有虚拟环境中增加python3.9.6
  • 万用表如何区分零线、火线、地线
  • 2022年下半年信息系统项目管理师——综合知识真题及答案(3)
  • Pytorch---view()函数
  • 机器人编程基础---C语言中的文件操作
  • SHELL练习题(1-11题)记录(牛客)
  • 力扣HOT100之二叉树:199. 二叉树的右视图
  • LintCode第42题-最大子数组 II-使用前缀和优化 + 动态规划法
  • 【深度学习新浪潮】如何入门人工智能?
  • Python 与 面向对象编程(OOP)
  • CVE-2022-22963源码分析与漏洞复现
  • Java EE初阶——单列模式和阻塞队列
  • 深入解析RAG技术:提升题目解答准确率的利器