如何通过Scrapy CSS选择器从RSS Feed中提取media:thumbnail的URL
解决RSS中media标签属性的CSS选择器获取问题
你在解析RSS的XML结构时,能正常通过title.css('title ::text').get()这类代码获取普通标签内容,但无法获取<media:thumbnail>的url属性,核心原因是带命名空间前缀的标签无法被常规CSS选择器直接识别,可以通过以下两种方法解决:
方法1:使用CSS选择器的name()函数匹配标签
CSS选择器本身不支持XML命名空间前缀,因此可以通过*[name()="标签全名"]的方式匹配带命名空间的标签,再提取属性:
# 获取media:thumbnail的url属性 thumbnail_url = response.css('*[name()="media:thumbnail"]::attr(url)').get() # 同理获取media:content的url属性 content_url = response.css('*[name()="media:content"]::attr(url)').get()
方法2:使用XPath(更适配XML命名空间)
XML命名空间更适合用XPath处理,只需先注册media对应的标准命名空间URI,再通过前缀选择标签:
# 注册media命名空间(多数RSS的media标签都使用这个URI) response.selector.register_namespace('media', 'http://search.yahoo.com/mrss/') # 通过XPath提取属性 thumbnail_url = response.xpath('//media:thumbnail/@url').get() content_url = response.xpath('//media:content/@url').get()
内容的提问来源于stack exchange,提问作者Mah3sh
相关产品推荐
相关产品推荐

