用正则表达式从html文档中提取java脚本

2024-06-16 11:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用正则表达式从google.com中提取java脚本。在

程序

import urllib
import re
gdoc = urllib.urlopen('http://google.com').read()
scriptlis = re.findall(r'<script>(.*?)</script>', gdoc)
print scriptlis

输出:

^{pr2}$

有谁能告诉我如何只用正则表达式从html文档中提取java脚本吗。在


Tags: import程序re脚本comhttpreadgoogle
3条回答

这是有效的:

import urllib
import re
gdoc = urllib.urlopen('http://google.com').read()
scriptlis = re.findall('(?si)<script>(.*?)</script>', gdoc)
print scriptlis

这里的键是(?si)。“s”设置“dotall”标志(与re.DOTALL相同),它使Regex在换行符上匹配。这实际上是你问题的根源。上的脚本谷歌跨越多行,所以Regex不能匹配它们,除非您告诉它在(.*?)中包含新行。在

“i”设置“ignorcase”标志(与re.IGNORECASE相同),它允许它匹配任何可以是JavaScript的内容。现在,这不是完全必要的,因为Google的代码很好。但是,如果您有一些糟糕的代码执行类似于<SCRIPT>...</SCRIPT>的代码,那么您将需要这个标志。在

我认为问题是<script>和{}之间的文本是几行,所以您可以尝试这样的方法:

rg = re.compile('<script>(.*)</script>', re.DOTALL)
result = re.findall(rg, gdoc)

如果您对第三方库没有问题,^{}^{}结合在一起是一个很好的组合:

import requests
from bs4 import BeautifulSoup as bs
r = requests.get('http://www.google.com')
p = bs(r.content)
p.find_all('script')

相关问题 更多 >