Python使用Selenium定位评论日期 排除回复日期的实现方法
实现Selenium仅抓取用户评论日期、过滤商家回复日期的方法
问题背景
当前使用如下代码定位页面日期标签时,会同时获取到用户评论、商家回复两类内容的<time>标签,无法满足仅提取用户评论发布日期的需求:
date_ref = driver.find_elements(By.TAG_NAME, "time")
两类标签的源码特征如下:
- 用户评论对应time标签:
<time datetime="2022-02-03T06:11:02.000Z" class="" data-service-review-date-time-ago="true" title="Thursday, 3 February 2022, 05:11:02 pm">3 Feb 2022</time>
- 商家回复对应time标签:
<time datetime="2022-02-07T03:31:52.999Z" class="typography_typography__QgicV typography_bodysmall__irytL typography_color-gray-6__TogX2 typography_weight-regular__TWEnf typography_fontstyle-normal__kHyN3 styles_replyDate__Iem0_" data-service-review-business-reply-date-time-ago="true" title="Monday, 7 February 2022, 02:31:52 pm">7 Feb 2022</time>
核心定位逻辑调整
两类标签的专属属性有明确区分,直接通过CSS选择器匹配用户评论的专属属性即可,从定位源头过滤无关元素,无需二次遍历判断,执行效率更高。
推荐实现代码
from selenium.webdriver.common.by import By # 通过用户评论time标签的专属data属性精准定位,完全排除商家回复标签 date_ref = driver.find_elements(By.CSS_SELECTOR, 'time[data-service-review-date-time-ago="true"]')
该选择器的匹配规则是:仅选中标签名为time、且带有属性data-service-review-date-time-ago="true"的元素,商家回复的time标签没有该属性,会被直接过滤。
备选过滤方案
如果有特殊场景需要先获取所有time标签再筛选,可以通过判断商家回复的专属属性做过滤,示例代码如下:
all_time_tags = driver.find_elements(By.TAG_NAME, "time") user_date_list = [] for time_tag in all_time_tags: # 判定当前标签是否属于商家回复日期 is_reply_date = time_tag.get_attribute("data-service-review-business-reply-date-time-ago") is not None if not is_reply_date: user_date_list.append(time_tag)
内容的提问来源于stack exchange,提问作者B_fig
相关产品推荐
相关产品推荐

