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

Python 使用正则表达式从html文档中提取java脚本,python,regex,Python,Regex,我正在尝试使用正则表达式从google.com中提取java脚本 节目 import urllib import re gdoc = urllib.urlopen('http://google.com').read() scriptlis = re.findall(r'<script>(.*?)</script>', gdoc) print scriptlis 有人能告诉我如何仅使用正则表达式从html文档中提取java脚本吗 scriptlis = re.findal

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

节目

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

有人能告诉我如何仅使用正则表达式从html文档中提取java脚本吗

scriptlis = re.findall(r'<script\s*([^>]*)\s*>(.*?)</script', gdoc, re.I|re.S)

scriptlis=re.findall(r']*)\s*>(.*)我认为问题在于
之间的文本有几行,因此您可以尝试以下内容:

rg = re.compile('<script>(.*)</script>', re.DOTALL)
result = re.findall(rg, gdoc)
rg=re.compile('(.*),re.DOTALL)
结果=re.findall(rg,gdoc)
这项工作:

import urllib
import re
gdoc = urllib.urlopen('http://google.com').read()
scriptlis = re.findall('(?si)<script>(.*?)</script>', gdoc)
print scriptlis
导入urllib
进口稀土
gdoc=urllib.urlopen('http://google.com)。读()
scriptlis=re.findall('(?si)(.*?),gdoc)
打印脚本
这里的键是
(?si)
。“s”设置“dotall”标志(与“
re.dotall
”相同),使正则表达式与换行符匹配。这实际上是你问题的根源。google.com上的脚本跨越多行,因此正则表达式无法匹配它们,除非您告诉它在
(.*)
中包含换行符


“i”设置“ignorcase”标志(与
re.IGNORECASE
相同),这允许它匹配任何可以是JavaScript的内容。现在,这并不是完全必要的,因为谷歌代码非常好。但是,如果您的代码很差,并且与
类似,那么您需要使用此标志。

如果您对第三方库没有问题,请结合使用,这是一个很好的组合:

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

@rid是的,我在问为什么它不工作你的意思是
re.findall(r']*)>(.*?),gdoc)
。不工作
scriptlis=re.findall(r']*)>(.*?),gdoc)
输出:
[('',)]
我不知道哪一个是正确的,但当我将你的答案与@iCodez答案进行比较时,它并不相等\s*>(.*)ofc不是,因为我的脚本也将获取属性,而不仅仅是内联脚本。您希望它非reedy
re.compile('(.*),re.DOTALL)
+1工作。。我不知道哪一个是正确的,但是当我把你的答案与@Antti Haapala答案进行比较时,它并不等于
re.findall('(?si)(.*),gdoc)==re.findall(r']*)\s*>(*?)@woofmeow-好了。@iCodez我同时用谷歌搜索了它。。。但是谢谢。。今天学到了一些东西(新的lol:)那是因为他也得到了属性。我不认为你想要这个基于你给出的示例代码。如果您这样做,这应该可以正常工作。
(?si)(.*)
。我有一些问题。这就是为什么我只想使用正则表达式。
rg = re.compile('<script>(.*)</script>', re.DOTALL)
result = re.findall(rg, gdoc)
import urllib
import re
gdoc = urllib.urlopen('http://google.com').read()
scriptlis = re.findall('(?si)<script>(.*?)</script>', gdoc)
print scriptlis
import requests
from bs4 import BeautifulSoup as bs
r = requests.get('http://www.google.com')
p = bs(r.content)
p.find_all('script')