5.6 解析网站数据
消除不必要的细节有助于解析网页数据。sed
和awk
是完成这项工作的主要工具。在4.3节中,我们见到过一份演员评级列表。这个列表就是通过解析http://www.johntorres.net/BoxOfficefemaleList.html得到的。
让我们看看如何使用文本处理工具来解析同样的数据。
5.6.1 实战演练
请看下面用于从网站解析演员详细信息的命令序列:
- $ lynx -dump http://www.johntorres.net/BoxOfficefemaleList.html | \
- grep -o "Rank-.*" | \
- sed 's/Rank-//; s/\[[0-9]\+\]//' | \
- sort -nk 1 |\
- awk '
- {
- for(i=3;i<=NF;i++){ $2=$2" "$i }
- printf "%-4s %s\n", $1,$2 ;
- }' > actresslist.txt
输入如下:
- # 由于版面空间限制,只显示前3位演员的信息
- 1 Keira Knightley
- 2 Natalie Portman
- 3 Monica Bellucci
5.6.2 工作原理
Lynx是一个基于命令行的网页浏览器。它并不会为我们显示出一堆原始的HTML代码,而是能够打印出网站的文本版本,这个文本版和我们在浏览器中看到的页面一模一样。这样一来,就免去了移除HTML标记的工作。我们按照下面的方法用sed
解析以Rank
开头的行:
sed 's/Rank-//; s/\[[0-9]\+\]//'
然后再根据评级情况对这些行排序。这里我们要使用awk
来指定宽度,以保持演员的评级信息和姓名之间的空隙。%-4s
指定了4个字符的宽度。除了第一个字段外,所有的字段都用$2
拼接成了一个字符串。
5.6.3 参考
4.6节讲解了
sed
命令。4.7节讲解了
awk
命令。5.3节讲解了
lynx
命令。