【发布时间】:2020-06-17 05:57:26
【问题描述】:
我正在尝试从this page 中提取 Dota2 TI9 国际赛的全部赛程和结果。 我寻找的信息在标签下和“schedule_data”下。
到目前为止,这就是我所拥有的
import requests, re, json
from bs4 import BeautifulSoup as bs
url = 'http://www.dota2.com/international/schedule/0/0/?l=english'
page = requests.get(url)
soup = bs(page.text,'html.parser')
all_javascript = soup.find_all(name='script',type='text/javascript')
all_javascript[:] = [x for x in all_javascript if(re.search("schedule_data",x.text))]
data = all_javascript[0]
new_data = json.loads(data.text)
我找到所有的“脚本”标签,然后搜索“schedule_data”模式来识别我需要的标签。但是,现在最后一行失败并出现错误
new_data = json.loads(data.text)
Traceback (most recent call last):
File "<ipython-input-68-447d26a16d5b>", line 1, in <module>
new_data = json.loads(data.text)
File "C:\Users\templ\Anaconda3\lib\json\__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "C:\Users\templ\Anaconda3\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\templ\Anaconda3\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
JSONDecodeError: Expecting value
我在这里查看了json loads example、Here 和here 的解决方案,但这些都不能解决问题。这些示例似乎表明是 url 请求失败或翻译错误导致 json 加载失败,但我没有这些。
print(type(data.text))
为我返回 str,我认为这是 json 加载的正确数据类型。
请帮忙
【问题讨论】:
-
你能说说你需要什么输出吗?
-
为什么是
all_javascript[:] =?请分享相关的 HTML 以及程序中的值,请参阅minimal reproducible example。 -
我需要按游戏提取比赛 ID、开始时间和结束时间以及获胜者。我现在正在尝试从该来源获取比赛 ID、获胜者和失败者,并使用 api.opendota.com/api/matches{match_id} 来获取相关的比赛开始和结束时间。我想将这一切放入一个漂亮的 Excel 中,如下所示:[比赛 ID,开始时间(EDT),日期,日期,比赛长度,A 队,B 队,获胜者]
标签: python beautifulsoup