从html表单中提取值

时间:2014-10-23 14:58:08

标签: regex sed cmd

我有一个巨大的html文件,我尝试从一个独特的输入表单中提取一个特殊值。

...    
<input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" />
"editToken":"4087c77c53bbedbb1015946281fe8b99+\\"
....

名称是wpLoginToken,我只想要9ae61b0c5de20b418895d5301f6a1517 第二个editToken,只想要4087c77c53bbedbb1015946281fe8b99+\\

目前我尝试使用sed。

第一个

s/"wpLoginToken".*value="\([^"]*\)".*/\1/

代表第二个

s/"editToken":"\([^"]*\)".*/\1/

但是在这两种情况下我都得到整个文件..

任何想法?

由于

2 个答案:

答案 0 :(得分:0)

请勿使用sed。如果您切换到正确的工具,这将和您未来的任何网络抓取都会变得更容易。例如:

  • python语言
  • lxml的漂亮美女解析器
  • XPath ,用于在HTML元素树中搜索
  • ElementTree 用于查看元素及其周围

使用这些的程序如下所示:

#!/usr/bin/python

from lxml.html.soupparser import parse

tree = parse(file('index.html'))
# XPath: “look for an <input> element with ‘name’ attribute equal ‘wpLoginToken’”
element = tree.xpath('//input[@name="wpLoginToken"]')[0]
print(element.value)

data = element.tail.split('"')
print(data[3])

这给了你:

9ae61b0c5de20b418895d5301f6a1517
4087c77c53bbedbb1015946281fe8b99+\\



注意:在Linux系统上安装这些软件包:

  • python
  • python-lxml

答案 1 :(得分:0)

sed -n '/[wpLogin|editToken]/{s/.*".*"\(.*\)".*/\1/p}'  <file>

第一部分与标记匹配,第二部分查找两条引号之间的任何内容,如果您不能依赖引号,那么您可以将其更改为更具体的内容。