如何抓取HTML标签属性中的值?Scrapy Shell下提取object标签labels数据的咨询
提取SVG标签数据的两种方法(Scrapy Shell)
嘿,作为Scrapy新手,你找对方向啦!因为这个<object>元素是引用了外部的SVG文件,页面本身并没有渲染SVG里的内容,所以直接从response里找labels区域是行不通的——我们得从它的data属性里的URL参数中提取labels数据。下面给你两种靠谱的方法:
方法一:用正则表达式提取(你提到没试过的.re()方法)
首先在Scrapy Shell里定位到这个元素,拿到完整的data URL:
# 用CSS选择器获取data属性值 data_url = response.css('#svg_chart::attr(data)').get()
然后用正则匹配labels=后面的内容,直到遇到&结束:
import re labels_match = re.search(r'labels=([^&]+)', data_url) if labels_match: labels_str = labels_match.group(1) labels_list = labels_str.split(',') print(labels_list) # 输出结果就是:['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
方法二:用URL解析库(更规范,不易出错)
正则虽然快捷,但如果URL参数格式有变化可能会失效,用Python自带的urllib.parse解析查询参数更稳妥:
from urllib.parse import urlparse, parse_qs # 先拿到data URL data_url = response.css('#svg_chart::attr(data)').get() # 解析URL的查询参数部分 parsed_url = urlparse(data_url) query_params = parse_qs(parsed_url.query) # 提取labels参数,parse_qs返回的是列表,取第一个值再拆分 labels_str = query_params['labels'][0] labels_list = labels_str.split(',') print(labels_list)
两种方法都能帮你拿到想要的月份标签列表,第二种方法更适合处理复杂的URL参数场景,推荐你优先试试~
内容的提问来源于stack exchange,提问作者Brad Cunningham
相关产品推荐
相关产品推荐

