检索网页的特定部分

问题描述 投票:-1回答:1

我需要用从网页的一部分检索到的数据填充BASH脚本中的列表。当前,我已经手动创建了一个静态列表,但是我希望列表内容是动态生成的。这样,如果将新项目添加到页面,则脚本的后续运行将反映这些新项目。

源页面:https://support.apple.com/en-us/HT210060

我想提取标题为“ macOS,iOS和tvOS”的部分,以列出类似以下的列表:

updateServers="appldnld.apple.com 80  
gg.apple.com 80   
gg.apple.com 443  
gnf-mdn.apple.com 443  
gnf-mr.apple.com 443  
gs.apple.com 80  
gs.apple.com 443  
ig.apple.com 443  
mesu.apple.com 80  
mesu.apple.com 443  
ns.itunes.apple.com 443  
oscdn.apple.com 80  
oscdn.apple.com 443  
osrecovery.apple.com 80  
osrecovery.apple.com 443  
skl.apple.com 443  
swcdn.apple.com 80  
swdist.apple.com 443  
swdownload.apple.com 80  
swdownload.apple.com 443  
swpost.apple.com 80  
swscan.apple.com 443  
updates-http.cdn-apple.com 80  
updates.cdn-apple.com 443  
xp.apple.com 443"  

最终,我想将页面的每个部分输出到其自己的单独列表中,但是目前,上面的部分是我的主要关注点。

谢谢大家。这是一个很棒的社区。

bash list dynamically-generated
1个回答
0
投票

理想情况下,您将使用HTML解析器,例如Ruby的Nokogiri或Python的Beautifulsoup。对于纯Bash解决方案,您可以使用以下脚本:

#!/bin/bash

wget -q https://support.apple.com/en-us/HT210060 -O- \
    | \grep -ziPo "(?s)<h3>macos.*?<h3>" \
    | xargs -0 \
    | \grep -P "<tr><td>|<td>[\d, ]+</td>" \
    | sed 's:.*<td>\(.*\)</td>:\1:'

输出:

$ script.sh
appldnld.apple.com
80
gg.apple.com
443, 80
...
80
updates.cdn-apple.com
443
xp.apple.com
443
© www.soinside.com 2019 - 2024. All rights reserved.