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 列表中,您可以使用 re
和 ast.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']]
我创建了一个脚本来从 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 列表中,您可以使用 re
和 ast.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']]