如何用Python将爬取到的含逗号字符串转为整数,解决Selenium爬取粉丝数时的ValueError
问题核心
爬取获取的数字文本为带千分位逗号的格式(如10,243),Python原生int()方法无法直接解析包含逗号的字符串,因此触发ValueError异常。
解决方法
方法1:直接替换字符串中的千分位分隔符
这是最贴合当前场景的实现,逻辑最简:拿到元素文本后,将所有逗号替换为空字符串,再执行整数转换,改造后的代码如下:
# 拆分获取原始文本与转换逻辑,避免直接套int导致报错 raw_follower_text = browser.find_element_by_xpath('/html/body/div/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[5]/div[2]/a/span[1]/span').text raw_following_text = browser.find_element_by_xpath('/html/body/div/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[5]/div[1]/a/span[1]/span').text # 移除千分位逗号后转为整数 follower_count = int(raw_follower_text.replace(',', '')) following_count = int(raw_following_text.replace(',', ''))
方法2:正则提取数字部分(适配性更强)
如果遇到页面元素偶尔混入空格、无关提示文字的情况,单纯替换逗号的方法依然可能报错。可以用正则直接从文本中匹配连续的数字片段,自动过滤所有非数字字符,抗页面小幅变动的能力更强:
import re raw_follower_text = browser.find_element_by_xpath('/html/body/div/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[5]/div[2]/a/span[1]/span').text raw_following_text = browser.find_element_by_xpath('/html/body/div/div/div/div[2]/main/div/div/div/div[1]/div/div[2]/div/div/div[1]/div/div[5]/div[1]/a/span[1]/span').text # 匹配文本中的所有连续数字,提取后转整数 follower_count = int(re.search(r'\d+', raw_follower_text.strip()).group()) following_count = int(re.search(r'\d+', raw_following_text.strip()).group())
工程化兜底优化
如果是长期运行的爬取脚本,建议封装统一的解析函数加异常捕获,避免因为偶发的元素加载失败、文本为空导致整个流程中断:
import re def parse_metric_count(raw_text): """从爬取的文本中解析数值指标,遇到异常时可扩展日志上报逻辑""" try: clean_text = raw_text.strip() match_result = re.search(r'\d+', clean_text) return int(match_result.group()) except (ValueError, AttributeError): # 此处可补充打印日志、异常上报等逻辑 return 0 # 调用示例 follower_count = parse_metric_count(raw_follower_text) following_count = parse_metric_count(raw_following_text)
方案选型提示
- 字符串替换法逻辑最简单,适合页面结构稳定、文本格式固定的场景,零额外依赖即可实现
- 正则提取法适配范围更广,哪怕爬取的文本里混了前后空格、零散提示文字,只要完整数字段存在就能正常解析,抗页面小幅调整的能力更好
- 带异常捕获的封装函数适合长期运行的生产级爬虫,不会因为单次的元素加载延迟、文本为空等问题导致整体爬取流程崩溃
内容的提问来源于stack exchange,提问作者user14915996
相关产品推荐
相关产品推荐

