用请求抓取网站,将javascript变量数据转换为python对象

用请求抓取网站,将javascript变量数据转换为python对象,python,Python,我正在抓取一个网页,它有一堆存储在javascript变量中的相关信息 response = requests.get('') r = response.text 在r中,有一个javascript变量,其中包含我想要的一组数据 这是从服务器返回的内容: <!DOCTYPE html> <html> <head> .... <script> var candidate_details_input_string = = '{ ...}' &l

我正在抓取一个网页,它有一堆存储在javascript变量中的相关信息

response = requests.get('')
r = response.text
r
中,有一个javascript变量,其中包含我想要的一组数据

这是从服务器返回的内容:

<!DOCTYPE html>
<html>
<head>
....

<script>
 var candidate_details_input_string =  = '{ ...}'
</script>
....
</head>
</html>
但是,这将返回javascript字符串,但我使用的是Python。它看起来像这样:

x = '[{\\"i_form_name\\":\\"Applicant_Information_Form\\",\\"completed_time\\":\\"2017-02-03T19:12:00.000Z\\"},{\\"i_form_name\\":\\"Voluntary_Self_Identification_of_Disability_template\\",\\"completed_time\\":\\"2017-02-03T19:14:00.000Z\\"},{\\"i_form_name\\":\\"Voluntary_Self_Identification_of_Disability_template\\",\\"completed_time\\":\\"2017-02-05T19:21:00.000Z\\"},{\\"i_form_name\\":\\"Government_Entity_Questions_Form\\",\\"completed_time\\":\\"2018-07-03T00:29:00.000Z\\"}]'
这是一个javascript字符串,通常是JSON.parse(),但不能,因为我正在python中对其进行删减


有没有办法把它变成我可以使用的Python对象?我的默认答案是手工操作,替换所有的
\\
,并将
'
切换为

您将从请求中获取JSON。尝试使用内置的python JSON库,您不必自己进行任何手动解析

import json
import requests

response = requests.get('')
r = todos = json.loads(response.text)

在这种情况下,您可以使用
ast.literal\u eval

data = '''<!DOCTYPE html>
<html>
<head>
....

<script>
 var candidate_details_input_string = '{"i_form_name":"Applicant_Information_Form"}';
</script>
....
</head>
</html>'''

import re
from ast import literal_eval

s = re.findall(r'var candidate_details_input_string\s*=\s*\'(.*?\})\s*\'\s*;', data, flags=re.DOTALL)[0]
data = literal_eval(s)
print(data)

您可以将x变量加载到json(字典)中。我们需要替换那些
\
,一切正常:

导入json
x='[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\2017-02-05T19:21:00.000Z\\\”,{\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
data=json.load(x.replace('\\','')
打印(数据)

您可以共享URL吗?有多种方法可以从文本中提取javascript变量。不幸的是,它不是一个可公开访问的URL:(使用标记更新了它实际上是
{..}
,对不起!您可以发布
中的示例内容吗?{…}“
括号?我从JSON中得到一个HTML字符串,其中包含一些Javascript。我得到以下错误:
JSON.decoder.JSONDecodeError:期望值:第1行第1列(char 0)
@Morgan像您已经做过的那样隔离JSON字符串(或使用HTML解析器获取该值),然后将其传递给
JSON.loads()
我在
文本评估中遇到错误。
语法错误:行继续后出现意外字符character@MorganAllen如果您发布字符串中的内容,适当调整正则表达式,这会有所帮助。让我看看是否可以删除机密信息
data = '''<!DOCTYPE html>
<html>
<head>
....

<script>
 var candidate_details_input_string = '{"i_form_name":"Applicant_Information_Form"}';
</script>
....
</head>
</html>'''

import re
from ast import literal_eval

s = re.findall(r'var candidate_details_input_string\s*=\s*\'(.*?\})\s*\'\s*;', data, flags=re.DOTALL)[0]
data = literal_eval(s)
print(data)
{'i_form_name': 'Applicant_Information_Form'}