如何从维基百科发电厂列表的{{Location map}}模板提取指定参数?
用awk提取维基百科{{Location map}}模板参数可行吗?
绝对可以用awk来做这件事,甚至在某些场景下会比BeautifulSoup这类HTML解析器更高效——不过得看你拿到的原始数据是什么格式,咱分两种情况说:
1. 处理维基百科原始维基文本(Wikitext):awk是绝佳选择
如果你能直接获取到维基百科编辑页面里的原始维基文本(不是浏览器渲染后的HTML),那{{Location map}}模板的格式非常规整,都是键值对的形式(不管是单行还是分行写的),完全适合用awk做文本匹配提取。
举个实际的awk脚本例子,能处理单行或多行的模板:
#!/usr/bin/awk -f BEGIN { RS = "{{Location map" # 把模板开头作为记录分隔符 FS = "[|= \n]" # 用|、=、空格、换行作为字段分隔符 } NR > 1 { # 跳过第一个空记录 printf "=== 提取到的位置信息 ===\n" for(i=1; i<=NF; i++){ if($i == "label") printf "Label: %s\n", $(i+2) else if($i == "lat") printf "Latitude: %s\n", $(i+2) else if($i == "lon") printf "Longitude: %s\n", $(i+2) else if($i == "region") printf "Region: %s\n", $(i+2) } # 截断到模板结束符}}之前的内容 sub(/}}.*/, "", $0) }
把这个脚本保存为extract_locations.awk,然后运行awk -f extract_locations.awk your_wikitext_file.txt就能拿到想要的参数了。
这种方式的优势是:速度快、脚本轻量,不需要安装Python和BeautifulSoup这类依赖,完全靠文本匹配就能搞定规整的维基模板。
2. 处理渲染后的HTML页面:awk不推荐
如果你的数据源是浏览器里看到的已渲染HTML页面,那我强烈建议还是用BeautifulSoup这类专门的HTML解析器。因为HTML的结构太灵活了:标签嵌套、属性位置不固定、可能有动态加载的内容,awk的纯文本匹配很容易漏数据或者误解析,维护成本会很高。
总结
- 优先选awk:当你能拿到维基百科的原始维基文本时,效率高、实现简单;
- 选BeautifulSoup:当只能处理HTML时,能准确处理复杂的网页结构。
内容的提问来源于stack exchange,提问作者agmoermann
相关产品推荐
相关产品推荐

