【问题标题】:Scraping- Error: No JSON object could be decoded抓取 - 错误:无法解码 JSON 对象
【发布时间】:2016-11-05 12:01:55
【问题描述】:

所以我试图在这个页面上抓取表格用于教育目的:https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/5826/Stages/12496/TeamStatistics/England-Premier-League-2015-2016

我的打印回复给出了

<Response [200]>

这意味着它很好,对吧?但是当我将 response.json() 放入一个变量并尝试将其打印出来时,我得到“ValueError: No JSON Object could be decoded”

这是我的代码:

import requests


headers = {
'accept-encoding': 'gzip, deflate, sdch, br',
'x-requested-with': 'XMLHttpRequest',
'accept-language': 'nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4',
'user-agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36',
'accept': 'application/json, text/javascript, */*; q=0.01',
'referer': 'https://www.whoscored.com/Regions/252/Tournaments/2/Seasons/5826/Stages/12496/TeamStatistics/England-Premier-League-2015-2016',
'model-last-mode': 'GgVBlUgZgMvkAZA4DkgCYAYJauGyQ5BQAQW5ZLGd5qk=',
'authority': 'www.whoscored.com',
'cookie': 'visid_incap_774904=E5yi1BIhTqKa7QY7CTHvbCgWQlcAAAAAQUIPAAAAAAAbmGcCJZ/yA5tiB2vsu1g6; crtg_rta=cc970250d%3Bcc300600d%3Bhw970250d%3B; incap_ses_128_774904=GEttC+rfv2wXecdRg7/GAUAaeVcAAAAA5ZSbfyTF02TorJxEKZxkUg==; _gat=1; _ga=GA1.2.1512369618.1463948865',
}

params = {
'category': 'shots',
'subcategory': 'zones',
'statsAccumulationType': '0',
'field': '',
'tournamentOptions': '',
'timeOfTheGameStart': '0',
'timeOfTheGameEnd': '5',
'teamIds': '',
'stageId': '12496',
'sortBy': 'Rating',
'sortAscending': '',
'page': '1',
'numberOfTeamsToPick': '',
'isCurrent': 'true',
'formation': ''
 }

response = requests.get('https://www.whoscored.com/StatisticsFeed/1/GetTeamStatistics?category=shots&subcategory=zones&statsAccumulationType=0&field=&tournamentOptions=&timeOfTheGameStart=0&timeOfTheGameEnd=5&teamIds=&stageId=12496&sortBy=Rating&sortAscending=&page=1&numberOfTeamsToPick=&isCurrent=true&formation=', headers=headers, params=params)


data = response.json()
print data

【问题讨论】:

    标签: python json python-2.7 web-scraping python-requests


    【解决方案1】:

    您正在打印一个对象,您需要调用 text 属性。响应对象没有 json 属性。

    result = requests.get(url)
    print result.text
    

    如果你想得到一个json结果,你需要将结果是一个字符串,然后将它转换为一个dict,然后使用json.dumps将它转换成json

    【讨论】:

    • 它似乎返回的是 HTML 而不是 JSON 看起来它受到 Incapsula 的保护。
    • 在这种情况下,您应该使用 BeautifulSoup 或类似的方法来抓取它,将其转换为 dict 并因此转换为 json 元素。
    • 谢谢,我读到 BS 和 Selenium 都可以工作。我会调查他们两个。感谢您的帮助!
    猜你喜欢
    • 2015-03-29
    • 2023-03-12
    • 2018-08-14
    • 2014-06-21
    • 1970-01-01
    • 2019-01-21
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多