我有一个巨大的html文件,我尝试从一个独特的输入表单中提取一个特殊值。
...
<input type="hidden" name="wpLoginToken" value="9ae61b0c5de20b418895d5301f6a1517" />
"editToken":"4087c77c53bbedbb1015946281fe8b99+\\"
....
名称是wpLoginToken,我只想要9ae61b0c5de20b418895d5301f6a1517
第二个editToken,只想要4087c77c53bbedbb1015946281fe8b99+\\
目前我尝试使用sed。
第一个
s/"wpLoginToken".*value="\([^"]*\)".*/\1/
代表第二个
s/"editToken":"\([^"]*\)".*/\1/
但是在这两种情况下我都得到整个文件..
任何想法?
由于
答案 0 :(得分:0)
请勿使用sed
。如果您切换到正确的工具,这将和您未来的任何网络抓取都会变得更容易。例如:
python
语言lxml
的漂亮美女解析器使用这些的程序如下所示:
#!/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>
第一部分与标记匹配,第二部分查找两条引号之间的任何内容,如果您不能依赖引号,那么您可以将其更改为更具体的内容。