Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript变量与html代码regex电子邮件匹配_Javascript_Python_Regex_Email_Beautifulsoup - Fatal编程技术网

Javascript变量与html代码regex电子邮件匹配

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

此python脚本无法输出电子邮件地址example@email.com对于这个案子

这是我以前的帖子

如果有人能帮我就好了


谢谢你

你的问题是你在文本中找不到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