รายการข้างล่างนี้เป็นการโม้ครับ ซึ่งอาจจะจริงหรือไม่จริงก็ได้

  1. คนที่เล่นเน็ตส่วนใหญ่รู้จัก Google
  2. มีคนไม่น้อยในข้อ 1. ที่รู้ว่า Google ใช้ Web Crawler เป็นตัวเก็บข้อมูลสำหรับไว้ค้นหา
  3. มีคนหลาย ๆ คนแต่ไม่เยอะนักในข้อ 2. ที่รู้ว่ากลไกของ Web Crawler นั้นมันทำงานยังไง และ
  4. น้อยคนนักในข้อ 3. ที่เคยสร้าง Web Crawler !!!

ผมเองก็เคยสร้างแค่ 2 ครั้งตลอดทั้งชีวิต

  • ครั้งแรกเมื่อ 6 ปีก่อน ผู้อำนวยการฝ่ายสั่งให้ผมอ่านข้อมูลรายชื่อบริษัททั้งหมด จากเว๊ปไซต์ของกรมพัฒนาธุรกิจการค้า ซึ่งเปิดให้บุคคลทั่วไปเข้าไปดูได้ เพราะไม่อยากต้องเสียตังค์ซื้อข้อมูล และไม่อยากให้พนักงานต้องเมื่อยมือมาช่วยกันกดเพื่อลอกข้อมูลเข้า Excel
  • ครั้งที่สองเมื่อปีที่แล้ว ทำเองเพราะอยากได้ข้อมูลจาก YouTube แบบว่าขี้เกียจหาเอง ให้โปรแกรมที่สร้างขึ้นเข้าไปหาให้ดีกว่า

Web Crawler ที่ผมสร้างมีวัตถุประสงค์ที่แตกต่างจากของ Google เพราะของ Google จะโดดไปเรื่อยหากอ่านเจอไฮเปอร์ลิงค์ แต่ของผมเปล่า ผมเฉพาะเจาะจงเลือกอ่านและโดดเฉพาะบางไฮเปอร์ลิงค์เท่านั้น

จุดยากของการทำ Web Crawler แบบเฉพาะเจาะจงจึงไม่ได้อยู่ที่ส่วนของการทำ Multi-Thread เพื่อแบ่งย่อยเป็นหลาย ๆ งาน แล้วแบ่ง ๆ แยกย้ายกันไปอ่านลิงค์ใครลิงค์มัน

แต่อยู่ตรงการที่มันต้องรู้จัก Login เข้าไปสู่ระบบดังกล่าว (เจริญจริง ๆ ทำไม Web Crawler ต้อง Login เพื่อรับ Cookie หรือ Session ด้วยฟระเนี่ย?) แล้วจึงเข้าไปในหน้าเว๊ปไซต์ลึก ๆ เพื่ออ่านข้อมูล จากนั้นจึงเจาะจงเลือกเฉพาะบางลิงค์, บางตำแหน่งเท่านั้นเพื่อกระโดดต่อไป

นอกจากนี้ยังต้องออกแบบโครงสร้างข้อมูลใน Virtual Memory ให้สอดรับกับ tag html ทั้งปวงของเว๊ปไซต์นั้น ๆ อีกทั้งต้องสามารถกำหนดจุดเริ่มต้น หรือสิ้นสุดในแต่ล่ะบล็อคที่ต้องการอ่านลิงค์อีกด้วย

และที่สำคัญ ซอฟต์แวร์ดังกล่าวหากไม่เขียนเป็นระบบเปิด ก็จะใช้ได้เฉพาะกับเว๊ปไซต์ใดเว๊ปไซต์นึงเท่านั้น!!!

ดังนั้นการทำ Web Crawler แบบเฉพาะเจาะจง จึงหวังที่ผลลัพท์ที่ได้จากเว๊ปไซต์นั้นเป็นสำคัญ

ทั้งเว๊ปไซต์ของกรมพัฒนาธุรกิจการค้า กับของ YouTube นี่พอกัน เพราะต้อง Login เข้าไปก่อนถึงจะสามารถอ่านข้อมูลได้ อีกทั้งข้อมูลที่อยากได้ ก็ต้องกดผ่านเข้าไปหลายหน้า และแต่ล่ะหน้าก็ต้องการการ verify ทั้งนั้น ถึงยอมให้ผ่านเข้าไปได้ ที่สำคัญรูปแบบการแสดงผลของแต่ล่ะหน้า ก็แตกต่างกันจริง ๆ เลยพับผ่าสิ

