出于某种原因,我无法做到这一点。 当py脚本输出输出时,我有一个类似的字符串(必须隐藏一些信息):
<input name="submit" onclick="var srvstr='Friday 4th of May 2018';someweb(srvstr);document.someemail.securitystring.value='';return false;" src="images/button-submit.png" type="image"/>
我想从字符串中只获得Friday 4th of May 2018
。实现这一目标的最简单或最好的方法是什么?
我在这里滚动浏览了一些旧的文档,并尝试类似地复制它,我认为剪切和切片对我来说是最令人困惑的。谢谢
答案 0 :(得分:3)
既然你是从BeautifulSoup那里得到的,你可能会做这样的事情来得到input
标签:
>>> str(tr.input)
'<input name="submit" onclick="var srvstr=\'Friday 4th of May 2018\';someweb(srvstr);document.someemail.securitystring.value=\'\';return false;" src="images/button-submit.png" type="image"/>'
相反,让BS4将其一直解析为onclick
属性值:
>>> tr.input['onclick']
"var srvstr='Friday 4th of May 2018';someweb(srvstr);document.someemail.securitystring.value='';return false;"
当然,它仍然很混乱,但它并非相当那么糟糕 - 更重要的是,我们知道它引用的Javascript代码适合HTML。所以我们知道在没有逃避的情况下能够和不能存在什么,所以我们不必担心很多本来可能永远不会发生的事情,但是你无法确定(因此肯定会在15分钟后发生)你部署并进入睡眠状态。)
>>> re.search(r"srvstr='(.*?)'", tr.input['onclick'])
<_sre.SRE_Match object; span=(4, 35), match="srvstr='Friday 4th of May 2018'">
>>> re.search(r"srvstr='(.*?)'", tr.input['onclick']).group(1)
'Friday 4th of May 2018'
现在我们不必对他们的日期格式进行逆向工程,希望我们做对了;它只是放在srvstr
变量中的任何字符串。 (虽然如果你真的想将它解析为datetime
对象或其他东西......)
当然,你无法保证解析其他人的文字,但似乎很可能如果它停止工作,那将是因为他们完全改变了他们做onclick
的方式。处理程序,在这种情况下,此代码应该使用异常严重失败,而不是开始生成垃圾。