Javascript变量与html代码regex电子邮件匹配
此python脚本无法输出电子邮件地址example@email.com对于这个案子 这是我以前的帖子 如果有人能帮我就好了Javascript变量与html代码regex电子邮件匹配,javascript,python,regex,email,beautifulsoup,Javascript,Python,Regex,Email,Beautifulsoup,此python脚本无法输出电子邮件地址example@email.com对于这个案子 这是我以前的帖子 如果有人能帮我就好了 谢谢你你的问题是你在文本中找不到mailto,因为前半封邮件与后半封邮件不在同一行。要正确解决您的问题,只需在本程序结束时知道ptr的值 我知道这是一种不好的方法,但如果您确信结构始终是这样的: soup = """ <script LANGUAGE="JavaScript"> function ...() { var ptr; ptr = ""; pt
谢谢你你的问题是你在文本中找不到mailto,因为前半封邮件与后半封邮件不在同一行。要正确解决您的问题,只需在本程序结束时知道ptr的值 我知道这是一种不好的方法,但如果您确信结构始终是这样的:
soup = """
<script LANGUAGE="JavaScript"> function ...()
{ var ptr;
ptr = "";
ptr += "...";
ptr += "...";
ptr += "...";
document.all.something.innerHTML = ptr;
}
</script>
"""
现在您可以使用Beautifulsoup或re解析ptr。如果您不知道它的结构,您可以使用:
soup = BeautifulSoup(soup)
for script in soup.find_all('script'):
#This matches everything between "{ var ptr;"
#and "document"
regex = "{ var ptr;(.*)document"
code = re.search(regex, script.text, flags=re.DOTALL).groups()[0]
#This is actually dangerous because anything
#in the code will be executed here, but if
#it's like your example everything will
#work fine and you can access the value of ptr
exec(code)
print ptr
mail = re.search("<a href=mailto:(.*?)>", ptr).groups()[0]
我认为这是一个相当有趣的方法 不要解析这个javascript代码,而是执行它 获取ptr值,通过BeautifulSoup加载,并从a标记获取href属性值。示例使用:
mail = re.search("<a href=mailto:(.*?)>", ptr).groups()[0]
from bs4 import BeautifulSoup
from pyv8 import PyV8
data = """
<script LANGUAGE="JavaScript">
function something()
{
var ptr;
ptr = "";
ptr += "<table><td class=france></td></table>";
ptr += "<table><td class=france><a href=mail";
ptr += "to:example@email.com>email</a></td></table>";
document.all.something.innerHTML = ptr;
}
</script>
"""
soup = BeautifulSoup(data)
# prepare the function to return a value and add a function call
js_code = soup.script.text.strip().replace('document.all.something.innerHTML = ptr;', 'return ptr;') + "; something()"
ctxt = PyV8.JSContext()
ctxt.enter()
soup = BeautifulSoup(ctxt.eval(str(js_code)))
print soup.a['href'].split('mailto:')[1]
example@email.com