使用包含5个数字的Python + Beautiful Soup刮掉任何字符串

时间:2018-05-28 17:10:28

标签: python regex scrape

我住在德国,其中邮政编码在大多数情况下是5位数字f.e. 53525.我真的想用一个漂亮的汤从网站上提取这些信息。

我是Python / Beautiful Soup的新手,我不知道如何翻译"连续找到每5个数字+" SPACE""到Python语言。



import requests
import urllib.request,re
from bs4 import BeautifulSoup

source = requests.get('DOMAIN').text
soup = BeautifulSoup(source, 'lxml')
soup.find_all(NOTSUREHERE)




1 个答案:

答案 0 :(得分:2)

在最简单的情况下:

NOTSUREHERE应替换为name = 'tag_name'tag_name是一个可能的标记,您可以在其中找到邮政编码(并且没有其他数字字段可能会被邮政编码误认为)

然后,该对象的每个元素都应该传递给re.findall(regex, string)regex = '([0-9]{5})'(根据我理解的模式)和string元素来自你提取邮政编码。

import requests
import urllib.request,re
from bs4 import BeautifulSoup

source = requests.get('DOMAIN').text
soup = BeautifulSoup(source, 'lxml')
tag_list = soup.find_all(name = 'tag_name')
match_list = []
for tag in tag_list:
    match_list.append(re.findall('([0-9]{5})', str(tag)))

您应该注意可能不包含邮政编码的匹配项。可能是通过添加更多参数来优化soup.find_all()调用的情况。文档可能会为您提供更多选项,但attrs参数可以设置为{'target_attribute':'target_att_value'}作为属性的值,以及明确标记带有邮政编码的标记的值。

编辑:关于可能的空元素,此链接有一个非常简单的解决方案:Removing empty elements from an array in Python