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> ใช้สำหรับส่งคืนเนื้อหาระหว่างแท็กเปิดและแท็กปิดรวมถึงแท็ก

  1. ใน[30]:soup.title

ออก[30]:<title>รายชื่อประธานาธิบดีในอินเดียจนถึงปี 2010 – Wikipedia สารานุกรมเสรี</title>

  1. soup.<tag>.string: ส่งคืนสตริงภายในแท็กที่กำหนด
  2. ใน [38]:soup.title.string
  3. ออก[38]:u 'รายชื่อประธานาธิบดีในอินเดียและบราซิลจนถึงปี 2010 ในอินเดีย – Wikipedia สารานุกรมเสรี'
  4. ค้นหาลิงก์ทั้งหมดภายในแท็ก <a> ของหน้า: แท็กลิงก์โดยใช้แท็ก “<a>” ดังนั้นให้ไปที่ตัวเลือก soup.a และควรส่งคืนลิงก์ที่มีอยู่ในหน้าเว็บ มาทำกัน
  5. ใน [40]:soup.a

ออก[40]:<a id=”top”></a>

  • ค้นหาตารางที่เหมาะสม:

เนื่องจากกำลังค้นหาตารางข้อมูลเกี่ยวกับประธานาธิบดีในอินเดียและบราซิลจนถึงปี 2010 การระบุตารางที่ถูกต้องก่อนจึงเป็นสิ่งสำคัญ นี่คือคำสั่งเพื่อรวบรวมข้อมูลที่อยู่ในแท็กตารางทั้งหมด

all_tables= soup.find_all('table')

ระบุตารางที่ถูกต้องโดยใช้แอตทริบิวต์ "คลาส" ของตารางที่ต้องการกรองตารางที่ถูกต้อง จากนั้นตรวจสอบชื่อคลาสโดยคลิกขวาบนตารางที่ต้องการของหน้าเว็บดังนี้:

  1. ตรวจสอบองค์ประกอบ
  2. คัดลอกชื่อคลาสหรือค้นหาชื่อคลาสของตารางที่ถูกต้องจากผลลัพธ์ของคำสั่งสุดท้าย

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 สำหรับการขูดเว็บ

คอยติดตามบทความถัดไปของเราว่าการขูดเว็บส่งผลต่อการเติบโตของรายได้ของคุณอย่างไร

วางแผนที่จะรับข้อมูลจากเว็บสำหรับวิทยาศาสตร์ข้อมูล? เราอยู่ที่นี่เพื่อช่วย แจ้งให้เราทราบ เกี่ยวกับความต้องการของคุณ