Regex 从html表单中提取值
我有一个巨大的html文件,我试图从一个唯一的输入表单中提取一个特定的值Regex 从html表单中提取值,regex,sed,cmd,Regex,Sed,Cmd,我有一个巨大的html文件,我试图从一个唯一的输入表单中提取一个特定的值 ... <input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" /> "editToken":"4087c77c53bbedbb1015946281fe8b99+\\" .... 第二次 s/"editToken":"\([^"]*\)".*/\1/ 但在这两种情况下,我都得到了整个文件 有什
...
<input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" />
"editToken":"4087c77c53bbedbb1015946281fe8b99+\\"
....
第二次
s/"editToken":"\([^"]*\)".*/\1/
但在这两种情况下,我都得到了整个文件
有什么想法吗
谢谢不要使用
sed
。如果您切换到正确的工具,这和您未来的任何web抓取都将变得更加容易。例如:
用于该语言python
用于其漂亮的ulsoup解析器lxml
- XPath用于在HTML元素树中搜索
- 元素树用于查看元素内部和周围
#!/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])
注意:在linux系统上安装以下软件包:
python
python lxml
sed-n'/[wpLogin | editToken]/{s/*“\(.*)”*/\1/p}
第一部分匹配标记,第二部分查找一对引号,引号之间有任何内容,如果您不能依赖引号,则可以将其更改为更具体的内容。您所需要的只是-n选项和最后打印的p,您可能已经计算出其余部分,您很接近,但sed-n's/”wpLoginToken“*value=“([^“]*)”*/\1/p”会让sed感到困惑,因为您匹配了多个以前的模式,所以它会提供最大匹配,并返回:
#!/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+\\
sed -n '/[wpLogin|editToken]/{s/.*".*"\(.*\)".*/\1/p}' <file>