เรามาดึงข้อมูลจาก JSON กัน

JIn JIn
2 min readDec 24, 2017

--

วันนี้ผมก็จะมาพูดถึง JSON กันนะครับซึ่งว่ามีประโยชน์ไรบ้าง และเอาไปใช่ไรได้บ้างนะครับ ซึ่งก่อนอื่นเราก็ต้องมารู้จักกับเจ้า JSON กันก่อนนะครับว่ามันมีรูปแบบยังไงใช้งานยังไง

JSON เป็นวิธีการจัดการข้อมูลและใช้ในการแลกเปลี่ยนข้อมูลกับ Server จะถูกจัดให้อยู่ในรูปแบบของ Array ดังตัวอย่างนี้นะครับ

{
"username": "Yossatron",
"password": "123456789",
}

และเราสามารถเอาข้อมูลเหล่านี้มาใช้ทำอะไรได้บ้างนะครับ เราสามารถประกาศและดึงข้อมูลเหล่านี้ออกมาใช้งานได้โดยการกำหนด Tag ของใน Array เหล่านี้ได้นะครับ อย่างแรกเลยเราก็หาเว็บสักเว็บหนึ่งที่มาใช้ทดสอบกันเลย ผมก็จะเอาเว็บ Pantipเวลาเราเปิดเว็บต่างๆขึ้นมามันจะมีการส่ง Requests ไปให้ทางเว็บก่อนเสมอซึ่งตัวเหล่านี้ละครับจะเป็นตัวที่ส่งไปเพื่อให้เราเห็นข้อมูลต่างๆภายในเว็บนั้นเอง ถ้าถูกต้อง Http_code_status ก็จะขึ้นเป็น 200 OK แค่นี้เราก็ได้ข้อมูลมาแล้ว เราก็มาดูที่เว็บเลยครับให้ทำการ กดที่ F12 และเลือกที่ Network ละก็กดที่ XHR เพื่อที่จะดูว่ามันมีการส่ง Requests ไรไปบ้าง

https://pantip.com/topic/36751089

เห็นไหมครับ ว่ามันมีก้อน Request ต่างๆเข้ามา เราก็ดูชื่อมันเลยว่า ตัวไหนเป็นตัวที่เราต้องการนะครับ ที่ผมจะเอาออกมาก็คือ Comments ของมันนะครับก็ให้เราทำการคลิกเข้าไปดูเลยนะครับ และที่นี้เราก็มาดูว่าสิ่งที่ได้กลับมามีไรบ้าง ให้คลิกที่ Response ของมันเลยนะครับ

สิ่งที่เราได้มาก็คือข้อมูลของ Comment นั้นเองครับ นั้นแหละครับ มีข้อมูลทุกอย่างที่เราอยากได้ไปโชว์แล้วนะครับ ที่นี้ก็มาลงมือเขียนโค๊ดกันเลยดีกว่า

อย่างแรกเลยที่ต้องการก็คือ URL ของ ตัว Request ที่เราต้องการนะครับ ให้ทำการ Copy URL มาเลยละเขียนลงใส่ Code ลงไปครับซึ่งภาษาที่ผมเอามาเขียนก็จะใช้เป็น Python นะครับ

url = 'https://pantip.com/forum/topic/render_comments?tid=36751089&param=&type=3&time=0.6304763934415045&_=1514120179815'

ต่อมาก็คือ Header นะครับที่ต้องประกาศให้มันเสมอในบางเว็บอาจต้องการ Cookie หรือไรที่ฝั่ง Server ต้องการ หากส่งไปไม่ครบ มันก็จะ ERROR นั้นเองนะครับ เราเลยต้องประกาศเพื่อให้มันรู้ว่าต้องการไร

header = {'X-Requested-With':'XMLHttpRequest'}

ที่นี้เราก็จะมาเรียกใช่เพื่อดึงเข้า Code ของเรากันนะครับ

import requests
url = 'https://pantip.com/forum/topic/render_comments?tid=36751089&param=&type=3&time=0.6304763934415045&_=1514120179815'
header = {'X-Requested-With':'XMLHttpRequest'}
response = requests.get(url,headers=header)

แค่นี้เราก็ จะได้ Response ที่เราต้องการมาแล้วนะครับ แต่อย่าลืมว่ามันเป็น JSON เราก็ต้องเรียกใช้แบบ JSON โดยใช้คำสั่ง

import requests
import json
url = 'https://pantip.com/forum/topic/render_comments?tid=36751089&param=&type=3&time=0.6304763934415045&_=1514120179815'
header = {'X-Requested-With':'XMLHttpRequest'}
response = requests.get(url,headers=header)
x = json.loads(response.text)

แค่นี้เราก็เรียกไปใช้ได้แล้วนะครับ ในส่วนต่อมาเราจะแสดงยังไงให้เห็นใช่ไหมครับ ก็ Print ปกติ นะครับแต่เราจะเอาแค่ Comment มายังไงละใช่ไหม ในเมื่อมันมีข้อมูลเยอะขนาดนั้น เราก็ต้องกำหนดให้มันครับ โดยที่เราก็ต้องดูด้วยการสังเกตุว่า ชื่อใน Array มันมีอะไรซ้อนกันบ้าง

print(x['comments'][0]['message'])

แค่นี้มันก็จะปริ้น Comment มาให้แล้วนะครับง่ายใช้ไหมครับ

อ้างอิง : https://pantip.com/topic/36751089

--

--