ผมหวังว่าซักวันนึง คงมีคนใจดีซักคน ช่วยสร้าง Web Crawler Framework ให้ผมใช้บ้างนะครับ จะเป็นการดีมาก ๆ เลยล่ะ ยิ่งเป็นแบบ MVC ได้ยิ่งดี อิ อิ 😛
[tags]Web Crawler, Crawler, คอมพิวเตอร์, การสร้างซอฟต์แวร์[/tags]

Related Posts

12 thoughts on “Web Crawler

  1. เคยคิดจะลองทำเล่นเหมือนกันนะครับ ตอนเด็กๆคิดว่าน่าจะมี crawler ที่เลือกข้อมูลเฉพาะที่เราสนใจอยากอ่านได้ โดยกรองเฉพาะเว็บไซต์ชนิดประเทที่เราสนใจเท่านั้น มันคงสะดวกหน้าดู เราไม่ต้องมานั่งเปิดเองให้เสียเวลา

    แต่พอคิดไปคิดมา มันยากมากๆเลยแฮะ – -‘ แค่จะให้มัน fetch ข้อมูลมานั่งวิเคราะห์ก็แย่แล้ว ยิ่งตอนวิเคราะห์ข้อมูลประเทอีก เป็นโปรเจคที่เกินความสามารถของมือใหม่มาก >.

  2. น่าสนใจดีน่ะครับ สำหรับยุคที่ข้อมูลข่าวสารมีให้เลือกมากอย่างงี้
    ถ้าเรามีcrawlerของเราเองที่เลือกได้แต่ข้อมูลที่น่าสนใจ เพราะทุกวันนี้เราเสพข้อมูลกันมากพอกับคนที่เสพยาเลยละ่ครับ(เปรียบเทียบเล่นน่ะครับ)

  3. มีแนวทางเริ่มต้นสำหรับมือใหม่ทางด้านโปรแกรมมิ่งอย่างผมไหมครับ ?

    ผมอยากลองสร้างดูบ้าง

  4. HTTPClient ครับ ง่ายมาก อาจต้องตัดสตริงเก่งหน่อยเท่านั้นเอง ผมใช้ได้ผลจนเว็บปลายทางเค้าบล็อก IP ผมเลยทีเดียวเชียว 😀

    คืออันนี้แอบไปดูดมาโดยที่เจ้าของไม่ได้อนุญาตน่ะครับ อย่าเอาอย่างนะเด็กๆ -*-

  5. ดูเหมือนว่า Web Crawler ซึ่งจงใจกระทุ้งเข้าไปยังเว๊ปใดเว๊ปนึง น่าจะถือได้ว่าเป็นอาชญกรรมทางคอมพิวเตอร์ครับทุกท่าน ผมคิดว่านะ

    ดังนั้นถ้าจำเป็นจริง ๆ ก็ทำแบบเนียน ๆ ดีกว่าครับ เช่น ชอนไชเข้าไปนาทีล่ะครั้งก็พอ เอ๊ะ หรือว่าแบบนี้ก็ถือว่าทำผิดอ่ะเนี่ย ง่ะ T-T

  6. ขออนุญาตพี่ไท้ นำบทความนี้ไปประกอบรายงานส่งอาจารย์นะคะ

    พอดีกำลังทำหัวข้อจบเรื่องนี้อยู่ด้วยน่ะค่ะ

    ขอบคุณมากเลยนะคะที่เขียนบทความดีๆ ให้อ่าน แถมอ่านง่ายด้วยค่ะ ชอบจัง ^^

  7. รบกวนพี่ Mr.PeeTai สอนทำ Web Crawler หน่อยครับหรือขอดู โค๊ดการทำก็ได้ครับ เพราะตอนนี้สนใจการทำเจ้าต้วนี้อย่างมากก เพราะเบื่อไปหา ในgoogle มากบางทีเราหาอีกเว็บ กลับไปได้อีกเว็บมาแทน ตอนนี้ต้องหาข้อมูลทางเน็ตเยอะมากอะครับ ช่วยทีนะครับพี่ ขอบคุณมากก ครับ

  8. การเขียน web crawler เป็นงาน customize ครับ ขึ้นอยู่กับว่าเราไปดูดจากเว็บไหน ดังนั้นถ้าถามว่ายากหรือเปล่า คงต้องตอบว่า “ยุ่ง” มากกว่าครับ

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *