1

我正在使用 httpry 从我机器上的接口中提取 http 数据包。它以非常干净的格式输出结果,列由空格或制表符分隔。这是输出中的示例行。

2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -

我正在尝试编写一个脚本(在 bash 或 python 中)来抓取网站,在本例中为 www.google.com,并将它们写入文件。将它们写入文件很容易,但我没有任何基于空格或制表符解析的经验。如果有人能让我指出如何做到这一点的正确方向,那就太好了。谢谢您的帮助。

4

3 回答 3

3

在我看来,这awk就是这里的工作工具(来自 bash 脚本):

httpry -other -args -here | awk '{print $7}' > outfile.txt
于 2012-11-28T03:37:23.613 回答
3

在 Python 中,只需对字符串使用 split 方法。

代码

data = "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -"
print data.split()

输出

['2012-11-27', '20:29:22', '192.168.1.132', '74.125.224.51', '>', 'GET', 'www.google.com', '/', 'HTTP/1.1', '-', '-']
于 2012-11-28T03:40:48.843 回答
1

您可以在 bash 中使用“set --”根据空格将字符串拆分为单词。例子:

echo "2012-11-27 20:29:22     192.168.1.132   74.125.224.51   >       GET     www.google.com  /       HTTP/1.1        -       -" \
| while read line; do 
    set -- $line;
    N=$#;
    for ((i=0; i<N; i++)); do
        echo "Field $i = '$1'";
        shift;
    done;
  done

输出:

Field 0 = '2012-11-27'
Field 1 = '20:29:22'
Field 2 = '192.168.1.132'
Field 3 = '74.125.224.51'
Field 4 = '>'
Field 5 = 'GET'
Field 6 = 'www.google.com'
Field 7 = '/'
Field 8 = 'HTTP/1.1'
Field 9 = '-'
Field 10 = '-'

要仅提取字段 7,请尝试

while read line; do set -- $line; echo "$7"; done
于 2012-11-28T05:21:59.687 回答