Python(BeautifulSoup) - 从<script>获取href

时间:2017-06-16 09:01:05

标签: python web-scraping beautifulsoup

我正在研究“Video Downloader”,我对BeautifulSoup4有一个问题。

&#xA;&#xA;

这是html的一部分,我希望得到一个href:< / p>&#xA;&#xA;

 &lt; script src =“/ static / common.js?v7”&gt;&lt; / script&gt;&#xA;&lt; script type =“text / JavaScript的“&GT;&#XA; var c = 6;&#xA; window.onload = function(){&#xA;计数();&#XA; }&#XA;&#XA; function closeAd(){&#xA; $( “#易于箱”)隐藏();&#XA; }&#XA;&#XA; function notLogedIn(){&#xA; $(“#not-loged-in”)。html(“你需要登录才能下载这部电影!”);&#xA; }&#XA;&#XA; function count(){&#xA; if(document.getElementById('countdown')!= null){&#xA; c  -  = 1;&#xA; //如果计数器在范围内,我们将剩余的秒数放在&lt; span&gt;下面&#xA; if(c> = 0)&#xA; if(c == 0){&#xA; document.getElementById('countdown')。innerHTML ='';&#xA; }&#XA;别的{&#xA; document.getElementById('countdown')。innerHTML = c; &#XA; }&#XA;别的{&#xA; document.getElementById('download-link')。innerHTML ='&lt; a style =“text-decoration:none;” href =“http://s896.vshare.io/download,9999999999999999999999999999999999999999-f6192405453bf5ff3cfe41a488d8390d,5944ed28,4d948c5.avi”&gt;点击此处&lt; / a&gt;下载请求的文件。';&#xA;返回;&#XA; &#xA; // setTimeout('count()',1000);&#xA; }&#XA; }&#XA; &lt; / script&gt;&#xA;&lt; script type =“text / javascript”src =“/ static / flowplayer / flowplayer-3.2.13.min.js”&gt;&lt; / script&gt;&#xA;  
&#xA;&#xA;

这里是我要打印的href:

&#xA;&#xA;
  href =“http: //s896.vshare.io/download,999999999999999999999994599999999999999999-f6192405453bf5ff3cfe41a488d8390d,5944ed28,4d948c5.avi"

我正在尝试这个,但是它不起作用。

&#xA;&#xA;
  for in soup3.find_all('a'):&#xA;如果'href'在a.attrs中:&#xA;印刷(一个[ 'HREF'])&#XA;  
&#XA;

1 个答案:

答案 0 :(得分:0)

Beautiful Soup可以解析HTML和XML,而不是JavaScript。 您可以使用正则表达式来搜索此代码 使用<a [^>]*?(href=\"([^\">]+)\"),您可以匹配此代码中的所有内容:

  • <a - 是a代码
  • [^>]*? - 可以包含任何不是>
  • 的字符
  • href=" - 有href
  • [^\">]+ - 除">
  • 以外的任意数量的字符

要从html中提取脚本代码,您可以使用
script = soup.find('script', {'type': 'text/javascript'})
然后解析它,使用
re.search(r"<a [^>]*?(href=\"([^\">]+)\")", script.text)
请先记得import re

print(re.search(r"<a [^>]*?(href=\"([^\">]+)\")", script.text)[1])
# href="http://s896.vshare.io/download,9999999999999999999999999999999999999999-f6192405453bf5ff3cfe41a488d8390d,5944ed28,4d948c5.avi
print(re.search(r"<a [^>]*?(href=\"([^\">]+)\")", script.text)[2])
# http://s896.vshare.io/download,9999999999999999999999999999999999999999-f6192405453bf5ff3cfe41a488d8390d,5944ed28,4d948c5.avi

阅读正则表达式。如果您打算经常使用模式,请先编译它 https://docs.python.org/3/library/re.html