基于BeautifulSoup查找静态资源相关元素的技术咨询
关于用BeautifulSoup抓取静态资源元素的问题解答
1. 常见静态资源相关HTML标签清单
除了你已经用到的标签,还有这些容易遗漏的类型:
link:除了rel="stylesheet"(样式表),还包括rel="preload"/rel="prefetch"(预加载的字体、脚本、图片等资源)、rel="icon"(站点图标)img:各类图片资源(jpg/png/webp等)script:外部JavaScript文件video:视频资源audio:音频资源source:配合video/audio使用的媒体源文件embed:嵌入的外部资源(如PDF、Flash)object:嵌入的对象资源(如插件、媒体文件)picture:响应式图片容器,内部包含source和img标签iframe:嵌入的外部静态页面(按需考虑)
2. 替代多次调用findAll()的实现方式
方式一:用find_all接收标签列表参数
直接把目标标签名放在列表里传给find_all,再针对性过滤属性:
# 先获取所有目标标签 all_tags = souped.find_all(['link', 'img', 'script', 'video', 'audio', 'source', 'embed', 'object', 'picture']) # 过滤出符合要求的link标签,同时保留其他标签 static_resources = [] for tag in all_tags: if tag.name == 'link': rel_attr = tag.get('rel', []) # 保留样式表和预加载类静态资源 if 'stylesheet' in rel_attr or 'preload' in rel_attr: static_resources.append(tag) else: static_resources.append(tag)
方式二:使用CSS选择器(select方法)
BeautifulSoup支持CSS选择器,可一次性筛选多类标签和属性:
# 筛选样式表link、各类媒体和资源标签 static_resources = souped.select('link[rel="stylesheet"], img, script, video, audio, source, embed, object, picture') # 如果需要包含预加载的link,可扩展选择器 static_resources = souped.select('link[rel="stylesheet"], link[rel="preload"], img, script, video, audio, source, embed, object, picture')
这种写法比多次调用find_all更简洁,也更易维护。
内容的提问来源于stack exchange,提问作者Dimon Agon
相关产品推荐
相关产品推荐

