22 กันยายน 2558

Published กันยายน 22, 2558 by with 0 comment

ทำ Scraping และ Web Crawler ด้วยโมดูล sky

สวัสดีผู้อ่านทุกท่านครับ บทความนี้ผมจะพาผู้อ่านไปทำ Scraping และ Web Crawler ด้วยโมดูล sky ในภาษาไพทอน 3.4 ขึ้นไปกันครับ
ข้อแนะนำ
แนะนำให้ใช้โมดูลนี้ในงานวิจัยและการศึกษาที่ต้องการนำข้อมูลไปใช้งาน

โมดูล sky เป็นโมดูลหนึ่งในภาษาไพทอน สามารถทำ Scraping และ Web Crawler ได้ โดยอาศัยไลบรารี asyncio ในทำงานทำให้รองรับเฉพาะ Python 3.4 ขึ้นไปเท่านั้นและสามารถเก็บข้อมูลได้อย่างรวดเร็ว ข้อมูลที่เก็บมาได้จะถูกบันทึกอยู่ในรูปแบบไฟล์ json
ใช้ BSD License

สามารถติดตั้งได้โดยใช้คำสั่ง pip (ตรวจสอบการติดตั้งคอมไพเลอร์กับไพทอนให้เรียบร้อยก่อนทำการติดตั้ง) :
pip3 install -U sky

ลองใช้งาน sky ได้ด้วยคำสั่ง
sky view

แล้วเข้าไปที่ http://localhost:7900/ จะพบกับหน้า sky view ซึ่งเป็นหน้าสำหรับทำการ scraping ผ่าน GUI

ทำ Scraping และ Web Crawling ด้วยโมดูล skyกรอกลิงค์เว็บไซต์ที่ต้องการและกำหนดค่าข้อมูลต่าง ๆ ลงไป แล้วกดปุ่ม [>>>]

ระบบจะทำการเก็บข้อมูลในรูปแบบไฟล์ json ในหน้าต่างคอมมานด์ไลน์ จะปรากฏที่อยู่โฟลเลอร์ที่ระบบเก็บข้อมูลไว้



เมื่อเข้าไปที่โฟลเลอร์ที่ปรากฎในหน้าต่างคอมมานด์ไลน์ จะพบกับไฟล์ข้อมูลจำนวนมากโดยมีรูปแบบไฟล์เป็นไฟล์ json ตามด้านล่าง

เขียนโปรแกรมเก็บข้อมูลจากเว็บไซต์ด้วยโมดูล sky ใน Python 3.4 +


คำเตือน!
ทางบล็อก python3.wannaphong.com ไม่สนับสนุนการละเมิดลิขสิทธิ์ทุกรูปแบบ ไม่แนะนำให้ทดลองเก็บข้อมูลจากบล็อกนี้และเว็บไชต์ต่าง ๆ ที่มีลิขสิทธิ์ตามกฎหมายไทยและสากล
เนื้อหาในบล็อกนี้มีลิขสิทธิ์ ห้ามนำไปใช้โดยไม่อ้างอิงและห้ามนำไปใช้ในเชิงทางการค้าทุกรูปแบบเด็ดขาด

สามารถศึกษาได้จากโค้ดตัวอย่างนี้

[python]
from sky.crawler_services import CrawlFileService
from sky.crawler_plugins import CrawlFilePluginNews
PROJECT_NAME = 'python3' #ชื่อโครงการเก็บข้อมูล
storage_object = {'path' : 'C:\websave'} # ตั้งค่าโฟลเดอร์เก็บข้อมูลในโค้ดนี้ตั้งค่าให้เก็บลงใน C:\websave
crawler_service = CrawlFileService(PROJECT_NAME, storage_object, CrawlFilePluginNews)
from sky.configs import DEFAULT_CRAWL_CONFIG
default = crawler_service.get_crawl_plugin('default') # โหลด plugin ที่ใช้ในการ crawl เข้ามา
default.save_config(DEFAULT_CRAWL_CONFIG)
py_config = {
'seed_urls' : ['https://python3.wannaphong.com/2014'], # ลิงค์เริ่มต้นการเก็บข้อมูล
'crawl_required_regexps' : [], # กำหนดคีย์การเก็บ ในนี้ไม่มีจึงไม่ได้กำหนด
'index_required_regexps' : ['2014/'], # ให้เก็บเฉพาะลิงค์ที่อยู่ใน 2014/
'max_saved_responses' : 100, # จำกัดจำนวน 100 เว็บเพจ
}
py = crawler_service.get_crawl_plugin('python3.wannaphong.com')
py.save_config(py_config) # เก็บการตั้งค่า
crawler_service.run('python3.wannaphong.com') # เริ่มการเก็บข้อมูล
[/python]

ผลลัพธ์

[caption id="attachment_1426" align="aligncenter" width="666"]กำหลังทำการเก็บข้อมูลจากค่าที่กำหนดไว้ กำลังทำการเก็บข้อมูลจากค่าที่กำหนดไว้[/caption]

[caption id="attachment_1427" align="aligncenter" width="663"]รายงานผลการเก็บข้อมูล รายงานผลการเก็บข้อมูล[/caption]

[caption id="attachment_1428" align="aligncenter" width="663"]เข้าไปยังโฟลเลอร์ C:\websave ตามที่กำหนดไว้จะบพบสามโฟลเลอร์นี้ เข้าไปยังโฟลเลอร์ C:\websave ตามที่กำหนดไว้จะกับพบสามโฟลเลอร์นี้[/caption]

[caption id="attachment_1429" align="aligncenter" width="1110"]เทื่อเข้ายังโฟลเลอร์ crawler-documents ในนี้คือ python3-crawler-documents ตามชื่อที่กำหนดไว้ จะพบไฟล์จำนวนมาก ภายในมีรูปแบบ json เทื่อเข้ายังโฟลเลอร์ crawler-documents ในนี้คือ python3-crawler-documents ตามชื่อที่กำหนดไว้ จะพบไฟล์จำนวนมาก ภายในมีรูปแบบ json[/caption]

จะได้ไฟล์ที่ไม่มีนามสกุลจำนวนมาก แต่ข้างในไฟล์มีรูปแบบเป็นรูปแบบไฟล์ข้อมูล json โดยมีรูปแบบข้อมูลดังนี้

[python] {"title": "หัวข้อ", "body": "ข้อมูลในรูปแบบโค้ด HTML", "publish_date": "วันเวลาของหน้าเว็บ", "author": "ผู้เขียนโพสต์", "images": "ลิงค์รูปภาพ", "related": "ลิงค์ที่เกี่ยวข้อง", "summary": "", "domain": "domain"}[/python]

หากต้องการนำไฟล์ที่ได้ไปใช้ ให้ทำการดึงข้อมูลจากไฟล์ json นี้ไปแปลงเป็นข้อมูลตามที่ต้องการ (เป็นโจทย์ที่ผู้อ่านต้องนำไปคิดเพื่อประยุกต์ใช้งานเองครับ)
ข้อมูลที่ได้มา หากเป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ ข้อมูลภาษาไทยถูกเข้ารหัสเป็น Unicode ต้องนำไปแปลงเป็น UTF 8 ก่อนจึงนำไปใช้งานได้ https://r12a.github.io/apps/conversion/

เข้าไปร่วมกันพัฒนาโมดูล sky ได้ที่ https://github.com/kootenpv/sky/
อ่านเอกสาร sky เพิ่มเติมได้ที่ https://github.com/kootenpv/sky/blob/master/sky/README.md

ขอความกรุณาช่วยตอบแบบสอบถามด้วยนะครับ


ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)