使用Python+Beautiful Soup提取含5位连续数字的字符串
提取德国5位邮编的解决方案
嘿,刚上手Python和Beautiful Soup的话,这个需求其实很容易搞定——咱们直接用正则表达式来匹配你要的「连续5位数字+空格」模式就行了!Beautiful Soup的find_all方法支持用正则来筛选文本内容,刚好能满足你的需求。
先给你修改好的完整代码,咱们一步步拆解:
import requests import re from bs4 import BeautifulSoup # 替换成你要爬的目标网站域名 source = requests.get('DOMAIN').text soup = BeautifulSoup(source, 'lxml') # 用正则匹配「5位数字+空格」的文本内容 postal_code_matches = soup.find_all(text=re.compile(r'\b\d{5}\s')) # 清理结果:去掉空格、去重 cleaned_postal_codes = list(set([code.strip() for code in postal_code_matches])) # 打印结果看看 print(cleaned_postal_codes)
关键部分解释:
re.compile(r'\b\d{5}\s'):这是核心的正则表达式,拆解一下:\b:单词边界,确保咱们匹配的是独立的5位数字(不会从类似123456这样的长数字里截取前5位)\d{5}:精准匹配5个连续的数字(德国邮编的标准格式)\s:匹配数字后面的空格,符合你说的需求
soup.find_all(text=...):告诉Beautiful Soup去查找页面中所有匹配这个正则的文本节点- 最后的列表推导式和
set:网页里可能会重复出现同一个邮编,用set去重,再转成列表,strip()则是去掉邮编前后多余的空格(包括咱们匹配的那个结尾空格)
小调整建议:
如果有时候网页里的邮编后面没有空格,你也想匹配到的话,可以把正则改成r'\b\d{5}\b'——这样只要是独立的5位数字,不管后面有没有空格都能匹配到。
内容的提问来源于stack exchange,提问作者MXM
相关产品推荐
相关产品推荐

