如何在网站上使用 BeautifulSoup 或 Slimit 从 javascript 变量输出电子邮件地址

How can I use BeautifulSoup or Slimit on a site to output the email address from a javascript variable

本文关键字:Slimit javascript 变量 电子邮件地址 输出 BeautifulSoup 网站      更新时间:2023-09-26

>我有这个示例网站:http://www.example.com/whatever.asp?profile=1

对于每个配置文件号,我在此 Java 脚本代码中都有不同的电子邮件。

<script LANGUAGE="JavaScript">
function something()
{
var ptr;
ptr = "";
ptr += "<table><td class=france></td></table>";
ptr += "<table><td class=france><a href=mailto:exa";
ptr += "mple@email.com>email</a></td></table>";
document.all.something.innerHTML = ptr;
}
</script>

我想解析或正则表达式电子邮件地址。电子邮件的位置取决于长度。但是,使用此python代码,只有我可以解析 mple@email.com 而不是 example@email.com

url=urllib.urlopen('http://www.example.com/whatever.asp?profile=1')
contents= url.read()   
soup = BeautifulSoup(contents)
js_content= soup.findAll("script")[0].text
reg = '(<)?('w+@'w+(?:'.'w+)+)(?(1)>)'
match= re.search(reg,js_content)
print match.group()

有什么帮助吗? 谢谢。

我建议你使用re.findall而不是re.search,因为搜索只会返回第一个匹配项。

url=urllib.urlopen('http://www.example.com/whatever.asp?profile=1')
contents= url.read()   
soup = BeautifulSoup(contents)
js_content= soup.findAll("script")[0].text
reg = r'<?('w+@'w+(?:'.'w+)+)>?'
match= re.findall(reg,js_content)
#!/usr/bin/env python
from bs4 import BeautifulSoup
import re
soup = '''
<script LANGUAGE="JavaScript">
function something()
{
var ptr;
ptr = "";
ptr += "<table><td class=france></td></table>";
ptr += "<table><td class=france><a href=";
ptr += "mailto:example@knesset.com>email</a></td></table>";
document.all.something.innerHTML = ptr;
}
</script>
'''

soup = BeautifulSoup(soup)
for script in soup.find_all('script'):
    reg = '(<)?('w+@'w+(?:'.'w+)+)(?(1)>)'
    reg2 = 'mailto:.*'
    secondHalf= re.search(reg, script.text)
    firstHalf= re.search(reg2, script.text)
    secondHalfEmail = secondHalf.group()
    firstHalfEmail = firstHalf.group()
    firstHalfEmail = firstHalfEmail.replace('mailto:', '')
    firstHalfEmail = firstHalfEmail.replace('";', '')
    if firstHalfEmail == secondHalfEmail:
        email = secondHalfEmail
    else:
        if ('>') not in firstHalfEmail:
            if ('>') not in secondHalfEmail:
                if firstHalfEmail != secondHalfEmail:
                    email = firstHalfEmail + secondHalfEmail
            else:
                email = firstHalfEmail
        else:
            email = secondHalfEmail
    print email