Javascript 使用Python从html中的脚本对象函数获取文本/属性

Javascript 使用Python从html中的脚本对象函数获取文本/属性,javascript,python,html,beautifulsoup,Javascript,Python,Html,Beautifulsoup,我一直在一个网站上做网页抓取,在那里我需要获取javascript,这样我就可以提取数据,如名称、创建日期和一些随机生成的代码,如下所示 是否有一种有效/任何方法可以从html网页的中的脚本对象函数中获取文本/属性 我能够使用BeautifulSoup找到脚本部分,其中嵌入的函数如下所示: <script type="text/javascript"> //COMMENT// Some data already here $(document).ready(f

我一直在一个网站上做网页抓取,在那里我需要获取javascript,这样我就可以提取数据,如名称、创建日期和一些随机生成的代码,如下所示

是否有一种有效/任何方法可以从html网页的
中的脚本对象函数中获取文本/属性

我能够使用BeautifulSoup找到脚本部分,其中嵌入的函数如下所示:

<script type="text/javascript">

//COMMENT// Some data already here

$(document).ready(function() {
    name.init("<website Link>")
    lang.init("en", "GB")
    data.init("hello", "", "AT3K21SDV", "YIERE34ITEW832WCNG3VMASJKHO345JKRELRK5", "")
});
</script>

//注释//此处已有一些数据
$(文档).ready(函数(){
name.init(“”)
lang.init(“en”、“GB”)
init(“你好”,“AT3K21SDV”,“YIERE34ITEW832WCNG3VMASJKHO345JKRELRK5”,“IIERE34ITEW832WCNG3VMASJKHO345JKRELRK5”)
});
具体来说,我需要获得
$(document).ready(function()
部分,其中包括
AT3K21SDV
yiere34itew832wcng3vmasjkho345jkrerk5


我一直在绞尽脑汁,试图用这样的索引来获取它;`soup[3:40]但不起作用

beautifulsoup
不解析JavaScript,所以你需要使用其他工具。例如
re
来提取信息:

import re
from ast import literal_eval


txt = '''<script type="text/javascript">

//COMMENT// Some data already here

$(document).ready(function() {
    name.init("<website Link>")
    lang.init("en", "GB")
    data.init("hello", "", "AT3K21SDV", "YIERE34ITEW832WCNG3VMASJKHO345JKRELRK5", "")
});
</script>'''

data = re.search(r'data\.init(\(.*?\))', txt).group(1)
data = literal_eval(data)

print(data[2], data[3])

编辑:如果内部
data.init(…)
是换行符,则必须在
re.search()中设置
flags=re.DOTALL


beautifulsoup
不解析JavaScript,因此需要使用其他工具。例如
re
提取信息:

import re
from ast import literal_eval


txt = '''<script type="text/javascript">

//COMMENT// Some data already here

$(document).ready(function() {
    name.init("<website Link>")
    lang.init("en", "GB")
    data.init("hello", "", "AT3K21SDV", "YIERE34ITEW832WCNG3VMASJKHO345JKRELRK5", "")
});
</script>'''

data = re.search(r'data\.init(\(.*?\))', txt).group(1)
data = literal_eval(data)

print(data[2], data[3])

编辑:如果内部
data.init(…)
是换行符,则必须在
re.search()中设置
flags=re.DOTALL


我在
data=re.search(r'data\.init(\(.*?))),txt)行中得到了
AttributeError:'NoneType'对象没有属性'group'
。group(1)
因为我已经使用BeautifulSoup获得了javascript部分,所以我做了
txt=str(javaScriptData)
其中
javaScriptData
包含sectiom@Legion如果出现此错误,则变量
txt
不包含字符串
data.init(…)
。您需要检查这种可能性。@Andej Kesely如果字符串更长;
mywebsite.data.init(…)
,然后我包含的搜索是
re.search(r'mywebsite\.data\.init(\(.*?)),txt)。组(1)
哪一个应该是正确的..不确定,但可能是因为我在前面的步骤中使用了
BeautifulSoup
。@Legion是的,你可以这样做。有一个网站Regex101,你可以在那里尝试你的正则表达式:把字符串和正则表达式放在那里,看看它是否有效。@Andej Kesely这与缩进格式有关(如图所示,它将其视为一个换行符。有没有办法自动重新格式化代码?我得到了
AttributeError:'NoneType'对象在
data=re.search(r'data\.init(\(.*?))),txt.group(1)
行中没有属性“group”
,因为我已经使用BeautifulSoup获得了javascript部分,所以我得到了
txt=str。)(javaScriptData)
其中
javaScriptData
包含sectiom@Legion如果出现此错误,则变量
txt
不包含字符串
data.init(…)
。您需要检查这种可能性。@Andej Kesely如果字符串更长;
mywebsite.data.init(…)
,然后我包含的搜索是
re.search(r'mywebsite\.data\.init(\(.*?)),txt)。组(1)
哪一个应该是正确的..不确定,但可能是因为我在前面的步骤中使用了
BeautifulSoup
。@Legion是的,你可以这样做。有一个网站Regex101,你可以在那里尝试你的正则表达式:把字符串和正则表达式放在那里,看看它是否有效。@Andej Kesely这与缩进格式有关(它将其视为此处所示的换行符。是否有方法自动重新格式化代码?
import re
from ast import literal_eval


txt = '''<script type="text/javascript">

//COMMENT// Some data already here

$(document).ready(function() {
    ab.info.init("sv", "pp", "f", "NONE",
        "rw", "3r7u6565667",
        "3435345")
});
</script>'''

data = re.search(r'info\.init(\(.*?\))', txt, flags=re.DOTALL).group(1)
data = literal_eval(data)

print(data)
('sv', 'pp', 'f', 'NONE', 'rw', '3r7u6565667', '3435345')