如何用美丽的汤来提取字符串<script> tag? python web-scraping beautifulsoup

最后发布:


问题
None python web-scraping beautifulsoup
回答

要添加更多一点的@鲍勃的回答假设你还需要找到script中,可能有其他的HTML标记script标签。

我们的想法是定义一个正则表达式,用于通过BeautifulSoup定位元素并提取email值:

import re

from bs4 import BeautifulSoup


data = """
<body>
    <script>jQuery(window).load(function () {
      setTimeout(function(){
        jQuery("input[name=Email]").val("name@email.com");
      }, 1000);
    });</script>
</body>
"""
pattern = re.compile(r'\.val\("([^@]+@[^@]+\.[^@]+)"\);', re.MULTILINE | re.DOTALL)
soup = BeautifulSoup(data, "html.parser")

script = soup.find("script", text=pattern)
if script:
    match = pattern.search(script.text)
    if match:
        email = match.group(1)
        print(email)

打印: name@email.com

这里我们使用一个简单的正则表达式来表示电子邮件地址 ,但我们可以更进一步,更严格地对待它,但我怀疑这对于这个问题几乎是必要的。


回答

不可能只使用BeautifulSoup,但你可以用BS +正则表达式来做

import re
from bs4 import BeautifulSoup as BS

html = """<script> ... </script>"""

bs = BS(html)

txt = bs.script.get_text()

email = re.match(r'.+val\("(.+?)"\);', txt).group(1)

或者像这样:

...

email = txt.split('.val("')[1].split('");')[0]