Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scrapy从javascript脚本中提取数据_Javascript_Python_Xpath_Scrapy_Web Crawler - Fatal编程技术网

Scrapy从javascript脚本中提取数据

Scrapy从javascript脚本中提取数据,javascript,python,xpath,scrapy,web-crawler,Javascript,Python,Xpath,Scrapy,Web Crawler,我正试图从espn网站上获取比赛的赔率。“moneyLine”的可能性隐藏在一个脚本中,我就是不知道如何访问它。理想情况下,每场比赛的赔率都是成排的。我已经成功地提取了队名和分数,我希望赔率也能随之提高 scrapy shell fetch('http://www.espn.com/nfl/schedule/_/week/1') response.xpath("//script[contains(., 'moneyLine')]/text()") 这是输出 [<Selector xpat

我正试图从espn网站上获取比赛的赔率。“moneyLine”的可能性隐藏在一个脚本中,我就是不知道如何访问它。理想情况下,每场比赛的赔率都是成排的。我已经成功地提取了队名和分数,我希望赔率也能随之提高

scrapy shell
fetch('http://www.espn.com/nfl/schedule/_/week/1')
response.xpath("//script[contains(., 'moneyLine')]/text()")
这是输出

[<Selector xpath="//script[contains(., 'moneyLine')]/text()" data='\n\t\t\tvar espn = espn || {};\n\n\t\t\t// Build '>]
[]
这是firefox inspector窗口中的一个示例,我可以看到“moneyLine”项目,只是无法将它们隔离开来
您的数据位于JSON格式的
数据:
队列:
之间

您可以使用标准字符串函数(即
find()
,切片)来切断此部分。
然后可以使用模块
json
转换为python字典。
然后你只需要找到
moneyLine
在这本词典中的位置

scrapy shell 'http://www.espn.com/nfl/schedule/_/week/1'

# get `<script>` as text
items = response.xpath("//script[contains(., 'moneyLine')]/text()")
txt = items.extract_first()

# find start and end of data 
#(I found this manually checking txt)
start = txt.find('data:') + 6 # manually found how many add to get correct JSON string
end = txt.find('queue:') - 6  # manually found how many substract to get correct JSON string

json_string = txt[start:end]

# convert to python dictionary
import json
data = json.loads(json_string)

# example data 
#(I found this manually using `data.keys(), data['sports'][0].keys(), etc.)
data['sports'][0]['leagues'][0]['events'][0]['odds']['home']['moneyLine']
scrapy shell'http://www.espn.com/nfl/schedule/_/week/1'
#将``作为文本获取
items=response.xpath(//脚本[包含(,'moneyLine')]/text())
txt=items.extract_first()
#查找数据的开始和结束
#(我在手动检查txt时发现)
start=txt.find('data:')+6#手动查找要获得正确JSON字符串的add数量
end=txt.find('queue:')-6#手动查找要获得正确的JSON字符串所需的减法
json_string=txt[开始:结束]
#转换为python字典
导入json
data=json.load(json_字符串)
#示例数据
#(我是使用'data.keys()、data['sports'][0].keys()等手动找到的。)
数据['sports'][0]['leagues'][0]['events'][0]['Lops']['home']['moneyLine']
您的数据位于JSON格式的
数据:
队列:
之间

您可以使用标准字符串函数(即
find()
,切片)来切断此部分。
然后可以使用模块
json
转换为python字典。
然后你只需要找到
moneyLine
在这本词典中的位置

scrapy shell 'http://www.espn.com/nfl/schedule/_/week/1'

# get `<script>` as text
items = response.xpath("//script[contains(., 'moneyLine')]/text()")
txt = items.extract_first()

# find start and end of data 
#(I found this manually checking txt)
start = txt.find('data:') + 6 # manually found how many add to get correct JSON string
end = txt.find('queue:') - 6  # manually found how many substract to get correct JSON string

json_string = txt[start:end]

# convert to python dictionary
import json
data = json.loads(json_string)

# example data 
#(I found this manually using `data.keys(), data['sports'][0].keys(), etc.)
data['sports'][0]['leagues'][0]['events'][0]['odds']['home']['moneyLine']
scrapy shell'http://www.espn.com/nfl/schedule/_/week/1'
#将``作为文本获取
items=response.xpath(//脚本[包含(,'moneyLine')]/text())
txt=items.extract_first()
#查找数据的开始和结束
#(我在手动检查txt时发现)
start=txt.find('data:')+6#手动查找要获得正确JSON字符串的add数量
end=txt.find('queue:')-6#手动查找要获得正确的JSON字符串所需的减法
json_string=txt[开始:结束]
#转换为python字典
导入json
data=json.load(json_字符串)
#示例数据
#(我是使用'data.keys()、data['sports'][0].keys()等手动找到的。)
数据['sports'][0]['leagues'][0]['events'][0]['Lops']['home']['moneyLine']

它可以将所有脚本作为一个字符串提供给您,您必须使用标准字符串函数或正则表达式才能使用它。如果您得到的字符串是正确的JSON字符串,那么您可以使用module
JSON
将其转换为python字典。page可以使用javascript从另一个url读取数据(主要是JSON数据)。如果您在Firefox中使用DevTool找到这个url,那么您可以使用scrapy读取它。“page”是一种方法吗?您所指的“另一个url”是什么?
page
的意思是
web页面
/
portal
-您必须使用
DevTool
检查所有
XHR
请求-如果其中一个请求发回您的数据,那么您就有了
另一个url
。它可以将所有脚本作为一个字符串提供给您,并且您必须使用标准字符串函数或正则表达式来处理此问题。如果您得到的字符串是正确的JSON字符串,那么您可以使用module
JSON
将其转换为python字典。page可以使用javascript从另一个url读取数据(主要是JSON数据)。如果您在Firefox中使用DevTool找到这个url,那么您可以使用scrapy读取它。“page”是一种方法吗?你指的是什么“另一个url”?
page
是指
web页面
/
portal
-你必须使用
DevTool
检查所有
XHR
请求-如果其中一个请求发回你的数据,那么你就有了另一个
url
。谢谢!这是我去那里的绝大部分路。显然,我在学习xpath和json……只需要找到时间,谢谢!这是我去那里的绝大部分路。很明显,我在学习xpath和json……只需要找到时间