python-3.x - 如何使用 scrapy 获取 xlink:href/svg id 的名称?
问题描述
我对scrapy完全陌生,昨天才开始使用它。有一个页面包含我想要获得的产品的评级。不幸的是,收视率不是文字而是星星。假设一个产品获得了两颗星,它看起来像这样:
<div class="index-classRating">
<div class="index-classIcon index-red">
<svg viewBox="0 0 32 32">
<use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
#shadow-root (closed)
<svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
<path d="1 2 3"></path>
</svg>
</use>
</svg>
</div>
<div class="index-classIcon index-red">
<svg viewBox="0 0 32 32">
<use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
#shadow-root (closed)
<svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
<path d="1 2 3"></path>
</svg>
</use>
</svg>
</div>
所以我想计算有多少颗星,即“/static/media/icons.f88ec073.svg#wci-starrating-full”或“wci-starrating-full”。
所以我尝试了
stars = response.xpath('//div[@class="index-classIcon index_red"]/svg[@viewBox="0 0 32 32"]/use[@xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full"]/svg/@id').extract()
并得到一个空列表。但我想要类似的东西
stars = ["wci-starrating-full","wci-starrating-full"]
解决方案
视图框必须小写,“index_red”有破折号而不是连字符试试
stars=response.xpath('//div[@class="index-classIcon index-red"]/svg[@viewbox="0 0 32 32"]/use/svg/@id').extract()
全部示例:(请复制粘贴到python中)
import scrapy
response=scrapy.http.HtmlResponse(url='just_a_string',encoding='utf-8',body=u'''
<div class="index-classRating">
<div class="index-classIcon index-red">
<svg viewBox="0 0 32 32">
<use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
#shadow-root (closed)
<svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
<path d="1 2 3"></path>
</svg>
</use>
</svg>
</div>
<div class="index-classIcon index-red">
<svg viewBox="0 0 32 32">
<use xlink:href="/static/media/icons.f88ec073.svg#wci-starrating-full">
#shadow-root (closed)
<svg id="wci-starrating-full" viewBox="0 0 512 512" width="100%" height="100%">
<path d="1 2 3"></path>
</svg>
</use>
</svg>
</div>
''')
stars=response.xpath('//div[@class="index-classIcon index-red"]/svg[@viewbox="0 0 32 32"]/use/svg/@id').extract()
print(repr(stars))
推荐阅读
- r - 如何使用向量对 R 中的值进行分类?
- javascript - 我想在反应原生博览会中隐藏标题
- javascript - rollbackFailedOptional:动词 npm-session 9a5b1fb467359b45
- reactjs - 如何重定向到 /user/dashboard
- mysql - 使用带有 ifnull 函数 MySQL 的联合语句
- excel - VBA Excel 将文件导出为 .csv,并将数据保存在正确的列中
- c# - OpenhardwareMonitorLib System.IO.FileNotFoundException
- c# - Redis sentinel 中的 C# 操作
- laravel - Laravel 中的临时切换应用程序密钥并将其用于字符串的加密/解密
- c# - 为什么 ASP.NET web api 3 项目在 ASP.NET web api 2 执行时没有请求就无法启动?