Python如何从LinkedIn个人主页URL中准确提取ID?
原代码出错原因
Python的str.lstrip()方法的参数是字符集合,而非完整匹配的前缀字符串。只要目标字符串开头的字符落在你传入的"https://www.linkedin.com/in/"的字符范围内,就会被无差别删掉,比如ID如果以h、t、p、s、w、l、i、n等字符开头,都会被误删,这就是你遇到结果缺字符甚至为空的核心原因。
更准确的替代实现方案
下面给出三种不同场景的实现,都不需要依赖第三方库:
方案1:使用标准库
urllib.parse解析(兼容性最优)
可以兼容http/https前缀、不同地区子域名(如cn.linkedin.com)、URL带查询参数等各种情况,是最稳妥的方案:from urllib.parse import urlparse def extract_linkedin_id(link: str) -> str: parsed_url = urlparse(link) # 拆分路径,过滤空串 path_segments = [seg for seg in parsed_url.path.split('/') if seg] # 匹配/in/后的第一段路径即为ID if len(path_segments) >= 2 and path_segments[0] == 'in': return path_segments[1] return ""方案2:字符串分割(适合已知URL格式完全符合要求的场景)
逻辑简单执行快,只要URL里存在/in/段就能正确提取:def extract_linkedin_id(link: str) -> str: if '/in/' not in link: return "" # 取/in/之后的部分,再去掉末尾的/和后续参数 after_in_part = link.split('/in/', 1)[1] return after_in_part.split('/')[0].split('?')[0].split('#')[0]方案3:正则匹配(适合需要严格格式校验的场景)
可以直接过滤掉不符合格式的错误URL,匹配精度高:import re LINKEDIN_ID_PATTERN = r'linkedin\.com/in/([^/?#]+)' def extract_linkedin_id(link: str) -> str: match_res = re.search(LINKEDIN_ID_PATTERN, link) return match_res.group(1) if match_res else ""
内容的提问来源于stack exchange,提问作者Aytida
相关产品推荐
相关产品推荐

