【问题标题】:Python web scrape which uses a backend json data file使用后端 json 数据文件的 Python 网页抓取
【发布时间】:2020-08-10 03:42:04
【问题描述】:

我有一个 url,其中包含有关某人的一些数据以及在各个科目中获得的成绩。现在我想使用 python 提取这些数据。所以我的基本方法是-

import urllib.request
url='www.example.com'
webUrl  = urllib.request.urlopen(url)
data = webUrl.read()
print(data)

但是我没有在 html 中的某些地方填充数据,而是意识到 url 使用了一个 json 后端文件,所以我得到的是这样的-

<span style="font-weight:700">Academic Session : {{y['student_detail_json'].Academic_Year}}

所以如果我只是提取html,它基本上是没有用的。那么有没有一种方法可以在js执行后提取数据。 Selenium 是一种选择,但我觉得它有点重,如果有更有效的方法,我会很高兴

【问题讨论】:

  • 您是否尝试过直接获取 JSON 而不是 HTML?
  • @HernánAlarcón 这是我的第一选择,但不可能做到
  • 为什么不呢? this 不是 JSON 网址吗?
  • @HernánAlarcón 哦,是的,非常感谢!!!

标签: javascript html python-3.x web-scraping


【解决方案1】:

您可以访问 JSON。简单的例子。

import requests
url = "https://test.com"
payload = {}
headers = {}
response = requests.request("GET", url, headers=headers, data = payload)
print(response.json())

【讨论】:

    【解决方案2】:

    尝试使用 chrome 开发工具并找到获取请求,然后尝试以下操作:

    看起来您需要添加几个标头,然后您可以像往常一样访问 json,例如

    import requests
    import json
    
    headers={'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0', 'Accept': 'application/json; charset=utf-8'}
    r = requests.get('https://stats.nba.com/stats/boxscoreplayertrackv2/?GameID=0021700300', headers=headers)
    
    j =r.json()
    
    for row in j['resultSets']:
        print (row['name'])
        for rowSet in row['rowSet']:
            print (rowSet)
    

    【讨论】:

      猜你喜欢
      • 2014-11-10
      • 2021-08-29
      • 1970-01-01
      • 2015-09-16
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多