Python BeautifulSoup 合并来自 HTML 站点的两个数组的数组元素

Python BeautifulSoup combine array elements from two array from HTML site

我创建了一个脚本来从 HTML 网站获取数据。我使用beautiful soup,主要目的是实现网页抓取。我想从 HTML 网站上的 JavaScript 变量中获取数据。有两个数组,我想从两个数组中提取值并放入 python 数组以查看数据。不幸的是,该网站无法在线访问。

下面是我的代码

#Import module to achieve the respective function
import requests, bs4, re
soup = bs4.BeautifulSoup(r.text, "lxml")
script = soup.find('script')
result = re.search("var\sjHst=.*]];", str(script))
result1 = re.search("var\s types=.*]];, str(script))
if result1:
    print ("MATCH for types")
else:
    print ("no match for types")
if result:
    print ("MATCH for jHst")
else:
    print ("no match for jHst")

for ef in script:
    all_value =  ef        
    if all_value:            
        m = p.match(all_value)
        print m   

这是 HTML 中的 Javascript 代码。类型变量是 header 而 jHst 是由数据组成的 table 内容。

</table>
</html>
<script language="JavaScript1.2"><!--
var types=['-','Print','Copy','Scan','Retrieve from Folder','Fax','Report']; 
var jHst=[['TEST.pdf','abcd',1,1,20,'Center Tray - Lower','LPD','26/10/2020 11:04'],['resumeform.docx','10.50.121.0',1,1,2,'Center Tray - Lower','Port 9100','22/10/2020 07:58']];

我正在考虑如何像下面这样将值加载到数组中。

Header header header header header
values values values values values

我执行了beautifulsoup得到了HTML和javascript等数据。然后我执行了一个正则表达式来查找变量“var jHst”和“var types”。如果可用,我想尝试将两个数组加载到 1 个数组中,但我一直在研究如何获取各个变量的数据并加载到数组中。我知道我们需要使用 append python 命令来实现将数据加载到数组但是如何从站点获取数据并加载它。请大家帮忙

谢谢

要将 javascript 变量加载到 python 列表中,您可以使用 reast.literal_eval。例如:

import re
from ast import literal_eval

txt = '''</table>
</html>
<script language="JavaScript1.2"><!--
var types=['-','Print','Copy','Scan','Retrieve from Folder','Fax','Report']; 
var jHst=[['TEST.pdf','abcd',1,1,20,'Center Tray - Lower','LPD','26/10/2020 11:04'],['resumeform.docx','10.50.121.0',1,1,2,'Center Tray - Lower','Port 9100','22/10/2020 07:58']];
'''

types = literal_eval( re.search(r'var types=(\[.*\]);', txt).group(1) )
jHst = literal_eval( re.search(r'var jHst=(\[.*\]);', txt).group(1) )

print(types)
print(jHst)

打印:

['-', 'Print', 'Copy', 'Scan', 'Retrieve from Folder', 'Fax', 'Report']
[['TEST.pdf', 'abcd', 1, 1, 20, 'Center Tray - Lower', 'LPD', '26/10/2020 11:04'], ['resumeform.docx', '10.50.121.0', 1, 1, 2, 'Center Tray - Lower', 'Port 9100', '22/10/2020 07:58']]