【问题标题】:Cannot retrieve json data from an url with python无法使用 python 从 url 中检索 json 数据
【发布时间】:2021-01-25 22:12:43
【问题描述】:

我正在尝试使用以下代码检索 json 数据。 json 数据在 chrome/inspect/preview 上显示得很好,但检索到的数据是错误消息。

主 url 是“https://www.dsmartgo.com.tr/film/aksiyon-macera”,目的是获取电影名称和图像 url。该网站似乎从https://service-dsmart.erstream.com/api/GetFilteredVideos 获取日期为json。

尝试使用 bs4 作为另一种选择来访问源代码,但信息隐藏在源代码中。

如何获取可以在 chrome/inspect/preview 中显示而不是错误消息的真实 json 数据?

提前致谢。

headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
html_content = requests.get(url, headers = headers).text
page_content = json.loads(html_content)

【问题讨论】:

  • 你有什么问题?

标签: python json web-scraping


【解决方案1】:

您必须使用有效的payload 发送POST 请求。不需要bs4,因为没有HTML 可以解析。

方法如下:

import requests


headers = {
    "Accept": "application/json, text/plain, */*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "en-US,en;q=0.9,pl;q=0.8",
    "Content-Type": "application/json;charset=UTF-8",
    "Host": "service-dsmart.erstream.com",
    "Origin": "https://www.dsmartgo.com.tr",
    "Referer": "https://www.dsmartgo.com.tr/",
    "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36",
}

content_id_url = "https://ues.ercdn.com/ues/client/get_trending_contents/?publicKey=8hopodesqeosh00atuv36uooh452i8t0"
payload = {"ids": [i['contentID'] for i in requests.post(content_id_url).json()['result']]}


response = requests.post(
    "https://service-dsmart.erstream.com/api/GetItemsByIds",
    json=payload,
    headers=headers,
).json()

for movie in response:
    print(movie['Name'])

输出:

Terminatör: Kara Kader
Sen Çal Kapımı 2020 10 07
Çukur - 2020 10 05
Derin Sular
Masumlar Apartmanı 2020 10 06
2036: Kökeni Bilinmeyen
Düşmanım
Eşkiya Dünyaya Hükümdar Olmaz - 2020 10 06
Ajanlar İş Başında
Menajerimi Ara 2020 10 06
Kingsman: Gizli Servis
Buz Devri: Büyük Çarpışma
Tavşan Jojo
Kırmızı Oda 2020 10 02
Yürüyen Ev : Zeynep - Özgür Karaman
Yıldızlara Doğru
Üç Telli Tutku / Emre Dayıoğlu
Asfaltın Kralları
Mucize Doktor - 2020 10 08
Yasak Elma - 2020 10 05
Arıza 2020 10 04
Kırmızı Oda 2020 10 09
Sefirin Kızı 2020 09 28
Uyanış: Büyük Selçuklu 2020 10 05
Gölün Fısıltısı / Doğan Anapa
Kuruluş Osman 2020 10 07
Bay Yanlış 2020 10 02
Sen Çal Kapımı 2020 09 30
Tepki
Salgın
Ramo 2020 10 09
Skandal
Ramo 2020 10 02
Kurye
Körfez Rüzgarı / Beste Önkol
Travma Merkezi
Kurşun Geçirmez
Garfield
Seninle Bir Ömür
Hekimoğlu 18. Bölüm
Rojo
Dişi Şahin
Kanunun Kuvveti
Yeni Hayat 5. Bölüm
Mucize Doktor - 2020 10 01
Masumlar Apartmanı 2020 09 29
Lucy Gökyüzünde
Hekimoğlu 20. Bölüm
Gizemli Kadın
Kuşatma

【讨论】:

  • 太好了,谢谢。以及如何获得正确的有效载荷?
  • 来自开发者工具 - 网络,在对上述 url 发出的请求的底部有有效负载。顺便说一句,如果您觉得答案有用,请接受它。
  • 好的,但是如何以 python 方式获取 id?我也需要废品的身份证,但从哪个来源?你能帮我解决这个问题吗?
  • @sume 我已经更新了答案。
  • 还有一个问题:你能解释一下你是如何到达 content_id_url 的吗?在开发工具中最有可能但是如何? :)
猜你喜欢
  • 2016-09-15
  • 2014-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多