【问题标题】:Scrape any string with Python + Beautiful Soup that contains 5 numbers用 Python + Beautiful Soup 刮掉任何包含 5 个数字的字符串
【发布时间】:2018-11-07 07:34:09
【问题描述】:

我住在德国,在大多数情况下,邮政编码都是 5 位数字 f.e. 53525. 我真的很想使用美丽的汤从网站中提取该信息。

我是 Python/Beautiful Soup 的新手,我不知道如何将“Find every 5 Numbers in a row + "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)

【问题讨论】:

  • 您可以发布示例数据吗?

标签: python regex scrape


【解决方案1】:

在最简单的情况下:

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

【讨论】:

  • PS:那个正则表达式只返回邮政编码。如果您想要更多(例如整个文本或整个元素,则需要调整正则表达式)
  • 谢谢!效果很好,只是对其他用户的提示:它必须是“for tag in TAG_list”。
  • 如果我打印 match_list,它也会显示空的 [ ] 元素。仅打印非空列表元素的最佳方法是什么?
  • 确实,我的错。我会解决的!
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 2022-07-16
  • 1970-01-01
  • 2022-07-20
  • 2018-04-22
  • 2014-02-08
  • 2021-03-11
  • 1970-01-01
相关资源
最近更新 更多