python - regex/beautifulsoup 如何从html表中提取列的所有值?

标签 python html regex beautifulsoup

从此代码:

<tr><td>PC1</td><td>zz:zz:zz:zz:zz:ce</td><td>10.0.0.244</td><td>23 hours, 55 minutes, 25 seconds</td></tr>
<tr><td>PC2</td><td>zz:zz:zz:zz:zz:cf</td><td>10.0.0.245</td><td>23 hours, 23 minutes, 27 seconds</td></tr>

我想获取一个 MAC 地址数组和另一个 IP 数组

我想到了类似 Mac 的正则表达式:<\/td><td>(.*?){17}<\/td> 但它也符合正常运行时间。

有什么建议吗?

谢谢!

最佳答案

来自html您已给出,您可以执行以下操作:

from bs4 import BeautifulSoup

html = """<tr><td>PC1</td><td>zz:zz:zz:zz:zz:ce</td><td>10.0.0.244</td><td>23 hours, 55 minutes, 25 seconds</td></tr>
<tr><td>PC2</td><td>zz:zz:zz:zz:zz:cf</td><td>10.0.0.245</td><td>23 hours, 23 minutes, 27 seconds</td></tr>"""

soup = BeautifulSoup(html)
mac_ips = []

for tr in soup.find_all('tr'):
    cols = [td.text for td in tr.find_all('td')]
    mac_ips.append((cols[1], cols[2]))

for mac, ip in mac_ips:
    print '{}  {}'.format(mac, ip)

给你:

zz:zz:zz:zz:zz:ce  10.0.0.244
zz:zz:zz:zz:zz:cf  10.0.0.245

mac_ips会将每一行作为匹配对保存:

[(u'zz:zz:zz:zz:zz:ce', u'10.0.0.244'), (u'zz:zz:zz:zz:zz:cf', u'10.0.0.245')]
<小时/>

如果您想分隔列表,则可以执行以下操作:

from bs4 import BeautifulSoup

html = """<tr><td>PC1</td><td>zz:zz:zz:zz:zz:ce</td><td>10.0.0.244</td><td>23 hours, 55 minutes, 25 seconds</td></tr>
<tr><td>PC2</td><td>zz:zz:zz:zz:zz:cf</td><td>10.0.0.245</td><td>23 hours, 23 minutes, 27 seconds</td></tr>"""

soup = BeautifulSoup(html)
mac = []
ip = []

for tr in soup.find_all('tr'):
    cols = [td.text for td in tr.find_all('td')]
    mac.append(cols[1])
    ip.append(cols[2])

print mac
print ip

给你:

[u'zz:zz:zz:zz:zz:ce', u'zz:zz:zz:zz:zz:cf']
[u'10.0.0.244', u'10.0.0.245']

注意:如果您要解析更多 html,那么您可能还需要首先找到封闭的 <table> .

关于python - regex/beautifulsoup 如何从html表中提取列的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35839435/

相关文章:

python - 如何在 python 中将 JSON 转换为 Dataframe

javascript - 谷歌分析链接跟踪 javascript 删除附属链接

html - 如何使此 Navbar 正确粘贴?

php - 解析两个词之间的文本

python - 使用额外的列更新 Pandas DataFrame?

python - 训练 keras 模型时维度如何工作?

html - 将图像 float 到文本右侧时图像和文本之间的间隙

iOS - 不能是连续或重复数字的 4 位整数的正则表达式?

c# - 将 html 字符串拆分为 N 部分

python - 如何将 4 个多索引级别行层次结构从 excel 上传到 pandas 数据框?