python - Python 正则表达式:数据抓取
- 数据
问题描述
我有一个 HTML 文件,我用 Python 阅读,我想在打印时自定义它。
首先我要打印国家名称,然后是他们所属国家的玩家姓名。
我的 HTML 文件如下所示:
<ul>
<li>
Australia
<ol>
<li>Steve Smith</li>
<li>David Warner</li>
<li>Aaron Finch</li>
</ol>
</li>
<li>
Bangladesh
<ol>
<li>Shakib Al Hasan</li>
<li>Tamim Iqbal</li>
<li>Mushfiqur Rahim</li>
</ol>
</li>
<li>
England
<ol>
<li>Ben Stokes</li>
<li>Joe Root</li>
<li>Eoin Morgan</li>
</ol>
</li>
现在我想从我的 HTML 文件中抓取这些数据:
Australia - Steve Smith, David Warner, Aaron Finch
Bangladesh - Shakib Al Hasan, Tamim Iqbal, Mushfiqur Rahim
England - Ben Stokes, Joe Root, Eoin Morgan
但我只能用球员的名字来刮。这是我的代码:
import re
file_name = "team.html"
mode = "r"
with open(file_name, mode) as fp:
team = fp.read()
pat = re.compile(r'<li>(.*?)</li>')
result = pat.findall(team)
res = ", ".join([str(player) for player in result])
print(res)
另外,我不使用任何像 bs4 这样的包。我想通过使用正则表达式来解决这个问题。
解决方案
这里是使用正则表达式的解决方案。
import re
file_name = "team.html"
mode = "r"
with open(file_name, mode) as fp:
team = fp.read()
regex = re.compile(r'<li>\s+(?P<country>[A-z ]+)|<li>(?P<name>[A-z ]+)</li>')
country_team_rel = {}
country = None
for result in regex.findall(team):
if result[0]:
country = result[0]
country_team_rel[country] = []
else:
country_team_rel[country].append(result[1])
# Or If you like to print
buffer = []
for result in regex.findall(team):
if result[0]:
if buffer:
print(", ".join(buffer))
buffer = []
print(result[0] + " - ", end='')
else:
buffer.append(result[1])
print(", ".join(buffer))
推荐阅读
- load-balancing - HAProxy URL 负载平衡
- c++ - 如何从数字中获取 Unicode 字符?
- java - 在 AWS Lambda Java 中解析 Kinesis 数据流
- r - 在(反)对角线上应用函数
- javascript - 引导程序中的 net::ERR_ABORTED 500(内部服务器错误)
- batch-file - Windows 批处理文件 xcopy 同一文件夹中的特定文件
- angular - 为什么 ng serve 在进程监视器中显示多次
- javascript - 如何使用“toHaveBeenCalledWith”在 Jasmine 中断言布尔值
- compiler-errors - 在 Ubuntu 中构建 Code Composer Studio 嵌入式项目(带有指向外部项目的链接)时找不到头文件错误
- javascript - 如何使用 arguments.length 来查找传递给函数的参数数量?