使用BeautifulSoup在DOM setAttribute JavaScript中获取值

时间:2016-01-05 08:32:49

标签: javascript python regex dom beautifulsoup

我正在尝试使用 BeautifulSoup 在JavaScript中提取setAttribute元素中的值。我尝试使用正则表达式,但它返回None

script标记如下

<script>            
     var iframe = document.createElement('iframe');
     iframe.setAttribute("src", "Value i need to get");
     iframe.frameBorder=0;
     iframe.scrolling="no";
     iframe.width="300px";
     iframe.height="24px";
     document.getElementById("m_iframe").appendChild(iframe);               
</script> 

Python代码:

        html=url.read()
        soup=BeautifulSoup(html,"html.parser")
        p = re.compile('\s+iframe.setAttribute("src",\s+"(.*)");')
        all_script  = soup.find_all("script", {"src":False})
        for individual_script in all_script:
            all_value =  individual_script.string
            if all_value:            
                m = p.match(all_value)
                print m  

我的代码有什么问题?

如何获得这个价值?

3 个答案:

答案 0 :(得分:1)

关于你的正则表达式,问题是你没有转义setAttribute函数的括号,所以它只是将它们视为捕获组。试试这个正则表达式:`\ s + iframe.setAttribute(“src”,\ s +“(。*)”);'

如果你正在进行正则表达式刮擦,你根本不应该真的需要BeautifulSoup ...这样的事情就足够了:

html = url.read()
r = re.compile(r'\s+iframe\.setAttribute\("src",\s+"(.*)"\);')
match = r.match(html)
if match:
    print match.group()

答案 1 :(得分:1)

您可以使用简单的拆分来提取您想要的文本,我经常使用它,因为我对正则表达式不太好。

from bs4 import BeautifulSoup

html = """
<html>
    <script>
     var iframe = document.createElement('iframe');
     iframe.setAttribute("src", "Value i need to get");
     iframe.frameBorder=0;
     iframe.scrolling="no";
     iframe.width="300px";
     iframe.height="24px";
     document.getElementById("m_iframe").appendChild(iframe);
    </script>
</html>
    """
start = 'iframe.setAttribute("src", "'
end = '");'

soup = BeautifulSoup(html, 'html.parser')
cols = soup.findAll('script')
for i in cols:
    text_you_need = ((i.text.split(start))[1].split(end)[0])
    print(text_you_need)

你得到你想要的东西:

Value i need to get

您可以使用相同的代码段来获取两个字符串之间的文本,这涵盖了我打算进行抓取的大部分内容。

答案 2 :(得分:1)

试试这个正则表达式:

\s+iframe\.setAttribute\("src",\s+"([^"]+)"\);

DEMO:https://regex101.com/r/oO0fZ3/2