如何使用Beautiful Soup在<script>标签中提取函数字符串?

时间:2016-12-06 20:35:08

标签: python beautifulsoup

在给定的.html页面中,我有一个这样的脚本标签:&#xA;如何使用漂亮的汤来提取“function getData()”下的“retrun”信息?

&#xA;&#xA;

&#xD;&#xA;
&#xD;&#xA;
 &lt;脚本&gt;&#xD;&#xA;函数getData()&#xD;&#xA; {&#xD;&#xA;返回“zip,city,state,MedianIncome,MedianIncomeRank,CostOfLivingIndex,CostOfLivingRank \ n10452,Bronx,NY,20606,2,147.7,74”;&#xD;&#xA;}&#xD;&#xA;&#xD; &#xA; function getResultsCount()&#xD;&#xA; {&#xD;&#xA;返回“1”;&#xD;&#xA;}&#xD;&#xA;&#xD;&#xA;&lt; / script&gt;  
&#xD;&#xA ;
&#的xD;&#XA;
&#的xD;&#XA;

&#XA;

1 个答案:

答案 0 :(得分:1)

可以说最简单的一种方法是使用regular expression来定位元素并提取所需的字符串:

import re

from bs4 import BeautifulSoup

data = """
<script>
function getData()
{
    return "zip,city,state,MedianIncome,MedianIncomeRank,CostOfLivingIndex,CostOfLivingRank\n10452,Bronx,NY,20606,2,147.7,74";
}

function getResultsCount()
{
    return "1";
}

</script>
"""

soup = BeautifulSoup(data, "html.parser")

pattern = re.compile(r'return "(.*?)";$', re.MULTILINE | re.DOTALL)
script = soup.find("script", text=pattern)

print(pattern.search(script.text).group(1))

打印:

zip,city,state,MedianIncome,MedianIncomeRank,CostOfLivingIndex,CostOfLivingRank
10452,Bronx,NY,20606,2,147.7,74

或者,您也可以使用JavaScript解析器,例如slimit,示例here