สารบัญ:
- ขั้นตอนที่ 1: ดูวิดีโอ
- ขั้นตอนที่ 2: ก่อนที่เราจะเริ่มต้น
- ขั้นตอนที่ 3: ไม่ใช่ API สาธารณะ (สปอยเลอร์: Instructables Has One!)
- ขั้นตอนที่ 4: ขูดข้อมูลโดยตรง
- ขั้นตอนที่ 5: การขูดข้อมูลโดยใช้เซิร์ฟเวอร์ภายนอก:
- ขั้นตอนที่ 6: ขีดจำกัดการใช้งาน
- ขั้นตอนที่ 7: ขอบคุณสำหรับการอ่าน
วีดีโอ: ขูดข้อมูลด้วย ESP8266/ESP32: 7 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
คุณเคยต้องการรับข้อมูลสำหรับโครงการ Arduino ของคุณ แต่ไม่มี API สาธารณะสำหรับมันหรือไม่? หรือในกรณีเช่น Instagram API ที่ขั้นตอนการตั้งค่าไม่สะดวก?
ในคำแนะนำนี้ เราจะดู 2 ตัวเลือกที่แตกต่างกันสำหรับการดึงข้อมูลจากเว็บไซต์สำหรับโครงการ ESP8266 หรือ ESP32 ของคุณ
ขั้นตอนที่ 1: ดูวิดีโอ
ฉันได้ทำวิดีโอที่ครอบคลุมสิ่งเดียวกับคำแนะนำนี้ ดังนั้นหากคุณสนใจ โปรดตรวจสอบ!
ขั้นตอนที่ 2: ก่อนที่เราจะเริ่มต้น
โปรดทราบว่าข้อมูลที่ฉันจะพูดถึงเกี่ยวกับการขูดนั้นเป็นข้อมูลที่เปิดเผยต่อสาธารณะและไม่ต้องการการตรวจสอบสิทธิ์ใดๆ ตัวอย่างเช่น สมมติว่าจำนวนผู้ติดตาม YouTube ที่แน่นอนของฉันมีให้เฉพาะฉันในสตูดิโอผู้สร้าง ดังนั้นอุปกรณ์จะต้องส่งคำขอที่ตรวจสอบสิทธิ์ขณะที่ฉันโหลด คำขอประเภทนี้จะไม่อยู่ในขอบเขตสำหรับวิดีโอนี้ การทดสอบอย่างรวดเร็วเพื่อตรวจสอบว่าครอบคลุมหรือไม่คือพยายามโหลดหน้าเว็บในหน้าต่างที่ไม่ระบุตัวตน เนื่องจากจะไม่ทำให้คุณลงชื่อเข้าใช้เว็บไซต์ใดๆ โดยอัตโนมัติ
สำหรับเทคนิคที่ครอบคลุมในคำแนะนำนี้ เราจะต้องใช้เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์บางอย่างที่มีอยู่ในเบราว์เซอร์ ฉันจะสาธิตพวกเขาด้วย Firefox แต่ฉันรู้ว่า Chrome บางตัวมีเครื่องมือที่คล้ายกันและฉันแน่ใจว่าเบราว์เซอร์อื่นก็มีเครื่องมือเหล่านี้เช่นกัน
ขั้นตอนที่ 3: ไม่ใช่ API สาธารณะ (สปอยเลอร์: Instructables Has One!)
วิธีแรกที่เราจะพิจารณาคือการใช้ API ที่ไม่ใช่แบบสาธารณะ วิธีนี้อาจไม่สามารถใช้ได้เสมอไป แต่ถ้าเป็นวิธีนี้แน่นอน คุณควรตั้งเป้าที่จะใช้ สิ่งที่ฉันเรียกว่า "API ที่ไม่ใช่แบบสาธารณะ" โดยพื้นฐานแล้วไซต์ใช้ API ที่ไม่ได้โฆษณาบนเว็บไซต์ของพวกเขาในเบื้องหลังเพื่อดึงข้อมูลที่เราต้องการ
มีเหตุผลสองสามประการที่จะเป็นตัวเลือกที่ต้องการใช้
- ข้อได้เปรียบที่ใหญ่ที่สุดคือไม่น่าจะเปลี่ยนแปลงบ่อยเท่าหน้าเว็บ หากคุณขูดข้อมูลโดยตรงจาก HTML ของหน้าเว็บ ทุกครั้งที่พวกเขาทำการเปลี่ยนแปลงในเว็บไซต์ การแยกวิเคราะห์ของคุณอาจเสียหายได้
- โดยปกติแล้วข้อมูลจะมีประสิทธิภาพมากกว่า เมื่อคุณขูดหน้าเว็บ คุณกำลังดาวน์โหลดหน้า HTML ทั้งหมดเพื่อดึงข้อมูลบางส่วนออกจากหน้าเว็บนั้น API จะส่งกลับเฉพาะจุดข้อมูลเท่านั้น ซึ่งปกติแล้วจะเป็นคำขอที่เล็กกว่ามาก
- มักจะง่ายกว่าในการแยกวิเคราะห์ โดยปกติ API จะส่งคืนข้อมูลในรูปแบบ JSON ซึ่งง่ายต่อการแยกวิเคราะห์ โดยเฉพาะอย่างยิ่งหากคุณกำลังแยกข้อมูลหลายส่วน
ก่อนอื่นเราต้องค้นหาว่าหน้าเว็บใช้การตั้งค่าแบบนี้หรือไม่ เงื่อนงำที่ใหญ่ที่สุดคือหากไซต์อัปเดตค่าในแบบเรียลไทม์เหมือนใน Kickstarter แต่ถึงแม้จะไม่มีก็หวังว่าจะใช้การตั้งค่านี้ Instructables ใช้ API ที่ไม่ใช่แบบสาธารณะในการดึงข้อมูลบางส่วนสำหรับไซต์ของตน แม้ว่าจะไม่รีเฟรชในแบบเรียลไทม์ก็ตาม
หากต้องการตรวจสอบว่าไซต์ใช้การตั้งค่านี้หรือไม่ ให้เข้าสู่โหมดนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ ฉันพบวิธีที่ง่ายที่สุดในการทำเช่นนี้คือคลิกขวาที่หน้าและเลือก "ตรวจสอบองค์ประกอบ"
จากนั้น คุณจะต้องไปที่แท็บเครือข่าย ซึ่งจะแสดงคำขอที่หน้าเว็บสร้างขึ้นในพื้นหลัง โปรดทราบว่าคุณอาจต้องโหลดหน้านี้ซ้ำหลังจากเปิดแท็บนี้ เนื่องจากจะแสดงเฉพาะคำขอที่ทำขึ้นนับจากนี้เป็นต้นไป
ปกติคุณต้องการค้นหาประเภท "json" อาจมีคำขอจำนวนมากที่นี่ ดังนั้นอาจช่วยจัดเรียงตามประเภทได้ คุณสามารถเห็นได้ชัดเจนว่าในหน้าแคมเปญ kickstarter นั้นใช้การตั้งค่านี้ เนื่องจากคุณสามารถเห็นคำขอคงที่ที่ส่งไปยังปลายทาง "stats.json" ในหน้าผู้เขียน Instructables (เช่น ของฉันคือ "https://www.instructables.com/member/witnessmenow/") พวกเขาจะไม่ส่งคำขออย่างต่อเนื่อง แต่คุณสามารถเห็นคำขอซ่อน "showAuthorStats" ที่ซ่อนอยู่ในหมู่ผู้อื่น
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับคำขอนี้ คุณสามารถคลิกได้ คุณควรจะได้รับข้อมูลทั้งหมดที่คุณต้องการจากที่นี่เพื่อทำซ้ำคำขอ แต่ก่อนที่คุณจะทำอย่างนั้น คุณต้องตรวจสอบก่อนว่ามีข้อมูลที่คุณต้องการหรือไม่ คลิกบนแท็บการตอบสนองและดูว่ามีข้อมูลอยู่หรือไม่
หากมีข้อมูลที่คุณต้องการ คุณก็พร้อมแล้ว! จากนั้น คุณสามารถใช้แนวทางเดียวกันกับที่กล่าวถึงในวิดีโอก่อนหน้าของฉันเกี่ยวกับการเชื่อมต่อกับ API เวอร์ชันสั้นคือการตรวจสอบให้แน่ใจว่าคำขอทำงานตามที่คาดไว้ในเครื่องมืออย่างบุรุษไปรษณีย์ก่อน จากนั้นใช้โปรเจ็กต์ตัวอย่างนี้เพื่อทดสอบว่าใช้งานได้บนอุปกรณ์ของคุณ
สำหรับการแยกวิเคราะห์ข้อมูล JSON ฉันขอแนะนำให้ใช้ ArudinoJSON ในสถานการณ์ส่วนใหญ่ หากนี่คือสิ่งที่คุณต้องการคำแนะนำเกี่ยวกับเรื่องนี้ โปรดแจ้งให้เราทราบ!
ขั้นตอนที่ 4: ขูดข้อมูลโดยตรง
ต่อไปเราจะดูการขูดข้อมูลโดยตรงจากหน้าเว็บ ซึ่งเป็นการร้องขอหน้าเว็บแบบเต็มบนอุปกรณ์และแยกวิเคราะห์ข้อมูลที่เราต้องการ ฉันได้กล่าวไปแล้วถึงข้อดีของ API ที่ไม่ใช่แบบสาธารณะที่มีมากกว่าวิธีนี้ แต่บางครั้งก็จำเป็น!
สิ่งหนึ่งที่สำคัญที่ควรทราบในที่นี้ หากคุณคุ้นเคยกับการพัฒนาเว็บ คุณอาจเคยชินกับการใช้คุณลักษณะตรวจสอบองค์ประกอบเพื่อค้นหาข้อมูลเกี่ยวกับองค์ประกอบเฉพาะและโครงสร้างขององค์ประกอบ วิธีนี้ควรหลีกเลี่ยง เนื่องจากหน้าเว็บสมัยใหม่มักจะมีการเปลี่ยนแปลงแบบไดนามิกโดยใช้ Javascript ซึ่งจะไม่เกิดขึ้นบนอุปกรณ์ของคุณ รหัส HTML ที่มีอยู่ในอุปกรณ์ของคุณจะเป็นหน้าเว็บต้นฉบับที่ดาวน์โหลดเท่านั้น ตัวอย่างที่ดีของสิ่งนี้คือหน้า TeamTrees จำนวนการบริจาคปัจจุบันเริ่มต้นที่ 0 และโหลดเข้าสู่หน้าในภายหลังด้วยภาพเคลื่อนไหวนี้ แต่ต่างจากตัวอย่างสองตัวอย่างที่เราเคยเห็นมาก่อน มันไม่โหลดข้อมูลในพื้นหลัง ดังนั้น ข้อมูลที่ถูกต้องจะต้องอยู่ที่อื่น
หากต้องการดูรหัสหน้าเว็บเดิม คุณสามารถคลิกขวาที่หน้าและเลือก "ดูแหล่งที่มา" จากนั้นคุณต้องการค้นหาข้อมูลเฉพาะที่คุณต้องการ ดังนั้นในตัวอย่าง TeamTrees เมื่อเราค้นหาจำนวนการบริจาคในปัจจุบัน เราจะเห็นว่าการนับจริงถูกเก็บไว้ในคุณสมบัติการนับข้อมูลขององค์ประกอบการนับ นี่คือสิ่งที่เราต้องการ ขูดข้อมูลจาก
คุณต้องค้นหาสตริงการค้นหาที่นำคุณไปสู่ข้อมูลของคุณ ง่ายกว่ามากที่จะคิดออกก่อนที่จะเขียนโค้ดสำหรับอุปกรณ์ สำหรับตัวอย่างนี้ การค้นหา "data-count\" ทำให้ฉันได้ข้อมูลที่เราต้องการ ซึ่งสมบูรณ์แบบมาก เราไม่ต้องกังวลว่าจะตรงกับตำแหน่งอื่นๆ ของหน้าด้วย เพราะจะอยู่ที่ด้านบนสุดก่อน หากคุณจำเป็นต้องตีอันที่ 3 คุณก็ตั้งโปรแกรมให้ละเว้น 2 ตัวแรกที่คุณกดได้
หากเราดูตัวอย่าง TeamTrees อย่างเมื่อก่อนเราข้ามหัวข้อการตอบกลับไปและตอนนี้กำลังดูเนื้อหาของการตอบกลับ (ซึ่งเป็นหน้าเว็บ) สิ่งที่กลับมาจากลูกค้าคือกระแสข้อมูล เราไม่สนใจเกี่ยวกับคำค้นหาของเรา ดังนั้นเราจึงทำ client.find หากพบคำค้นหาก็จะคืนค่าเป็นจริงและจะย้ายสตรีมไปยังจุดสิ้นสุดของข้อความค้นหา สิ่งต่อไปจากสตรีมคือข้อมูลที่เรากำลังค้นหา แต่ในกรณีนี้ เราไม่แน่ใจว่าข้อมูลจะนานแค่ไหน แต่เรารู้ว่ามันเป็นข้อมูลทั้งหมดระหว่างตำแหน่งปัจจุบันของเราในสตรีมกับเครื่องหมายจุลภาคถัดไป. เราสามารถทำได้โดยใช้ "client.readBytesUntil" ซึ่งทำงานตามที่กล่าวไว้ โดยจะอ่านไบต์ลงในบัฟเฟอร์จนกว่าจะถึงคิวรีที่ระบุ แค่ตรวจสอบให้แน่ใจว่าบัฟเฟอร์ที่คุณกำลังอ่านมีขนาดใหญ่พอที่จะเก็บข้อมูลทั้งหมด ฉันคิดว่าเราค่อนข้างปลอดภัยที่นี่ด้วย 32!
หากคุณมีข้อมูลทั้งหมดที่ต้องการ คุณก็ไม่จำเป็นต้องอ่านข้อมูลอีกต่อไป ฉันไม่ได้ปิดการเชื่อมต่อที่นี่เพราะดูเหมือนว่าจะไม่ก่อให้เกิดปัญหากับ ESP8266 ดูเหมือนว่าจะทำให้เกิดปัญหากับ ESP32 ดังนั้นฉันจึงเพิ่ม client.stop() พูดตามตรงเลย ฉันไม่แน่ใจว่าทำไมฉันถึงวางมันไว้บนสุดของวิธีการ ฉันคิดว่ามันสมเหตุสมผลกว่าที่จะปิดมันเมื่อคุณมีข้อมูลที่คุณต้องการแล้ว
ขั้นตอนที่ 5: การขูดข้อมูลโดยใช้เซิร์ฟเวอร์ภายนอก:
มีอีกหัวข้อหนึ่งที่ต้องพูดถึง มีเครื่องมือที่ดีกว่ามากสำหรับการแยกวิเคราะห์ในสภาพแวดล้อมที่ใช้คอมพิวเตอร์ทั่วไป เช่น NodeJS มากกว่าบนไมโครคอนโทรลเลอร์ ดังนั้นบางครั้งอาจสมเหตุสมผลที่จะให้บริการที่ดึงข้อมูลจากเว็บเพจและให้ความเรียบง่าย จุดสิ้นสุดสำหรับ ESP8266 หรือ ESP32 ของคุณ ตัวอย่างหนึ่งของสิ่งนี้คือการขูดหน้า CrowdSupply เพื่อนับจำนวน TinyPICO ที่ขายแบบสด อาจเป็นไปได้ที่จะบรรลุผลโดยตรงบน ESP8266 หรือ ESP32 แต่เนื่องจากกำลังแยกวิเคราะห์จุดข้อมูลที่แตกต่างกันหลายจุดในองค์ประกอบที่แตกต่างกันหลายอย่าง ดังนั้นจึงมีความซับซ้อน
ฉันลงเอยด้วยการสร้างโปรเจ็กต์ NodeJS และแยกวิเคราะห์ข้อมูลโดยใช้ไลบรารี่ที่ชื่อว่า Cheerio และมันได้ผลดีมาก ฉันโฮสต์โปรเจ็กต์นี้บนคลาวด์เซิร์ฟเวอร์ที่ฉันมีอยู่แล้ว แต่คุณสามารถรันโปรเจ็กต์ประเภทนี้บน pi ได้ หากคุณไม่มีการตั้งค่าแบบนั้น
ขั้นตอนที่ 6: ขีดจำกัดการใช้งาน
สิ่งหนึ่งที่อาจส่งผลกระทบต่อแนวทางเหล่านี้ทั้งหมดคือการจำกัดการใช้งานไซต์ ใน API ปกติ โดยปกติแล้วจะมีการบันทึกไว้ค่อนข้างดีว่าคุณสามารถสร้างคำขอได้กี่รายการต่อนาทีหรือต่อวัน และคุณสามารถจำกัดคำขอโครงการของคุณตามสิ่งนี้ เมื่อคุณกำลังขูดขีด คุณไม่รู้ว่าขีดจำกัดเหล่านี้คืออะไร คุณจึงเสี่ยงต่อการโดนโจมตีและอาจถูกบล็อกได้ ฉันไม่สามารถให้คำแนะนำที่แน่นอนในการจำกัดมันได้ เพื่อให้คุณอยู่ในหนังสือดีๆ ของพวกเขา แต่ฉันคิดว่าทุกอย่างภายใต้ทุกนาทีจะบ่อยเกินไป ยกเว้นบางกรณีเช่น kickstarter ซึ่งพวกเขาดูเหมือนจะส่งคำขอทุกๆ สองสามวินาทีด้วยตัวเอง
ขั้นตอนที่ 7: ขอบคุณสำหรับการอ่าน
หวังว่าวิดีโอนี้จะช่วยคุณได้หากคุณสนใจที่จะแยกวิเคราะห์ข้อมูลโดยตรงจากหน้าเว็บใน ESP8266 หรือ ESP32 ของคุณ คุณมีคำถามอื่น ๆ ในหัวข้อที่ฉันไม่ได้กล่าวถึงหรือไม่? โปรดแจ้งให้เราทราบในความคิดเห็นด้านล่าง หรือเข้าร่วมกับฉันและผู้ผลิตรายอื่นๆ บนเซิร์ฟเวอร์ Discord ของฉัน ที่ซึ่งเราสามารถพูดคุยเกี่ยวกับหัวข้อนี้หรือผู้ผลิตรายอื่นที่เกี่ยวข้องกับสิ่งที่คุณมี ผู้คนช่วยเหลือดีมากที่นั่น เป็นสถานที่ที่ดีในการแขวน ออก
ฉันยังอยากจะขอบคุณมากสำหรับผู้สนับสนุน Github ของฉันที่ช่วยสนับสนุนสิ่งที่ฉันทำ ฉันรู้สึกซาบซึ้งจริงๆ หากคุณไม่ทราบ Github กำลังจับคู่การสนับสนุนสำหรับปีแรก ดังนั้นหากคุณเป็นผู้สนับสนุน พวกเขาจะจับคู่ 100% ในอีกไม่กี่เดือนข้างหน้า
ขอบคุณที่อ่าน!
แนะนำ:
สถานีตรวจอากาศระดับมืออาชีพโดยใช้ ESP8266 และ ESP32 DIY: 9 ขั้นตอน (พร้อมรูปภาพ)
สถานีตรวจอากาศระดับมืออาชีพโดยใช้ ESP8266 และ ESP32 DIY: LineaMeteoStazione เป็นสถานีตรวจอากาศที่สมบูรณ์แบบซึ่งสามารถเชื่อมต่อกับเซ็นเซอร์ระดับมืออาชีพจาก Sensirion รวมถึงส่วนประกอบ Davis Instrument (Rain Gauge, เครื่องวัดความเร็วลม) โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อเป็นสถานีตรวจอากาศแบบ DIY แต่ต้องใช้
LoRa 3Km ถึง 8Km การสื่อสารไร้สายด้วยอุปกรณ์ E32 (sx1278/sx1276) ราคาประหยัดสำหรับ Arduino, Esp8266 หรือ Esp32: 15 ขั้นตอน
LoRa 3Km ถึง 8Km การสื่อสารไร้สายด้วยอุปกรณ์ E32 (sx1278/sx1276) ราคาประหยัดสำหรับ Arduino, Esp8266 หรือ Esp32: ฉันสร้างไลบรารี่เพื่อจัดการ EBYTE E32 ตามชุดอุปกรณ์ LoRa ของ Semtech อุปกรณ์ที่ทรงพลัง เรียบง่าย และราคาถูก คุณสามารถหาได้ เวอร์ชัน 3Km ที่นี่ เวอร์ชัน 8Km ที่นี่พวกเขาสามารถทำงานในระยะทาง 3,000 ม. ถึง 8000 ม. และมีคุณสมบัติมากมายและ
ESP32 Bluetooth Tutorial - วิธีใช้ Bluetooth ในตัวของ ESP32: 5 ขั้นตอน
ESP32 Bluetooth Tutorial | วิธีใช้ Bluetooth ในตัวของ ESP32: สวัสดีทุกคน เนื่องจากบอร์ด ESP32 มาพร้อมกับ WiFi & บลูทูธทั้งคู่ แต่สำหรับโปรเจ็กต์ส่วนใหญ่ เรามักจะใช้แค่ Wifi เราไม่ได้ใช้บลูทูธ ดังนั้นในคำแนะนำนี้ ฉันจะแสดงให้เห็นว่าการใช้บลูทูธของ ESP32 & สำหรับโครงการพื้นฐานของคุณ
เริ่มต้นใช้งาน ESP32 CAM - สตรีมวิดีโอโดยใช้ ESP CAM ผ่าน Wifi - โครงการกล้องรักษาความปลอดภัย ESP32: 8 ขั้นตอน
เริ่มต้นใช้งาน ESP32 CAM | สตรีมวิดีโอโดยใช้ ESP CAM ผ่าน Wifi | โครงการกล้องรักษาความปลอดภัย ESP32: วันนี้เราจะเรียนรู้วิธีใช้บอร์ด ESP32 CAM ใหม่นี้ และวิธีที่เราสามารถเข้ารหัสและใช้เป็นกล้องรักษาความปลอดภัยและรับการสตรีมวิดีโอผ่าน wifi
เริ่มต้นใช้งาน ESP32 - การติดตั้งบอร์ด ESP32 ใน Arduino IDE - ESP32 Blink Code: 3 ขั้นตอน
เริ่มต้นใช้งาน ESP32 | การติดตั้งบอร์ด ESP32 ใน Arduino IDE | รหัสการกะพริบของ ESP32: ในคำแนะนำนี้ เราจะดูวิธีการเริ่มทำงานกับ esp32 และวิธีการติดตั้งบอร์ด esp32 ลงใน Arduino IDE และเราจะตั้งโปรแกรม esp 32 เพื่อเรียกใช้โค้ดกะพริบโดยใช้ arduino ide