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

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

相关文章:

  • Java线程:多任务进行
  • 不同类型桥梁的无人机检测内容及技术难度
  • 无人机遥控器光纤通信模块技术要点!
  • 12.vue整合springboot首页显示数据库表-实现按钮:【添加修改删除查询】
  • SpringBoot-1-入门概念介绍和第一个Spring Boot项目
  • @RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
  • 计算机网络-HTTP与HTTPS
  • unigui 监听控件的js事件
  • Agent的工作原理是什么?一文详解Agent的工作原理
  • MySQL之函数
  • 高速光耦在通信行业的应用(六) | 5Mbps通信光耦的应用
  • 【图像大模型】FLUX.1-dev:深度解析与实战指南
  • 《 二级指针:解锁指针的进阶魔法》
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • mes系统实施方案,mes解决方案(Word)
  • 数据中心 智慧机房解决方案
  • CS50x 01 c
  • 什么是RDMA?
  • 2025.05.19【Barplot】柱状图的多样性绘制
  • 大语言模型(LLM)本身是无状态的,怎么固化记忆
  • 海口警方通报“司机驾车拖行虐猫”:系意外,未发现故意虐猫行为
  • 技术派|台军首次试射“海马斯”火箭炮,如何压制这种武器?
  • 贵州茅台股东大会回应八大热点:确保茅台酒价格体系稳固,相信自我调节能力
  • 多名幼师殴打女童被行拘后续,盘锦市教育局工作人员:该局将专项整治全市幼儿园
  • 马上评|房屋“注胶堵漏”骗局何以屡屡得逞
  • 瑞幸首度牵手成都国际非遗节,用一杯饮品将非遗之美推向全国