Web Scraping ด้วย Python: คู่มือสำหรับผู้เริ่มต้น
เผยแพร่แล้ว: 2016-10-10ในโลกของ Big Data บริการ Web Scraping หรือการดึงข้อมูลเป็นข้อกำหนดหลักสำหรับ Big Data Analytics การดึงข้อมูลจากเว็บเป็นสิ่งที่หลีกเลี่ยงไม่ได้สำหรับบริษัทที่จะดำเนินธุรกิจต่อไป คำถามต่อไปที่เกิดขึ้นคือวิธีการขูดเว็บในฐานะมือใหม่

ข้อมูลสามารถดึงหรือคัดลอกมาจากแหล่งเว็บได้โดยใช้วิธีการต่างๆ เว็บไซต์ยอดนิยมเช่น Google, Facebook หรือ Twitter เสนอ API เพื่อดูและดึงข้อมูลที่มีอยู่ในลักษณะที่มีโครงสร้าง ซึ่งจะป้องกันการใช้วิธีการอื่นๆ ที่ผู้ให้บริการ API อาจไม่ต้องการ อย่างไรก็ตาม ความต้องการในการรวบรวมข้อมูลเว็บไซต์เกิดขึ้นเมื่อเว็บไซต์ไม่ได้นำเสนอข้อมูลโดยทันที Python ซึ่งเป็นภาษาโปรแกรมโอเพนซอร์ซมักใช้สำหรับ Web Scraping เนื่องจากระบบนิเวศที่เรียบง่ายและสมบูรณ์ มีห้องสมุดชื่อ “BeautifulSoup” ซึ่งทำหน้าที่นี้ มาดูการขูดเว็บโดยใช้ python กันดีกว่า
การตั้งค่าสภาพแวดล้อม Python:
ในการดำเนินการขูดเว็บโดยใช้ Python ก่อนอื่นคุณต้องติดตั้ง Python Environment ซึ่งช่วยให้คุณสามารถเรียกใช้โค้ดที่เขียนด้วยภาษาไพ ธ อนได้ ห้องสมุดทำการขูดข้อมูล
Beautiful Soup เป็นไลบรารีหลามที่ใช้งานสะดวก เป็นหนึ่งในเครื่องมือที่ดีที่สุดสำหรับการดึงข้อมูลจากหน้าเว็บ ผู้เชี่ยวชาญสามารถรวบรวมข้อมูลจากหน้าเว็บในรูปแบบของตาราง รายการ หรือย่อหน้าได้ Urllib2 เป็นอีกหนึ่งไลบรารีที่สามารถใช้ร่วมกับไลบรารี BeautifulSoup เพื่อดึงข้อมูลหน้าเว็บได้ สามารถเพิ่มตัวกรองเพื่อดึงข้อมูลเฉพาะจากหน้าเว็บ Urllib2 เป็นโมดูล Python ที่สามารถดึง URL ได้
สำหรับ MAC OSX :
ในการติดตั้งไลบรารี Python บน MAC OSX ผู้ใช้จำเป็นต้องเปิดเทอร์มินัล win และพิมพ์คำสั่งต่อไปนี้ทีละคำสั่ง:
sudoeasy_install pip
pip ติดตั้ง BeautifulSoup4
pip ติดตั้ง lxml
สำหรับผู้ใช้ Windows 7 และ 8:
ผู้ใช้ Windows 7 และ 8 ต้องแน่ใจว่าได้ติดตั้งสภาพแวดล้อมของ python ก่อน เมื่อติดตั้งสภาพแวดล้อมแล้ว ให้เปิดพรอมต์คำสั่งและค้นหาวิธีการรูทไดเร็กทอรี C:/ แล้วพิมพ์คำสั่งต่อไปนี้:
easy_install BeautifulSoup4
easy_installlxml
เมื่อติดตั้งไลบรารี่แล้ว ก็ถึงเวลาเขียนโค้ดขูดข้อมูล
วิ่งหลาม:
การขูดข้อมูลต้องทำเพื่อวัตถุประสงค์ที่แตกต่างกัน เช่น เพื่อรวบรวมข้อมูลสต็อคปัจจุบันของร้านค้าปลีก ขั้นแรก ต้องใช้เว็บเบราว์เซอร์เพื่อไปยังส่วนต่างๆ ของเว็บไซต์ที่มีข้อมูลนี้ หลังจากระบุตารางแล้ว ให้คลิกขวาที่ใดก็ได้บนตาราง จากนั้นเลือกองค์ประกอบตรวจสอบจากรายการเมนูแบบเลื่อนลง นี่จะทำให้หน้าต่างป๊อปอัปปรากฏขึ้นที่ด้านล่างหรือด้านข้างของหน้าจอซึ่งแสดงรหัส Html ของเว็บไซต์ การจัดอันดับปรากฏในตาราง คุณอาจต้องสแกนข้อมูล HTML จนกว่าคุณจะพบบรรทัดโค้ดที่ไฮไลต์ตารางบนหน้าเว็บ
Python เสนอทางเลือกอื่นสำหรับการขูด HTML นอกเหนือจาก BeautifulSoup พวกเขารวมถึง:
- Scrapy
- Scrapemark
- เครื่องจักร
การขูดเว็บจะแปลงข้อมูลที่ไม่มีโครงสร้างจากโค้ด HTML เป็นรูปแบบข้อมูลที่มีโครงสร้าง เช่น ข้อมูลแบบตารางในเวิร์กชีต Excel การขูดเว็บสามารถทำได้หลายวิธีตั้งแต่การใช้ Google Docs ไปจนถึงภาษาโปรแกรม สำหรับผู้ที่ไม่มีความรู้ด้านการเขียนโปรแกรมหรือความสามารถทางเทคนิค สามารถรับข้อมูลเว็บได้โดยใช้บริการขูดเว็บที่จัดเตรียมข้อมูลพร้อมใช้งานจากเว็บไซต์ที่คุณต้องการ
แท็ก HTML:
ในการดำเนินการขูดเว็บ ผู้ใช้ต้องมีความรู้ด้านแท็ก HTML อาจช่วยได้มากถ้ารู้ว่าลิงก์ HTML ถูกกำหนดโดยใช้แท็ก Anchor เช่น แท็ก <a>, “<a href=“https://…”>ลิงก์ต้องอยู่ที่นี่ </a>” รายการ HTML ประกอบด้วยรายการ <ul> (ไม่เรียงลำดับ) และ <ol> (เรียงลำดับ) รายการเริ่มต้นด้วย <li>
ตาราง HTML ถูกกำหนดด้วย <Table> แถวเป็น <tr> และคอลัมน์จะถูกแบ่งออกเป็นข้อมูลเป็น <td>;
- <!DOCTYPE html> : เอกสาร HTML เริ่มต้นด้วยการประกาศประเภทเอกสาร
- ส่วนหลักของเอกสาร HTML ในรูปแบบข้อความธรรมดาที่ไม่ได้จัดรูปแบบถูกกำหนดโดยแท็ก <body> และ </body>
- หัวเรื่องใน HTML ถูกกำหนดโดยใช้แท็กหัวเรื่องตั้งแต่ <h1> ถึง <h5>
- ย่อหน้าถูกกำหนดด้วยแท็ก <p> ใน HTML
- เอกสาร HTML ทั้งหมดอยู่ระหว่าง <html> และ </html>
ใช้ BeautifulSoup ในการขูด:

