การทำเว็บสแครปในระดับขนาดใหญ่
(incolumitas.com)-
หากคุณสร้างบริการที่ต้องรันการค้นหาบน Google หลายล้านครั้ง ก็จำเป็นต้องมีทางเลือกที่ไม่โดนบล็อก
-
วิธีที่ง่ายที่สุดคือใช้พร็อกซีแบบเสียเงิน แต่ราคาค่อนข้างแพง
→ เลยกลายเป็นบทความน่าสนุกที่ผู้เขียนอธิบายอย่างละเอียดถึงสิ่งที่ตัวเองได้ลองทำ
- ช่วงแรกใช้ AWS Lambda + Puppeteer
→ AWS มีให้บริการ 16 รีเจียนทั่วโลก และเมื่อรัน Lambda 3 ครั้งก็จะได้ IP ใหม่
→ ถ้ารัน Lambda พร้อมกัน 1000 ตัว จะได้ใช้ public IP ประมาณ 250 ตัว
→ 16 รีเจียน * 250 ก็เท่ากับ 4000 IP และระดับนี้ก็เพียงพอสำหรับการค้นหา Google ระดับหลายล้านครั้งต่อสัปดาห์
→ เคยลองใช้บน GCP ด้วย แต่ขำตรงที่ Google บล็อก IP คลาวด์ของตัวเองหนักกว่า AWS เสียอีก
→ เรื่องนี้เป็นข้อมูลช่วงปี 2019~2020 และตอนนี้อาจเปลี่ยนไปแล้ว
- วิธีนี้ใช้สแครป Google/Bing/Amazon ได้ แต่ก็มีข้อจำกัด
→ ถ้าอีกฝั่งใช้บริษัท anti-bot อย่าง DataDome, Akamai, Imperva ก็ใช้ไม่ได้
→ พวกเขาตรวจจับว่าเป็นบอตหรือไม่ผ่าน browser fingerprinting ได้หลากหลายมาก
→ เช่น Google Picasso, Font/TLS/WebGL Fingerprinting..
→ จริง ๆ แล้วบริการสแครปขนาดใหญ่ส่วนมากใช้คลาวด์ + คอนเทนเนอร์ Docker จึงถูกระบุตัวได้ง่าย
- โครงสร้างพื้นฐานสำหรับสแครปที่ตรวจจับได้ยากและขยายระบบได้
→ กฎสองข้อสำหรับการสแครปให้สำเร็จ
-
อย่าปลอมการตั้งค่าเบราว์เซอร์
-
ที่สำคัญที่สุดคือ ให้ปลอมการตั้งค่าเบราว์เซอร์เฉพาะเมื่อ "ไม่มีใครสังเกตได้" เท่านั้น
→ ด้วยเหตุนี้ ข้อสรุปคือวิธีที่ดีที่สุดคือ "ใช้อุปกรณ์จริง" ไปเลย
⇨ ซื้ออุปกรณ์ Android ราคาถูก 500 เครื่องจากผู้ผลิตหลายเจ้า และสมัครแพ็กเกจดาต้าราคาประหยัด
⇨ กระจายติดตั้งไว้หลายเมือง (ใกล้เสาสัญญาณ)
⇨ ใช้โอเพนซอร์สอย่าง DeviceFarmer/stf เพื่อควบคุมอุปกรณ์พร้อมกัน
⇨ ติดตั้ง OS แบบเบาอย่าง Android Go และตั้งให้เข้าโหมดเครื่องบินทุก 5 นาทีเพื่อรับ IP ใหม่ตลอดเวลา
⇨ "4G carrier grade NAT" : NAT ระดับผู้ให้บริการ 4G เป็นวิธีที่ออกแบบมาเพื่อแก้ปัญหา IPv4 ไม่พอใช้ ทำให้มีผู้ใช้แชร์ IP เดียวกันได้หลายแสนราย จึงแทบเป็นไปไม่ได้ที่จะบล็อก
→ แต่ก็มีความยุ่งยากมาก ทั้งต้องซื้ออุปกรณ์ Android 500 เครื่อง ต้องมีสถานที่ติดตั้ง และต้องดูแลบำรุงรักษาฮาร์ดแวร์
- การปรับปรุง: จำลอง Android
→ แทนที่จะซื้ออุปกรณ์ Android ถ้าใช้ Android-X8, Bluestacks, Android Studio Emulator จะเป็นอย่างไร?
→ Proxidize ช่วยให้สร้าง 4G mobile proxy ได้
→ ติดตั้ง 4G dongle 50 ตัวในเซิร์ฟเวอร์หนึ่งเครื่อง
→ จำลองอุปกรณ์ Android 50~100 เครื่องบนแต่ละเซิร์ฟเวอร์
→ ติดตั้งสเตชันแบบนี้ไว้ใน 5 เมือง
→ จัดการสเตชันเหล่านี้ด้วยคำสั่งที่แข็งแรงมั่นคง
12 ความคิดเห็น
พร็อกซี บริการสแครปปิง ซอฟต์แวร์ป้องกันแอนติบอท ฯลฯ ได้สรุปไว้เป็นอย่างดีในบทความด้านบน
เป็นการแฮ็กที่เจ๋งมากเลย!
https://www.diffbot.com/products/crawl/
ยังมีบริการที่ทำการ crawling และ scraping หน้าเว็บให้ด้วย ข้อมูลที่ scrape มาได้จะตัดข้อมูลที่ไม่จำเป็นออกและบันทึกเป็น JSON
อ้าปากค้าง...
เป็นอีกเรื่องหนึ่งเลยนะ..
ก็มีที่อย่าง https://serpapi.com/ ซึ่งเอา Google Search มาทำเป็น API แล้วขายด้วย
แต่ที่นี่เขาเอา Naver Search มาทำเป็น API แล้วขายด้วยเหมือนกัน 555
https://serpapi.com/naver-search-api
ราคาเหลือเชื่อ? ที่ $250 สำหรับการค้นหา 30,000 ครั้งต่อเดือน
มันน่าตกใจเพราะแพงมากเกินไปงั้นเหรอ? ผมยังนึกภาพไม่ค่อยออกครับ
ใช่ครับ แพงมากเลย เมื่อเทียบกับการใช้พร็อกซีแบบเสียเงินอะไรทำนองนั้น
แต่เพราะเป็น API ก็เลยใช้งานได้สะดวกโดยไม่ต้องกังวลว่าจะโดนบล็อก
ถ้าอิงตามในประเทศ ก็นึกถึงแพ็กเกจมือถือราคาประหยัด 0 วอนที่มีการให้ดาต้าอยู่พอสมควรเหมือนกันนะครับ...
แต่พอสมัครจำนวนมากได้ยาก แบบนี้ก็คงลำบากเหมือนกันครับ
ในกรณีของ Google Fi สามารถเพิ่มซิมดาต้าได้สูงสุด 4 ซิมต่อ 1 หมายเลข ดังนั้นวิธีแบบนี้ก็น่าจะเป็นอีกทางเลือกได้เหมือนกัน
เมื่อก่อนตอนสแครปอะไรบางอย่างจาก naver
จำได้ว่าใช้บน AWS Lambda ไม่ได้ แต่ใช้บน GCP Functions ได้
เลยคิดว่าน่าจะเป็นเพราะเปิด IP range ไว้ แต่ดูเหมือนจะไม่ใช่อย่างนั้นเหมือนกันนะครับ
ผมทำแบบวิธีที่ 1 อยู่แล้ว เลยเข้ามาดูว่ามีวิธีอื่นอะไรอีกบ้าง แต่ไม่เคยนึกถึงเลยจริงๆ ครับ..
จริงๆ แล้ว Lambda+Puppeteer แบบข้อ 1 ถ้าทำด้วยวิธีนั้นก็น่าจะโอเคอยู่เหมือนกัน
แต่ถ้าเทียบกับวิธี Proxidize ที่อยู่ท้ายบทความ ก็น่าจะมีความต่างด้านต้นทุนตามขนาดของงานสแครปน่าจะพอสมควร
ยิ่งต้องการปริมาณมากเท่าไร Proxidize ก็น่าจะเสถียรกว่า แต่ถ้าต้องการทำแบบง่ายๆ ข้อ 1 ก็ดูไม่เลวเหมือนกัน
https://proxidize.com/ ที่แนะนำไว้ท้ายบทความนี่น่าสนใจดีนะ
เป็นโซลูชันฮาร์ดแวร์+ซอฟต์แวร์ที่ช่วยให้สร้างและจัดการ 4G mobile proxy ได้เอง
รุ่น 5 dongles ราคา $399 นะ ดูจากรายชื่อประเทศของผู้ใช้ที่มีเกาหลีใต้ด้วย ก็น่าจะใช้งานได้มั้ง?
แม้จะไม่ถึงระดับ CGNAT แต่ก็มีโซลูชันอย่าง Scrapoxy ที่ใช้จัดการ software proxy pool ได้เหมือนกัน