在BeautifulSoup(bs4)的NavigableString中提取图片URL的方法求助
从RSS的content:encoded中提取图片URL
你可以通过两种常见方法提取嵌套在content:encoded文本里的图片URL:
方法1:用BeautifulSoup二次解析HTML
content:encoded里的内容本质是HTML字符串,直接把它传给BeautifulSoup做二次解析,就能像处理普通HTML一样提取img标签的src属性,这也是最可靠的方式:
from bs4 import BeautifulSoup # 假设你已经通过findAll获取到content:encoded的元素集合 content_encoded_items = soup.findAll('content:encoded') for item in content_encoded_items: # 将content:encoded内的文本转为可解析的HTML对象 inner_html = BeautifulSoup(item.text, 'html.parser') # 查找所有img标签 img_elements = inner_html.find_all('img') # 遍历提取src属性 for img in img_elements: img_url = img.get('src') if img_url: print(img_url) # 这里就是目标图片URL
方法2:用正则表达式匹配
如果场景简单,也可以用正则直接匹配img标签里的src属性,适合快速实现,但要注意正则对复杂HTML结构的兼容性较差:
import re # 同样基于已获取的content:encoded元素集合 content_encoded_items = soup.findAll('content:encoded') # 正则规则:匹配img标签内的src属性,兼容单双引号或无引号的写法 src_pattern = re.compile(r'<img[^>]+src=["\']?([^"\'>]+)["\']?') for item in content_encoded_items: img_urls = src_pattern.findall(item.text) for url in img_urls: print(url)
额外提示
如果提取到的是相对路径(比如/uploads/2024/05/image.jpg),需要拼接RSS源的基础域名(比如https://example.com)才能得到完整可访问的URL。
内容的提问来源于stack exchange,提问作者Yusuf Selim KARATAS
相关产品推荐
相关产品推荐