ในขณะที่ขูดหน้าเว็บโดยใช้ BeautifulSoup ข้อกังวลหลักคือการระบุวัตถุประสงค์ขั้นสุดท้าย ตัวอย่างเช่น หากคุณต้องการแยกรายการออกจากหน้าเว็บ ต้องใช้วิธีการที่ชาญฉลาด:
- ขั้นตอนแรกและสำคัญที่สุดคือการนำเข้าไลบรารีที่จำเป็น:
#นำเข้าไลบรารี่ที่ใช้ค้นหาเว็บไซต์
นำเข้า urllib2
#ระบุ url wiki = “https://”
#สอบถามเว็บไซต์และส่งคืน html ไปยังตัวแปร 'หน้า'
หน้า = urllib2.urlopen (วิกิพีเดีย)
#นำเข้าฟังก์ชัน Beautiful soup เพื่อแยกวิเคราะห์ข้อมูลที่ส่งคืนจากเว็บไซต์
จาก bs4 นำเข้า BeautifulSoup
#แยกวิเคราะห์ html ในตัวแปร 'page' และจัดเก็บไว้ในรูปแบบ Beautiful Soup
ซุป = BeautifulSoup(หน้า)
- ใช้ฟังก์ชัน “prettify” เพื่อแสดงภาพโครงสร้างที่ซ้อนกันของหน้า HTML
- การทำงานกับแท็กซุป:
Soup<tag> ใช้สำหรับส่งคืนเนื้อหาระหว่างแท็กเปิดและแท็กปิดรวมถึงแท็ก
- ใน[30]:soup.title
ออก[30]:<title>รายชื่อประธานาธิบดีในอินเดียจนถึงปี 2010 – Wikipedia สารานุกรมเสรี</title>
- soup.<tag>.string: ส่งคืนสตริงภายในแท็กที่กำหนด
- ใน [38]:soup.title.string
- ออก[38]:u 'รายชื่อประธานาธิบดีในอินเดียและบราซิลจนถึงปี 2010 ในอินเดีย – Wikipedia สารานุกรมเสรี'
- ค้นหาลิงก์ทั้งหมดภายในแท็ก <a> ของหน้า: แท็กลิงก์โดยใช้แท็ก “<a>” ดังนั้นให้ไปที่ตัวเลือก soup.a และควรส่งคืนลิงก์ที่มีอยู่ในหน้าเว็บ มาทำกัน
- ใน [40]:soup.a
ออก[40]:<a id=”top”></a>
- ค้นหาตารางที่เหมาะสม:
เนื่องจากกำลังค้นหาตารางข้อมูลเกี่ยวกับประธานาธิบดีในอินเดียและบราซิลจนถึงปี 2010 การระบุตารางที่ถูกต้องก่อนจึงเป็นสิ่งสำคัญ นี่คือคำสั่งเพื่อรวบรวมข้อมูลที่อยู่ในแท็กตารางทั้งหมด
all_tables= soup.find_all('table')
ระบุตารางที่ถูกต้องโดยใช้แอตทริบิวต์ "คลาส" ของตารางที่ต้องการกรองตารางที่ถูกต้อง จากนั้นตรวจสอบชื่อคลาสโดยคลิกขวาบนตารางที่ต้องการของหน้าเว็บดังนี้:
- ตรวจสอบองค์ประกอบ
- คัดลอกชื่อคลาสหรือค้นหาชื่อคลาสของตารางที่ถูกต้องจากผลลัพธ์ของคำสั่งสุดท้าย
right_table=soup.find('table', class_='wikitable sortable plainrowheaders')
right_table
นั่นเป็นวิธีที่เราสามารถระบุตารางที่ถูกต้องได้
- ดึงข้อมูลไปยัง DataFrame: มีความจำเป็นต้องวนซ้ำในแต่ละแถว (tr) จากนั้นกำหนดแต่ละองค์ประกอบของ tr (td) ให้กับตัวแปรและเพิ่มลงในรายการ มาวิเคราะห์โครงสร้าง HTML ของตารางกัน (แยกข้อมูลสำหรับหัวตาราง <th>)
ในการเข้าถึงค่าของแต่ละองค์ประกอบ จำเป็นต้องใช้ตัวเลือก “find(text=True)” กับแต่ละองค์ประกอบ ในที่สุดก็มี data ใน dataframe
มีหลายวิธีในการรวบรวมข้อมูลโดยใช้ “BeautifulSoup” ซึ่งช่วยลดความพยายามในการรวบรวมข้อมูลจากหน้าเว็บด้วยตนเอง โค้ดที่เขียนด้วย BeautifulSoup ถือว่ามีประสิทธิภาพมากกว่านิพจน์ทั่วไป วิธีการขูดเว็บที่เราพูดถึงใช้ไลบรารี "BeautifulSoup" และ "urllib2" ใน Python นั่นเป็นคำแนะนำสำหรับผู้เริ่มต้นโดยย่อเพื่อเริ่มใช้ Python สำหรับการขูดเว็บ
คอยติดตามบทความถัดไปของเราว่าการขูดเว็บส่งผลต่อการเติบโตของรายได้ของคุณอย่างไร
วางแผนที่จะรับข้อมูลจากเว็บสำหรับวิทยาศาสตร์ข้อมูล? เราอยู่ที่นี่เพื่อช่วย แจ้งให้เราทราบ เกี่ยวกับความต้องการของคุณ
