如何使用Beautiful Soup获取<script>标签中的功能?

时间:2018-02-04 08:35:49

标签: javascript html beautifulsoup

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

&#xA;&#xA;
 &lt; script&gt;&#xA; function loadDoc(){& #xA; var xhttp = new XMLHttpRequest();&#xA; xhttp.onreadystatechange = function(){&#xA; if(this.readyState == 4&amp;&amp; this.status == 200){&#xA; document.getElementById(“demo”)。innerHTML =&#xA; this.responseText;&#XA; }&#XA; };&#XA; xhttp.open(“GET”,“ajax_info.txt”,true);&#xA; xhttp.send();&#xA;}&#xA;&lt; / script&gt;&#xA;  
&#xA;&#xA;

如何使用美丽的汤来在.open函数中获取第二个参数?

&#xA;&#xA;
&#xA;

这种情况是“ajax_info.txt”

&#xA;
&#xA;

1 个答案:

答案 0 :(得分:0)

BeautifulSoup不是为此而构建的。它用于解析HTML而不是JavaScript或任何其他Web语言。

更简单的方法是使用headless browserPhantomJSSelenium

您也可以使用regex解析JavaScript,或者不使用this post

中所述的正则表达式

<小时/> 编辑:

示例:

  

我不知道如何使用无头浏览器,虽然这可能是未来的最佳方式,但是我知道足够的正则表达式来创建一个快速而肮脏的示例,它将适用于您上面列出的示例。

b = """function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML =
  this.responseText;
  }
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
}""" 

# Get value between <script></script> using  BeautifulSoup and store in "b"

import re
a = re.compile('"GET", "[\S ]+"')
c = a.search(b).group()
print(c[8:-1])