python - 如何使用 Beautiful Soup 提取 <script> 标签中的字符串?

标签 python web-scraping beautifulsoup

在给定的 .html 页面中,我有一个这样的脚本标记:

     <script>jQuery(window).load(function () {
  setTimeout(function(){
    jQuery("input[name=Email]").val("name@email.com");
  }, 1000);
});</script>

如何使用 Beautiful Soup 提取电子邮件地址?

最佳答案

@Bob's answer 添加更多信息并假设您还需要在 HTML 中找到 script 标签,其中可能有其他 script 标签。

我们的想法是定义一个正则表达式,用于locating the element with 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

这里我们使用 simple regular expression for the email address ,但我们可以走得更远,对此更加严格,但我怀疑这对于这个问题是否有实际必要性。

关于python - 如何使用 Beautiful Soup 提取 &lt;script&gt; 标签中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38547569/

相关文章:

python - 在 Python 中访问 Flatbuffers 联合

python - 将 sys.stdout 重定向到特定的 Jupyter Notebook 单元格

webkit - 自动浏览复杂网页

python - 使用 BeautifulSoup find_all 从最后一个元素获取内容

python - Bs4 按类别查找 p 标签

python - 使用实际数据在图上添加回归线

python - 更新环境时出现 ValueError : not enough values to unpack (expected 2, 1)

python - 使用 python 进行 Web 抓取 - 不断从 jquery 表中获取重复的第一行值

php - 如何使用 Simple HTML Dom Parser 处理页面抓取错误

c++ - 使用 QWebView 和 QWebElement 的网页抓取返回增加的倍数