วิธีรวบรวมรีวิวจากแผนที่ มาร์เก็ตเพลส และแพลตฟอร์มรวมรีวิว: คู่มือทีละขั้นตอนสำหรับมือใหม่
บทความ
- บทนำ: คุณจะได้อะไรจากคู่มือนี้
- การเตรียมการเบื้องต้น: เครื่องมือและสิทธิ์การเข้าถึง
- แนวคิดพื้นฐาน: รีวิวมีโครงสร้างอย่างไร และทำไมต้องรวบรวมต่างจากแคตตาล็อก
- ขั้นตอนที่ 1: กำหนดเป้าหมายและจัดทำรายการแหล่งข้อมูล
- ขั้นตอนที่ 2: ออกแบบตารางรีวิว
- ขั้นตอนที่ 3: ใช้ช่องทางอย่างเป็นทางการ — แดชบอร์ดและ api
- ขั้นตอนที่ 4: รวบรวมรีวิวจากแผนที่ — yandex maps, 2gis, google maps
- ขั้นตอนที่ 5: รวบรวมรีวิวจากมาร์เก็ตเพลส — wildberries, ozon, yandex market
- ขั้นตอนที่ 6: รวบรวมรีวิวจากแพลตฟอร์มรวมรีวิว — otzovik, irecommend, flamp, zoon
- ขั้นตอนที่ 7: เชื่อมต่อพร็อกซีมือถือและตั้งค่าการหมุนเวียน
- ขั้นตอนที่ 8: บันทึก ทำความสะอาด และลบข้อมูลซ้ำ
- การตรวจสอบผลลัพธ์: เช็กลิสต์และการทดสอบ
- ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
- ความสามารถเพิ่มเติมสำหรับผู้ขั้นสูง
- คำถามที่พบบ่อย: การรวบรวมรีวิว
- บทสรุป
บทนำ: คุณจะได้อะไรจากคู่มือนี้
รีวิวคือแหล่งข้อมูลที่ตรงไปตรงมาที่สุดเกี่ยวกับสินค้า ร้านค้า หรือสถานที่ เพราะผู้คนจะเล่าด้วยตัวเองว่าชอบอะไร อะไรเสีย ทำไมถึงไม่กลับมาอีก และจะแนะนำเพื่อนว่าอย่างไร ปัญหาคือรีวิวกระจัดกระจายอยู่ทั่วหลายสิบแพลตฟอร์ม ทั้งแผนที่ มาร์เก็ตเพลส แพลตฟอร์มรวมรีวิว และไดเรกทอรีเฉพาะทาง การอ่านด้วยมือเป็นสัปดาห์เป็นเรื่องที่ไม่สมจริง ดังนั้นจึงจำเป็นต้องมีระบบรวบรวม
ในคู่มือนี้เราจะมาดูวิธีรวบรวมรีวิวจากสามประเภทของแพลตฟอร์ม: บริการแผนที่ (Yandex Maps, 2GIS, Google Maps), มาร์เก็ตเพลส (Wildberries, Ozon, Yandex Market) และแพลตฟอร์มรวมรีวิว (Otzovik, iRecommend, Flamp, Zoon) คุณจะได้เรียนรู้ตั้งแต่การตั้งโจทย์ ออกแบบตาราง ไปจนถึงสคริปต์ที่ใช้งานได้ การเชื่อมต่อพร็อกซีมือถือ และการทำความสะอาดข้อมูล
สิ่งที่คุณจะได้รับ:
- เข้าใจว่ารีวิวอยู่ที่ไหนและในรูปแบบใดบนแพลตฟอร์มแต่ละประเภท
- โครงสร้างตารางรีวิวสำเร็จรูปที่สามารถนำไปใส่ใน Excel, Google Sheets หรือฐานข้อมูล
- ตัวรวบรวมรีวิวที่ทำงานได้บน Python ซึ่งสามารถใช้งานผ่านพร็อกซีมือถือและไม่สร้างภาระให้แพลตฟอร์ม
- รู้จักช่องทางการส่งออกอย่างเป็นทางการ: แดชบอร์ด, API พาร์ทเนอร์, การส่งออก
- เช็กลิสต์การตรวจสอบคุณภาพข้อมูลที่รวบรวมได้ และรายการข้อผิดพลาดที่พบบ่อย
คู่มือนี้เหมาะกับใคร เหมาะสำหรับนักการตลาด เจ้าของธุรกิจ นักไกล่เกลี่ย และนักพัฒนาเริ่มต้น หากคุณไม่เคยเขียนโค้ดมาก่อน ไม่ต้องกังวล เพราะบางสถานการณ์สามารถทำได้โดยไม่ต้องเขียนโปรแกรมเลย และสำหรับสคริปต์เราได้เตรียมโค้ดสำเร็จรูปที่เพียงคัดลอกและใส่ค่าของคุณเอง สำหรับผู้ที่มีพื้นฐานการเขียนโปรแกรมแล้ว ในตอนท้ายมีส่วนเทคนิคขั้นสูงแยกต่างหาก
สิ่งที่ต้องรู้ล่วงหน้า แค่ใช้เบราว์เซอร์เป็น ติดตั้งโปรแกรม และทำงานกับตารางได้ก็เพียงพอ ความเข้าใจพื้นฐานว่าพร็อกซีคืออะไรจะช่วยได้ แต่เราจะอธิบายคำศัพท์สำคัญไปพร้อมกัน
ขอบเขตของเนื้อหานี้ ที่นี่เราพูดถึงเฉพาะรีวิวในฐานะประเภทข้อมูลเฉพาะ: ข้อความ คะแนน วันที่ ผู้เขียน และการตอบกลับของบริษัท เราไม่ได้ครอบคลุมการรวบรวมแคตตาล็อกสินค้า ราคา และสต็อก ซึ่งเป็นหัวข้อแยกที่มีลักษณะเฉพาะของตัวเอง หากคุณต้องการราคา คู่มือนี้ไม่เหมาะ แต่ถ้าต้องการฟีดแบ็กจากลูกค้า คุณมาถูกที่แล้ว
ใช้เวลานานเท่าไหร่ การเตรียมสภาพแวดล้อมใช้เวลาประมาณ 30-40 นาที การออกแบบโครงสร้างและการรวบรวมครั้งแรกจากแพลตฟอร์มหนึ่งใช้เวลาประมาณหนึ่งชั่วโมง การรวบรวมทั้งหมดจากทั้งสามประเภทของแพลตฟอร์มพร้อมตั้งค่าพร็อกซีและทำความสะอาดข้อมูลจะใช้เวลา 3-4 ชั่วโมง หลังจากนั้นการรวบรวมจะใช้เวลาเพียงไม่กี่นาที เพราะสามารถรันสคริปต์ซ้ำได้
การเตรียมการเบื้องต้น: เครื่องมือและสิทธิ์การเข้าถึง
ก่อนเริ่มรวบรวมรีวิว จำเป็นต้องเตรียมสภาพแวดล้อมการทำงาน ด้านล่างคือรายการสิ่งที่ต้องใช้ อย่าข้ามส่วนนี้แม้ว่าบางอย่างจะดูเหมือนชัดเจน เพราะปัญหาครึ่งหนึ่งในขั้นตอนต่อไปเกิดจากการเตรียมสภาพแวดล้อมที่ไม่พร้อม
ความต้องการของระบบ
- คอมพิวเตอร์ที่ใช้ Windows 10/11, macOS หรือ Linux แล็ปท็อปใดก็ได้ที่มีอายุไม่เกิน 6-7 ปี
- หน่วยความจำ RAM ขั้นต่ำ 4 GB สำหรับการรวบรวมรีวิวหลายหมื่นรายการควรใช้ 8 GB
- อินเทอร์เน็ตที่เสถียร การรวบรวมไม่ต้องการความเร็วสูง แต่การเชื่อมต่อที่ขาดหายทำให้ข้อมูลสูญหาย
- พื้นที่ว่างบนดิสก์ประมาณ 2 GB สำหรับ Python ไลบรารี และผลลัพธ์
สิ่งที่ต้องติดตั้ง
- Python 3.11 หรือใหม่กว่า ดาวน์โหลดตัวติดตั้งจากเว็บไซต์ทางการของ Python เมื่อติดตั้งบน Windows อย่าลืมติ๊กถูกที่ «Add Python to PATH» บนหน้าจอแรกของตัวติดตั้ง หากไม่ติ๊ก คำสั่ง python จะไม่ทำงานในเทอร์มินัล
- โปรแกรมแก้ไขโค้ด แนะนำ VS Code — ฟรีและเข้าใจง่าย หลังติดตั้งให้เปิดครั้งหนึ่งเพื่อให้แน่ใจว่าทำงานได้
- ไลบรารี Python เปิดเทอร์มินัล (บน Windows ใช้ PowerShell, บน macOS ใช้ Terminal) แล้วรันคำสั่ง:
pip install requests pandas openpyxlรอข้อความ Successfully installed ใช้เวลา 1-2 นาที - เบราว์เซอร์ Chrome หรือ Yandex Browser ใช้สำหรับตรวจสอบแพลตฟอร์มผ่านเครื่องมือสำหรับนักพัฒนา ซึ่งมีในตัว ไม่ต้องติดตั้งเพิ่ม
- โปรแกรมตาราง Excel, LibreOffice Calc หรือ Google Sheets — สำหรับดูผลลัพธ์
สิทธิ์การเข้าถึงที่จำเป็น
- การเข้าถึงพร็อกซีมือถือ ลงทะเบียนที่ mobileproxy.space เลือกแพ็กเกจที่มีภูมิศาสตร์ที่ต้องการ (สำหรับแพลตฟอร์มรัสเซียใช้ผู้ให้บริการรัสเซีย) และรับข้อมูลการเชื่อมต่อ: โฮสต์ พอร์ต ล็อกอิน รหัสผ่าน นอกจากนี้ในแดชบอร์ดให้ค้นหาลิงก์สำหรับเปลี่ยน IP ซึ่งจะใช้ในขั้นตอนการหมุนเวียน
- การเข้าถึงแดชบอร์ดของแพลตฟอร์ม หากคุณรวบรวมรีวิวเกี่ยวกับธุรกิจของคุณเอง ซึ่งได้แก่ Yandex Business, แดชบอร์ดผู้ขาย Wildberries, Ozon Seller, Yandex Market สำหรับผู้ขาย, Google Business Profile การส่งออกอย่างเป็นทางการจากที่นั่นเป็นแหล่งข้อมูลที่สะอาดที่สุด
- โฟลเดอร์โปรเจกต์ สร้างโฟลเดอร์บนดิสก์ เช่น reviews_project และข้างในสร้างสองโฟลเดอร์ย่อย: raw สำหรับข้อมูลดิบ และ clean สำหรับข้อมูลที่ประมวลผลแล้ว นี่คือการประกันของคุณ: ข้อมูลดิบจะไม่ถูกเขียนทับ
คำแนะนำ: สร้างไฟล์ข้อความ sources.txt ในโฟลเดอร์โปรเจกต์ทันที และบันทึกทุกที่อยู่ที่คุณรวบรวมรีวิวพร้อมวันที่ ผ่านไปหนึ่งเดือนคุณจะจำไม่ได้ว่าตารางไหนมาจากไหน และบันทึกนี้จะตอบทุกคำถาม
การสำรองข้อมูล
การสำรองข้อมูลที่นี่ไม่เกี่ยวกับระบบ แต่เกี่ยวกับข้อมูล ตั้งกฎไว้ว่า: ทุกครั้งที่รันตัวรวบรวม ให้เขียนผลลัพธ์ลงไฟล์ใหม่ที่มีวันที่ในชื่อ เช่น reviews_ozon_2026-03-14.csv อย่าลบไฟล์เก่าอย่างน้อยหนึ่งเดือน หากการรวบรวมใหม่เสียหายเนื่องจากการเปลี่ยนแปลงบนแพลตฟอร์ม คุณจะยังมีเวอร์ชันที่ใช้งานได้
การตรวจสอบ: พิมพ์ในเทอร์มินัล python --version — ควรแสดงเวอร์ชัน 3.11 ขึ้นไป จากนั้นพิมพ์ python -c 'import requests, pandas; print(1)' — ควรแสดงเลข 1 โดยไม่มีข้อผิดพลาด หากทั้งสองคำสั่งทำงาน แสดงว่าสภาพแวดล้อมพร้อมแล้ว
แนวคิดพื้นฐาน: รีวิวมีโครงสร้างอย่างไร และทำไมต้องรวบรวมต่างจากแคตตาล็อก
ก่อนที่จะรันอะไร ควรเข้าใจประเภทของข้อมูลที่คุณกำลังจัดการ รีวิวไม่ใช่แค่ข้อความ แต่เป็นบันทึกที่มีโครงสร้างหลายฟิลด์ และมีลักษณะเฉพาะที่ไม่มีในบัตรสินค้า
คำศัพท์สำคัญในภาษาง่าย ๆ
- รีวิว (review) — บันทึกที่ผู้ใช้ทิ้งไว้เกี่ยวกับวัตถุ: สินค้า ร้านค้า สถานที่ โดยปกติประกอบด้วยคะแนน ข้อความ วันที่ ชื่อผู้เขียน และบางครั้งรูปภาพ
- วัตถุของรีวิว — สิ่งที่รีวิวพูดถึง: บัตรสินค้าบนมาร์เก็ตเพลส องค์กรบนแผนที่ บริษัทบนแพลตฟอร์มรวมรีวิว วัตถุแต่ละอย่างมีตัวระบุเฉพาะบนแพลตฟอร์ม
- การตอบกลับของบริษัท — ความคิดเห็นของผู้แทนธุรกิจใต้รีวิว สำหรับการวิเคราะห์คุณภาพการสนับสนุน นี่เป็นฟิลด์แยกต่างหาก
- การแบ่งหน้า — การแบ่งรีวิวออกเป็นหน้า或ส่วน แพลตฟอร์มอาจส่งรีวิวมาเช่น 20 รายการต่อครั้ง และต้องขอส่วนถัดไป
- ตัวรวบรวมรีวิว — โปรแกรมที่สำรวจวัตถุที่ต้องการโดยอัตโนมัติ ดึงรีวิวและเก็บลงตาราง อาจเป็นสคริปต์ง่าย ๆ หรือบริการสำเร็จรูป
- การลบข้อมูลซ้ำ — การลบรายการที่ซ้ำกัน รีวิวเดียวกันอาจปรากฏในชุดข้อมูลสองครั้งเนื่องจากการแบ่งหน้าหรือการรันซ้ำ
- พร็อกซีมือถือ — เซิร์ฟเวอร์ตัวกลางที่มีที่อยู่ IP ของผู้ให้บริการมือถือ คำขอผ่านพวกมันจะดูเหมือนทราฟฟิกของผู้ใช้ทั่วไปจากสมาร์ทโฟน แพลตฟอร์มมักผ่อนปรนต่อทราฟฟิกประเภทนี้ เพราะเบื้องหลัง IP มือถือหนึ่งหมายเลขมีผู้ใช้จริงหลายร้อยคน
- การหมุนเวียน IP — การเปลี่ยนที่อยู่พร็อกซีตามช่วงเวลาที่กำหนดหรือตามคำขอ ช่วยกระจายภาระและไม่สร้างกระแสคำขอที่ผิดปกติจากที่อยู่เดียว
การรวบรวมรีวิวแตกต่างจากการรวบรวมแคตตาล็อกอย่างไร
แคตตาล็อกสินค้าค่อนข้างคงที่: บัตรมีอยู่ มีราคาและคุณสมบัติ แต่รีวิวมีชีวิต différente และสิ่งนี้ส่งผลต่อกระบวนการทั้งหมด
- รีวิวถูกเพิ่มอย่างต่อเนื่อง ต้องสามารถดึงเฉพาะใหม่ได้ ไม่ใช่ดึงทั้งหมดทุกครั้ง
- รีวิวโหลดแยกต่างหาก บนแพลตฟอร์มส่วนใหญ่ ข้อความรีวิวไม่ได้มาในหน้าเว็บ แต่มาจากคำขอแยกในเบื้องหลัง ซึ่งเป็นข่าวดี: คำขอดังกล่าวส่ง JSON ที่พร้อมใช้งาน ไม่ต้องแยกวิเคราะห์ HTML
- รีวิวมีข้อมูลส่วนบุคคล ชื่อผู้เขียน รูปโปรไฟล์ บางครั้งเมือง ซึ่งมีข้อกำหนดทางกฎหมาย — ดูด้านล่าง
- รีวิวถูกจัดเรียงและกรอง โดยค่าเริ่มต้น แพลตฟอร์มอาจแสดง «มีประโยชน์» หรือ «ใหม่» หากไม่ล็อกการจัดเรียง คุณจะได้ชุดที่แตกต่างกันในการรันต่าง ๆ
- รีวิวถูกแก้ไขและลบ การกลั่นกรองลบบางรายการ ผู้เขียนเปลี่ยนคะแนน วันที่รวบรวมกลายเป็นฟิลด์สำคัญ
กรอบกฎหมายที่ต้องเข้าใจ
ข้อควรระวัง: รีวิวมีชื่อและข้อมูลอื่น ๆ เกี่ยวกับบุคคล ในการรวบรวมและจัดเก็บ ให้ปฏิบัติตามข้อกำหนดของกฎหมาย Federal Law 152-ФЗ ว่าด้วยข้อมูลส่วนบุคคล: อย่ารวบรวมมากกว่าที่จำเป็นสำหรับงาน ทำให้ผู้เขียนไม่ระบุตัวตนในกรณีที่ไม่จำเป็นต้องใช้ชื่อเพื่อการวิเคราะห์ อย่าส่งฐานข้อมูลให้บุคคลที่สาม นอกจากนี้ให้อ่านข้อตกลงผู้ใช้ของแพลตฟอร์มและไฟล์ robots.txt: บริการบางแห่งระบุโหมดการเข้าถึงอัตโนมัติที่อนุญาตไว้อย่างชัดเจน หากมี API อย่างเป็นทางการหรือการส่งออกจากแดชบอร์ดสำหรับงานของคุณ ให้เริ่มจากสิ่งนั้นเสมอ
อีกหลักการหนึ่งคือการสร้างภาระที่เหมาะสม ตัวรวบรวมรีวิวของคุณควรทำงานเหมือนผู้ใช้ที่เอาใจใส่ ไม่ใช่กระแสคำขอ การหยุดระหว่างคำขอ จำนวนเธรดที่สมเหตุสมผล และการหมุนเวียนผ่านพร็อกซีมือถือไม่ใช่กลเม็ด แต่เป็นบรรทัดฐานของการรวบรวมอย่างมีความรับผิดชอบ แพลตฟอร์มบล็อกไม่ใช่การทำงานอัตโนมัติ แต่เป็นพฤติกรรมที่ผิดปกติซึ่งรบกวนการทำงานของพวกเขา
ขั้นตอนที่ 1: กำหนดเป้าหมายและจัดทำรายการแหล่งข้อมูล
เป้าหมายของขั้นตอนนี้: ได้รายการวัตถุที่เฉพาะเจาะจงและจำกัดสำหรับการรวบรวมรีวิว และเข้าใจว่าต้องการฟิลด์ใด หากไม่มีขั้นตอนนี้ ตัวรวบรวมจะกลายเป็นโปรเจกต์ที่ไม่มีที่สิ้นสุด
กำหนดคำถามที่รีวิวจะตอบ
การรวบรวมที่ดีเริ่มต้นด้วยคำถาม ตัวอย่างสูตรที่ใช้ได้:
- «ทำไมคู่แข่ง X บน Wildberries จึงมีคะแนน 4.8 ในขณะที่เรามี 4.4 ในหมวดหมู่เดียวกัน?»
- «อะไรที่ถูกวิจารณ์บ่อยที่สุดในรีวิวเกี่ยวกับร้านกาแฟห้าแห่งของเราบน Yandex Maps ในช่วงครึ่งปีที่ผ่านมา?»
- «อะไรคือปัญหาของลูกค้าที่กล่าวถึงในรีวิวเกี่ยวกับคอร์สออนไลน์บน Otzovik เพื่อนำไปใช้ในงานโฆษณา?»
สังเกตว่าในแต่ละคำถามมีแพลตฟอร์ม วัตถุ ช่วงเวลา และประเภทข้อมูล ซึ่งเป็นสิ่งที่กำหนดการตั้งค่าการรวบรวม
รวบรวมรายการวัตถุ
- เปิดแพลตฟอร์มในเบราว์เซอร์และค้นหาวัตถุแต่ละอย่างด้วยมือ: บัตรสินค้า องค์กรบนแผนที่ หน้าบริษัทบนแพลตฟอร์มรวมรีวิว
- คัดลอกที่อยู่เต็มของหน้าจากแถบที่อยู่
- แยกตัวระบุวัตถุออกจากที่อยู่ บน Wildberries คือตัวเลขในที่อยู่ของการ์ดหลัง catalog/, บน Ozon คือตัวเลขหลัง product/ และขีดกลางในตอนท้าย, บน Yandex Maps คือตัวเลขยาวหลัง org/ และชื่อ, ใน 2GIS คือตัวเลขหลัง firm/ บันทึกแยกไว้
- บันทึกทุกอย่างลงในตาราง sources.csv ที่มีคอลัมน์: แพลตฟอร์ม, ชื่อวัตถุ, ที่อยู่, ตัวระบุ, หมายเหตุ
- สำหรับการรันครั้งแรก จำกัดที่ 3-5 วัตถุต่อแพลตฟอร์ม ค่อยขยายทีหลัง
ตัดสินใจว่าต้องการฟิลด์ใด
ชุดฟิลด์ขั้นต่ำสำหรับรีวิวใด ๆ: ตัวระบุรีวิวบนแพลตฟอร์ม, ตัวระบุวัตถุ, แพลตฟอร์ม, คะแนน, ข้อความ, วันที่เผยแพร่, วันที่รวบรวม ชุดขยาย: ชื่อผู้เขียน (หรือแฮช), การมีรูปภาพ, ข้อดีและข้อเสียแยกกัน (มีบนมาร์เก็ตเพลสและ Otzovik), การตอบกลับของบริษัทและวันที่, จำนวนไลก์หรือเครื่องหมาย «มีประโยชน์», ตัวเลือกสินค้า (ขนาด สี), สถานะการซื้อที่ยืนยันแล้ว
คำแนะนำ: อย่าโลภทุกฟิลด์ในครั้งเดียว รวบรวมชุดขั้นต่ำบวก 2-3 ฟิลด์ที่จำเป็นจริง ๆ สำหรับคำถามของคุณ แต่ละฟิลด์พิเศษคือจุดที่โครงสร้างของแพลตฟอร์มอาจเปลี่ยนแปลงและทำให้สคริปต์เสียหาย
ผลลัพธ์ที่คาดหวัง: ไฟล์ sources.csv ที่มี 5-15 แถวและรายการฟิลด์ที่บันทึกไว้ แต่ละแถวมีตัวระบุที่กรอกแล้ว
ปัญหาที่อาจเกิดขึ้น: ไม่เข้าใจว่าตัวระบุอยู่ในที่อยู่ตรงไหน วิธีแก้: เปิดวัตถุสองอย่างที่คล้ายกันบนแพลตฟอร์มเดียวกันและเปรียบเทียบที่อยู่ ส่วนที่เหมือนกันคือเทมเพลต ส่วนที่ต่างกันคือตัวระบุ
การตรวจสอบ: คุณสามารถอ่านแถวใดก็ได้ใน sources.csv และเปิดวัตถุที่ต้องการบนแพลตฟอร์มด้วยตัวระบุเดียวด้วยมือ หากต้องเดา ให้กลับไปและชี้แจงตัวระบุให้ชัดเจน
ขั้นตอนที่ 2: ออกแบบตารางรีวิว
เป้าหมายของขั้นตอนนี้: กำหนดรูปแบบบันทึกที่เป็นหนึ่งเดียว ซึ่งรีวิวจากทุกแพลตฟอร์มจะถูกปรับให้เข้ากัน สิ่งนี้จะช่วยให้วิเคราะห์ร่วมกันได้ ไม่ใช่ในห้าตารางที่แตกต่างกัน
สคีมาที่เป็นหนึ่งเดียว
สร้างไฟล์ schema.txt ในโปรแกรมแก้ไขโค้ดและระบุคอลัมน์ตามลำดับนี้:
- review_id — ตัวระบุรีวิวบนแพลตฟอร์ม หากแพลตฟอร์มไม่ให้มาอย่างชัดเจน เราสร้างเองจากวัตถุ ผู้เขียน และวันที่
- source — รหัสแพลตฟอร์มสั้น: yandex_maps, 2gis, google_maps, wildberries, ozon, yandex_market, otzovik, irecommend, flamp, zoon
- object_id — ตัวระบุวัตถุจาก sources.csv
- object_name — ชื่อที่อ่านได้เพื่อความสะดวก
- rating — ตัวเลขตั้งแต่ 1 ถึง 5 หากแพลตฟอร์มใช้มาตราส่วนอื่น ให้ปรับเป็นห้าดาวและบันทึกไว้ในหมายเหตุ
- text — ข้อความรีวิวเต็มในบรรทัดเดียว แทนที่การขึ้นบรรทัดใหม่ด้วยช่องว่าง
- pros และ cons — ข้อดีและข้อเสีย หากแพลตฟอร์มแยกไว้ มิฉะนั้นให้เว้นว่าง
- author — ชื่อผู้เขียนหรือแฮชที่ไม่ระบุตัวตน
- published_at — วันที่เผยแพร่ในรูปแบบ YYYY-MM-DD
- company_reply — ข้อความตอบกลับของบริษัท หากมี
- likes — จำนวนเครื่องหมายว่ามีประโยชน์
- has_photo — 1 หรือ 0
- collected_at — วันที่และเวลาที่รวบรวม
- url — ที่อยู่หน้าของวัตถุ
ทำไมต้องใช้รูปแบบเดียว
แต่ละแพลตฟอร์มให้ข้อมูลในรูปแบบของตัวเอง: บางที่วันที่เป็นสตริง «3 วันที่แล้ว» บางที่เป็นตัวเลขมิลลิวินาที บางที่เป็นข้อความ «14 มีนาคม» หากไม่ปรับให้เป็นรูปแบบเดียวกันตั้งแต่ต้น เมื่อวิเคราะห์คุณจะจมอยู่กับข้อยกเว้น ควรปรับให้เข้ากับสคีมาทันทีเมื่อบันทึก ไม่ใช่ทีหลัง
กฎการไม่ระบุตัวตน
หากงานไม่ต้องการชื่อผู้เขียน (และใน 90% ของงานวิเคราะห์ไม่ต้องการ) ให้เก็บแฮชแทนชื่อ ใน Python ทำได้ในบรรทัดเดียวผ่านโมดูล hashlib: นำชื่อผู้เขียนมาเพิ่มรหัสแพลตฟอร์ม และแปลงผลลัพธ์เป็นสตริงสั้น วิธีนี้คุณจะแยกแยะรีวิวของผู้เขียนคนเดียวกันได้ แต่จะไม่เก็บชื่อจริง
คำแนะนำ: เพิ่มคอลัมน์ raw_json ในสคีมา ซึ่งจะบันทึกการตอบกลับต้นฉบับของแพลตฟอร์มสำหรับรีวิวแต่ละรายการ มันกินพื้นที่ แต่ช่วยให้คุณสามารถดึงฟิลด์ที่คุณไม่ได้คิดถึงในวันนี้ได้ในภายหลังโดยไม่ต้องรวบรวมใหม่
ผลลัพธ์ที่คาดหวัง: ไฟล์ schema.txt ที่มีคอลัมน์และเทมเพลตตารางว่าง reviews_template.csv ที่มีหัวข้อเหล่านี้
การตรวจสอบ: เปิด reviews_template.csv ใน Excel คุณควรเห็นหนึ่งแถวหัวข้อที่มีคอลัมน์ตรงกับ schema.txt และไม่มีคอลัมน์เกิน
ขั้นตอนที่ 3: ใช้ช่องทางอย่างเป็นทางการ — แดชบอร์ดและ API
เป้าหมายของขั้นตอนนี้: ส่งออกรีวิวเกี่ยวกับธุรกิจของคุณเองด้วยวิธีที่สะอาดที่สุด โดยไม่ต้องรวบรวมเลย หากคุณวิเคราะห์เฉพาะตัวเอง ขั้นตอนนี้อาจเพียงพอ
Yandex Business (รีวิวบน Yandex Maps)
- เข้าสู่ Yandex Business ด้วยบัญชีเจ้าขององค์กร
- ในเมนูด้านซ้ายเลือกส่วน «รีวิว»
- ด้านบนเลือกสาขาที่ต้องการ หากมีหลายองค์กร
- ตั้งค่าตัวกรองตามช่วงเวลาและคะแนน
- รายการรีวิวจะแสดงพร้อมข้อความ วันที่ คะแนน และการตอบกลับของคุณ ไม่มีปุ่มส่งออกเป็นตารางโดยตรง ดังนั้นสำหรับปริมาณมากให้ใช้การคัดลอกจากหน้า หรือไปที่ขั้นตอนที่ 4
Wildberries: API รีวิวสำหรับผู้ขาย
Wildberries มีส่วน API อย่างเป็นทางการสำหรับจัดการรีวิวและคำถาม ใช้ได้สำหรับผู้ขายและให้รีวิวสำหรับสินค้าของคุณพร้อมคะแนน ข้อความ ข้อดีและข้อเสีย วันที่ และยังให้ตอบกลับได้
- เข้าสู่แดชบอร์ดผู้ขาย WB Partners
- เปิดการตั้งค่าโปรไฟล์ ส่วน «การเข้าถึง API»
- สร้างโทเค็นใหม่ โดยเลือกหมวดหมู่การเข้าถึงรีวิวและคำถาม ตั้งชื่อให้ชัดเจน เช่น reviews_export
- คัดลอกโทเค็นทันที — จะไม่แสดงอีกครั้ง เก็บไว้ในไฟล์ config.txt ในโฟลเดอร์โปรเจกต์
- เรียกเมธอดรายการรีวิวด้วยโทเค็นนี้ในเฮดเดอร์ Authorization เอกสารอธิบายพารามิเตอร์การแบ่งหน้าและการกรองตามวันที่
Ozon Seller API และ Yandex Market
Ozon ให้การเข้าถึงรีวิวผ่าน Seller API สำหรับผู้ขายที่มีการสมัครสมาชิกซึ่งรวมการทำงานกับรีวิว คีย์สร้างในส่วน «การตั้งค่า» หัวข้อย่อย «คีย์ API» Yandex Market ให้รีวิวเกี่ยวกับสินค้าของผู้ขายผ่าน API พาร์ทเนอร์ตามรหัสธุรกิจ คีย์ออกในแดชบอร์ดผู้ขายในส่วนการตั้งค่าการเข้าถึง
Google Business Profile และ 2GIS สำหรับธุรกิจ
รีวิวเกี่ยวกับองค์กรของคุณบน Google Maps เข้าถึงได้ในแดชบอร์ด Google Business Profile และผ่าน API หลังจากยืนยันสิทธิ์ 2GIS มีแดชบอร์ดสำหรับเจ้าของพร้อมการแจ้งเตือนรีวิวและความสามารถในการตอบกลับ
ข้อควรระวัง: โทเค็นและคีย์ API คือการเข้าถึงบัญชีธุรกิจของคุณ อย่าใส่ลงในโค้ดโดยตรง เก็บในไฟล์แยกที่ไม่เข้าไปอยู่ในโฟลเดอร์ทั่วไปและที่เก็บโค้ด หากโทเค็นรั่วไหลโดยไม่ตั้งใจ ให้เพิกถอนทันทีในแดชบอร์ดและสร้างใหม่
เมื่อช่องทางอย่างเป็นทางการไม่เพียงพอ
วิธีที่กล่าวมาทั้งหมดให้รีวิวเฉพาะเกี่ยวกับวัตถุของคุณ สำหรับการวิเคราะห์คู่แข่ง ตลาด หรือสินค้าของผู้อื่น ไม่เหมาะ ในกรณีนี้ให้เปลี่ยนไปรวบรวมจากหน้าสาธารณะ ซึ่งเป็นเนื้อหาของขั้นตอนต่อไปนี้
ผลลัพธ์ที่คาดหวัง: หากคุณทำงานกับธุรกิจของคุณเอง — ตารางรีวิวแรกจากแหล่งข้อมูลอย่างเป็นทางการที่ปรับตามสคีมาจากขั้นตอนที่ 2
การตรวจสอบ: จำนวนรีวิวในการส่งออกตรงกับจำนวนที่แดชบอร์ดแสดงในช่วงเวลาเดียวกัน โดยมีข้อผิดพลาด 1-2 รายการสำหรับรีวิวที่อยู่ระหว่างการกลั่นกรองในขณะที่ส่งออก
ขั้นตอนที่ 4: รวบรวมรีวิวจากแผนที่ — Yandex Maps, 2GIS, Google Maps
เป้าหมายของขั้นตอนนี้: เรียนรู้การค้นหาคำขอเบื้องหลังที่แผนที่ใช้โหลดรีวิว และจำลองด้วยสคริปต์ ทักษะนี้ใช้ได้ทั่วไปและจะเป็นประโยชน์บนแพลตฟอร์มอื่น ๆ ทั้งหมด
วิธีค้นหาคำขอรีวิวผ่านเครื่องมือสำหรับนักพัฒนา
- เปิดหน้าเว็บขององค์กรบน Yandex Maps หรือ 2GIS ใน Chrome
- กดปุ่ม F12 แผงเครื่องมือสำหรับนักพัฒนาจะเปิดทางขวาหรือด้านล่าง
- ไปที่แท็บ Network (เครือข่าย) หากว่างเปล่า ให้รีเฟรชหน้าด้วย F5
- ในแถบตัวกรองเหนือรายการคำขอ กดปุ่ม Fetch/XHR จะเหลือเฉพาะคำขอเบื้องหลังสำหรับข้อมูล
- บนหน้าองค์กร ไปที่ส่วนรีวิวและเลื่อนรายการลงเพื่อโหลดส่วนถัดไป
- รายการคำขอใหม่จะปรากฏขึ้น ในชื่อมักมีคำว่า review หรือ feedback คลิกที่มัน
- เปิดแท็บ Preview หรือ Response คุณจะเห็นโครงสร้าง JSON ที่มีรายการรีวิวซ้อนอยู่: ข้อความ คะแนน วันที่ ผู้เขียน
- เปิดแท็บ Headers คัดลอกที่อยู่เต็มของคำขอ (Request URL) และสังเกตพารามิเตอร์: มักมีตัวระบุวัตถุ หมายเลขหน้าหรือออฟเซ็ต ขนาดส่วน และการจัดเรียง
- ในส่วนเดียวกัน ค้นหาเฮดเดอร์ของคำขอ: User-Agent, Accept, Referer ต้องส่งจากสคริปต์
คำแนะนำ: คลิกขวาที่คำขอที่พบและเลือก Copy จากนั้น Copy as cURL จะได้คำสั่งที่มีเฮดเดอร์ทั้งหมด สะดวกในการวางในไฟล์ข้อความเป็นมาตรฐาน: หากสคริปต์หยุดทำงาน คุณจะเปรียบเทียบคำขอของมันกับมาตรฐานได้
ลักษณะเฉพาะของแต่ละแผนที่
- Yandex Maps รีวิวโหลดเป็นส่วน ๆ พร้อมการระบุการจัดเรียง (ตามใหม่, ตามคะแนน, ตามความเกี่ยวข้อง) ต้องล็อกการจัดเรียงหนึ่งอย่าง มิฉะนั้นชุดข้อมูลจะแตกต่างกันในการรันต่าง ๆ วันที่มาในรูปแบบที่อ่านได้ด้วยเครื่อง คะแนนเป็นตัวเลข การตอบกลับขององค์กรอยู่ในฟิลด์ซ้อนแยกต่างหาก
- 2GIS บริการมีบริการรีวิวสาธารณะที่เว็บไซต์เรียกใช้ คำขอมีตัวระบุสาขาและพารามิเตอร์ขีดจำกัดและออฟเซ็ต การตอบกลับมีข้อความ คะแนน วันที่ ชื่อผู้ใช้ การตอบกลับอย่างเป็นทางการ และตัวนับประโยชน์ นอกจากนี้ยังมีจำนวนรีวิวทั้งหมด — ใช้ตรวจสอบความครบถ้วน
- Google Maps ยากที่สุดในสามแพลตฟอร์ม: รีวิวมาในรูปแบบที่ถูกบีบอัดภายในคำตอบยาว สำหรับวัตถุหลายสิบรายการ ควรใช้ Places API ที่มีคีย์อย่างเป็นทางการ ซึ่งให้ชุดรีวิวล่าสุดที่จำกัดต่อสถานที่ ซึ่งมักเพียงพอสำหรับการประเมินอารมณ์ สำหรับการรวบรวมเต็มรูปแบบของวัตถุของผู้อื่น จำเป็นต้องใช้ระบบอัตโนมัติของเบราว์เซอร์ — นี่คือหัวข้อในส่วนขั้นสูง
เขียนสคริปต์แรก
สร้างไฟล์ collect_maps.py และวางโครงร่าง ใส่ที่อยู่คำขอและชื่อฟิลด์จากสิ่งที่คุณเห็นในแผงเครื่องมือสำหรับนักพัฒนา — พวกมันแตกต่างกันระหว่างแพลตฟอร์มและอาจเปลี่ยนแปลงได้ตามเวลา
import requests, time, csv, datetime
PROXY = 'http://LOGIN:PASSWORD@HOST:PORT'
proxies = {'http': PROXY, 'https': PROXY}
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 Chrome/122 Mobile Safari/537.36', 'Accept': 'application/json'}
def fetch_page(url):
r = requests.get(url, headers=headers, proxies=proxies, timeout=30)
r.raise_for_status()
return r.json()
def collect(object_id, base_url, limit=20):
offset = 0
rows = []
while True:
url = base_url.format(oid=object_id, limit=limit, offset=offset)
data = fetch_page(url)
items = data.get('reviews', [])
if not items:
break
for it in items:
rows.append({'review_id': it.get('id'), 'object_id': object_id, 'rating': it.get('rating'), 'text': (it.get('text') or '').replace(chr(10), ' '), 'published_at': it.get('date_created'), 'collected_at': datetime.datetime.now().isoformat()})
offset += limit
time.sleep(2.5)
return rowsมาวิเคราะห์สิ่งที่เกิดขึ้น ตัวแปร PROXY เก็บข้อมูลพร็อกซีมือถือของคุณ เฮดเดอร์ User-Agent แสดงคำขอเป็นเบราว์เซอร์มือถือ — ซึ่งสอดคล้องกับ IP มือถือ ฟังก์ชัน collect เดินผ่านหน้าต่าง ๆ จนกว่าแพลตฟอร์มจะส่งรายการว่าง และหลังจากแต่ละหน้าจะหยุด 2.5 วินาที การหยุดไม่ใช่พิธีการ: มันทำให้ภาระดูเหมือนการอ่านของมนุษย์จริง
รันและบันทึกผลลัพธ์
- ในตอนท้ายของไฟล์ เพิ่มการเรียกใช้ฟังก์ชันสำหรับวัตถุหนึ่งรายการจาก sources.csv และเขียนแถวลง CSV ผ่านโมดูล csv ด้วยการเข้ารหัส utf-8-sig เพื่อให้ Excel เปิดข้อความรัสเซียได้อย่างถูกต้อง
- เปิดเทอร์มินัลในโฟลเดอร์โปรเจกต์และรัน
python collect_maps.py - สังเกตเอาต์พุต มีประโยชน์ในการพิมพ์หมายเลขหน้าและจำนวนแถวที่รวบรวมได้หลังจากแต่ละคำขอ
- เปิดไฟล์ผลลัพธ์ใน Excel และดู 20 แถวแรก
ผลลัพธ์ที่คาดหวัง: ไฟล์ CSV ที่มีรีวิวขององค์กรหนึ่ง ซึ่งจำนวนแถวประมาณเท่ากับตัวนับรีวิวบนหน้าองค์กร
ปัญหาที่อาจเกิดขึ้น: การตอบกลับมีรหัส 403 หรือว่างเปล่า วิธีแก้: ตรวจสอบเฮดเดอร์กับคำสั่ง cURL ที่คัดลอกมา โดยเฉพาะ Referer และ Accept ตรวจสอบว่าพร็อกซีเชื่อมต่อและตอบสนองต่อคำขอทดสอบไปยังเว็บไซต์ใด ๆ เพิ่มเวลาหยุดเป็น 4-5 วินาที
การตรวจสอบ: เลือกรีวิวสามรายการแบบสุ่มจากไฟล์และค้นหาบนหน้าองค์กรด้วยข้อความ ทั้งสามควรพบ โดยมีคะแนนและวันที่เดียวกัน
ขั้นตอนที่ 5: รวบรวมรีวิวจากมาร์เก็ตเพลส — Wildberries, Ozon, Yandex Market
เป้าหมายของขั้นตอนนี้: ปรับวิธีการจากขั้นตอนที่ 4 ให้เข้ากับมาร์เก็ตเพลส ซึ่งรีวิวผูกกับสินค้าและมีฟิลด์เพิ่มเติม: ข้อดี ข้อเสีย ตัวเลือกสินค้า รูปภาพ
Wildberries
บน Wildberries รีวิวผูกกับตัวระบุการ์ดที่รวมสีและขนาดเข้าด้วยกัน สิ่งนี้สำคัญ: หากคุณรวบรวมรีวิวตามรหัสสินค้า คุณจะได้รีวิวสำหรับทุกรูปแบบพร้อมกัน และต้องกรองตามฟิลด์ตัวเลือก
- เปิดบัตรสินค้า กด F12 ไปที่แท็บ Network พร้อมตัวกรอง Fetch/XHR
- เลื่อนลงไปที่บล็อกรีวิวและกด «ดูรีวิวทั้งหมด»
- ค้นหาคำขอที่มีคำว่า feedbacks ในการตอบกลับจะมีรายการที่มีข้อความ คะแนน วันที่ ฟิลด์ข้อดีและข้อเสีย ชื่อผู้เขียน สีและขนาด เครื่องหมาย наличия รูป และการตอบกลับของผู้ขาย
- สังเกตจำนวนรีวิวทั้งหมดในการตอบกลับ — จะช่วยตรวจสอบความครบถ้วน
- คัดลอกที่อยู่และเฮดเดอร์ ใส่ในสคริปต์ตามตัวอย่างจากขั้นตอนที่ 4 การแบ่งหน้าอาจไม่มี — บางคำตอบมาเต็ม มีขนาดใหญ่ เพิ่มเวลา timeout เป็น 60 วินาที
Ozon
Ozon ปกป้องข้อมูลอย่างแข็งขันและตรวจสอบพฤติกรรมของไคลเอนต์ สำหรับรีวิว เว็บไซต์ใช้คำขอภายในสำหรับองค์ประกอบของหน้า ซึ่งรีวิวเป็นหนึ่งในบล็อก ลำดับการปฏิบัติ:
- เปิดหน้าสินค้า จากนั้นไปที่ส่วนรีวิวตามลิงก์จากการ์ด
- ในแผงเครื่องมือสำหรับนักพัฒนา ค้นหาคำขอที่มีการตอบกลับเป็นอาร์เรย์ที่มีฟิลด์ content, score หรือ rating และ author มันอาจมีชื่อต่างกัน ให้ค้นหาตามเนื้อหาผ่านช่องค้นหาของแผง (Ctrl+F ภายในแท็บ Network)
- คัดลอกคำขอเป็น cURL สังเกตเฮดเดอร์และคุกกี้: Ozon ไวต่อการขาดหาย
- เมื่อจำลองจากสคริปต์ ให้ใช้เซสชัน requests.Session เพื่อให้คุกกี้ถูกเก็บไว้ระหว่างคำขอ และทำคำขอแรกไปยังหน้าสินค้าปกติ แล้วจึงขอรีวิว วิธีนี้เลียนแบบเส้นทางธรรมชาติของผู้ใช้
- รักษาระยะห่าง 4-6 วินาทีและเปลี่ยน IP ผ่านพร็อกซีมือถือทุก 30-50 คำขอ
ข้อควรระวัง: หากแพลตฟอร์มเริ่มส่งหน้า проверкиเบราว์เซอร์หรือแคปต์ชา — นี่เป็นสัญญาณให้หยุด ไม่ใช่กดต่อไป ลดความถี่ เปลี่ยน IP ผ่านลิงก์หมุนเวียน และรอ 10-15 นาที การกดดันกลไกป้องกันอย่างเป็นระบบนำไปสู่การบล็อกพูลที่อยู่ทั้งหมดและขัดต่อกฎของแพลตฟอร์ม
Yandex Market
รีวิวบน Yandex Market มีสองประเภท: เกี่ยวกับสินค้า (ทั่วไปสำหรับผู้ขายทุกคน) และเกี่ยวกับร้านค้า สำหรับการวิเคราะห์ผลิตภัณฑ์ต้องใช้ประเภทแรก สำหรับการวิเคราะห์บริการ — ประเภทที่สอง ทั้งสองประเภทมีการแยกข้อดี ข้อเสีย และความคิดเห็น รวมถึงคะแนนและวันที่ คำขอรีวิวพบได้ด้วยวิธีการเดียวกันผ่านแผงเครื่องมือสำหรับนักพัฒนาในแท็บ «รีวิว» ของบัตรสินค้า
การปรับให้เข้ากับสคีมา
บนมาร์เก็ตเพลส ฟิลด์ข้อความมักประกอบด้วยสามส่วน บันทึกดังนี้: pros — ในคอลัมน์ pros, cons — ในคอลัมน์ cons และความคิดเห็นทั่วไป — ใน text หากต้องการข้อความต่อเนื่องเดียวสำหรับการวิเคราะห์ ให้รวมสามคอลัมน์ด้วยตัวคั่นในขั้นตอนการทำความสะอาด แต่ในข้อมูลดิบให้เก็บแยกกัน
คำแนะนำ: บนมาร์เก็ตเพลส รีวิวที่มีรูปและการซื้อที่ยืนยันแล้วมีข้อมูลมากกว่าอย่างเห็นได้ชัด เพิ่มตัวกรองในสคริปต์: รวบรวมทั้งหมดก่อน แล้วเมื่อวิเคราะห์ให้ดูส่วนที่มี has_photo เท่ากับ 1 แยกต่างหาก บ่อยครั้งที่มีคำอธิบายโดยละเอียดของข้อบกพร่องและสถานการณ์การใช้งานจริงอยู่ที่นั่น
ผลลัพธ์ที่คาดหวัง: หนึ่ง CSV ต่อมาร์เก็ตเพลสหนึ่งแห่งที่มีรีวิวสำหรับ 3-5 สินค้า ซึ่งปรับตามสคีมาเดียวกัน
ปัญหาที่อาจเกิดขึ้น: จำนวนรีวิวที่รวบรวมได้น้อยกว่าตัวนับบนหน้า สาเหตุ: แพลตฟอร์มจำกัดความลึกของการแสดงหรือให้รีวิวเฉพาะที่มีข้อความ ซ่อนคะแนนที่ไม่มีคอมเมนต์ วิธีแก้: เปรียบเทียบตัวนับ «คะแนนทั้งหมด» และ «ที่มีข้อความ» บนหน้า — โดยปกติความแตกต่างอธิบายได้ด้วยสิ่งนี้
การตรวจสอบ: เปิดไฟล์ใน Excel สร้างตารางสรุปตามคอลัมน์ rating การกระจายคะแนนควรใกล้เคียงกับที่บัตรสินค้าแสดง: หากบนแพลตฟอร์มมีห้าดาว 70% ในตัวอย่างของคุณควรมีค่าใกล้เคียง
ขั้นตอนที่ 6: รวบรวมรีวิวจากแพลตฟอร์มรวมรีวิว — Otzovik, iRecommend, Flamp, Zoon
เป้าหมายของขั้นตอนนี้: เรียนรู้การทำงานกับแพลตฟอร์มที่รีวิวเป็นบทความอิสระที่มีมาร์กอัป HTML ไม่ใช่ JSON ในเบื้องหลัง
ความแตกต่างของแพลตฟอร์มรวมรีวิว
Otzovik และ iRecommend สร้างหน้าเว็บแบบคลาสสิก: รีวิวแต่ละรายการเป็นหน้าแยกที่มีหัวข้อ ข้อความยาว คะแนน วันที่ ข้อดีและข้อเสีย และบนหน้าวัตถุมีรายการลิงก์ไปยังรีวิวเหล่านี้พร้อมตัวอย่างสั้น ๆ Flamp และ Zoon ใกล้เคียงกับแผนที่: องค์กร รายการรีวิว โหลดเป็นส่วน ๆ ดังนั้นสำหรับสองแห่งแรกต้องแยกวิเคราะห์ HTML สำหรับสองแห่งหลังใช้วิธีจากขั้นตอนที่ 4
ติดตั้งไลบรารีสำหรับแยกวิเคราะห์ HTML
รันในเทอร์มินัล pip install beautifulsoup4 lxml ไลบรารี BeautifulSoup ช่วยให้ค้นหาองค์ประกอบของหน้าตามแท็กและคลาส เหมือนที่คุณมองเห็นด้วยตาในแผงเครื่องมือสำหรับนักพัฒนา
การรวบรวมทีละขั้นตอนจาก Otzovik
- เปิดหน้าวัตถุ (สินค้า บริษัท คอร์ส) บน Otzovik
- กด F12 และไปที่แท็บ Elements (องค์ประกอบ)
- กดไอคอนลูกศรที่มุมซ้ายบนของแผงและคลิกที่หัวข้อของรีวิวแรกในรายการ ในแผงจะไฮไลต์องค์ประกอบ HTML บันทึกแท็กและคลาส — นี่คือเซเลกเตอร์ของลิงก์ไปยังรีวิว
- ด้วยวิธีเดียวกันค้นหาองค์ประกอบของคะแนน (มักเป็นบล็อกที่มีดาวและแอตทริบิวต์ตัวเลข) วันที่ และข้อความสั้น
- เลื่อนหน้าลงและค้นหาบล็อกการแบ่งหน้า คลิกที่หมายเลข 2 และดูว่าที่อยู่เปลี่ยนอย่างไร — มักเพิ่มหมายเลขหน้า นี่คือเทมเพลตสำหรับการสำรวจ
- ในสคริปต์: โหลดหน้าของรายการผ่าน requests ด้วยพร็อกซี แยกวิเคราะห์ด้วย BeautifulSoup ดึงลิงก์ไปยังรีวิวและตัวอย่าง จากนั้นไปยังหน้าถัดไปของรายการ หยุดระหว่างหน้า — 5-8 วินาที แพลตฟอร์มรวมรีวิวไวต่อการรบกวนมากกว่าแผนที่
- หากต้องการข้อความรีวิวเต็ม ไม่ใช่ตัวอย่าง ให้ทำรอบที่สอง: ตามแต่ละลิงก์โหลดหน้าของรีวิวและดึงข้อความหลัก บล็อกข้อดีและข้อเสีย คะแนนตามเกณฑ์ย่อย
iRecommend
ตรรกะคล้ายกับ Otzovik: หน้าวัตถุที่มีรายการรีวิวและหน้าแยกของรีวิว แตกต่างที่มาร์กอัปและคะแนนแสดงเป็นจำนวนดาวที่ถูกระบาย — นับองค์ประกอบดาวที่มีคลาส active แทนการหาตัวเลข
Flamp และ Zoon
สำหรับแพลตฟอร์มเหล่านี้ใช้วิธีจากขั้นตอนที่ 4: เปิดองค์กร สลับไปที่ Fetch/XHR เลื่อนรีวิวและค้นหาคำขอเบื้องหลัง Flamp ให้รีวิวพร้อมคะแนน ข้อความ วันที่ การตอบกลับอย่างเป็นทางการ และประโยชน์ Zoon — พร้อมคะแนน ข้อความ วันที่ และการตอบกลับขององค์กร ทั้งสองแพลตฟอร์มแสดงจำนวนรีวิวทั้งหมดเพื่อควบคุมความครบถ้วน
ตัวอย่างย่อของการแยกวิเคราะห์ HTML
from bs4 import BeautifulSoup
html = requests.get(page_url, headers=headers, proxies=proxies, timeout=30).text
soup = BeautifulSoup(html, 'lxml')
for card in soup.select('div.review-card'):
title_el = card.select_one('a.review-title')
rating_el = card.select_one('div.rating')
date_el = card.select_one('span.review-date')
row = {'text': title_el.get_text(strip=True) if title_el else '', 'rating': rating_el.get('data-value') if rating_el else '', 'published_at': date_el.get_text(strip=True) if date_el else '', 'url': title_el.get('href') if title_el else ''}ชื่อคลาสที่นี่เป็นตัวอย่าง — ใส่ของจริงที่คุณเห็นในแผง Elements การตรวจสอบว่าองค์ประกอบว่างเป็นสิ่งจำเป็น: หากมาร์กอัปของรีวิวหนึ่งแตกต่าง สคริปต์ไม่ควรล้มเหลวทั้งหมด
คำแนะนำ: บนแพลตฟอร์มรวมรีวิว วันที่มักเขียนเป็นคำ: «เมื่อวาน», «3 วันที่แล้ว», «14 มีนาคม» สร้างฟังก์ชันปกติของวันที่ที่แปลงสตริงดังกล่าวเป็นรูปแบบ YYYY-MM-DD โดยอ้างอิงจากวันที่รวบรวม หากไม่มี การจัดเรียงตามเวลาจะไม่ทำงาน
ผลลัพธ์ที่คาดหวัง: CSV ที่มีรีวิวจากหนึ่งหรือสองแพลตฟอร์มรวมรีวิว ซึ่งแต่ละรีวิวมีคะแนน วันที่ และข้อความ และสำหรับ Otzovik และ iRecommend — ยังมีลิงก์ไปยังหน้าเต็ม
ปัญหาที่อาจเกิดขึ้น: เซเลกเตอร์หยุดค้นหาองค์ประกอบหลังจากหลายหน้า สาเหตุ: แพลตฟอร์มส่งหน้า проверки แทนรายการ วิธีแก้: ตรวจสอบหัวข้อหน้าหลังจากโหลดแต่ละครั้ง เมื่อมีสัญญาณของการตรวจสอบ — หยุด เปลี่ยน IP ทำซ้ำในอีกไม่กี่นาที
การตรวจสอบ: จำนวนรีวิวที่รวบรวมได้จากหนึ่งหน้ารายการเท่ากับจำนวนรีวิวที่คุณเห็นบนหน้านั้นในเบราว์เซอร์ หากได้น้อยกว่า — หนึ่งในเซเลกเตอร์แคบเกินไป
ขั้นตอนที่ 7: เชื่อมต่อพร็อกซีมือถือและตั้งค่าการหมุนเวียน
เป้าหมายของขั้นตอนนี้: ทำให้ตัวรวบรวมรีวิวทำงานได้อย่างเสถียรบนวัตถุหลายสิบและหลายร้อยรายการ กระจายภาระและไม่สร้างกระแสที่ผิดปกติจากที่อยู่เดียว
ทำไมต้องพร็อกซีมือถือ
แพลตฟอร์มทั้งหมดในคู่มือนี้มุ่งเป้าไปที่ผู้ใช้มือถือ: ส่วนใหญ่เขียนและอ่านรีวิวจากสมาร์ทโฟน ที่อยู่ IP มือถือของผู้ให้บริการเป็นที่อยู่ที่มีผู้ใช้จริงหลายร้อยหลายพันคนอยู่เบื้องหลังในเวลาเดียวกัน แพลตฟอร์มไม่สามารถบล็อกที่อยู่ดังกล่าวโดยไม่กระทบต่อผู้ใช้จริง ดังนั้นจึงผ่อนปรนต่อพวกมัน สำหรับการรวบรวมรีวิว นี่หมายถึงการตรวจสอบน้อยลง การแจ้งเตือนผิดพลาดของระบบป้องกันน้อยลง และความเร็วที่คาดเดาได้
การตั้งค่าการเชื่อมต่อ
- เข้าสู่แดชบอร์ดที่ mobileproxy.space และเปิดรายการพร็อกซีของคุณ
- คัดลอกโฮสต์ พอร์ต ล็อกอิน และรหัสผ่าน สังเกตโปรโตคอล: สำหรับ requests สะดวกกว่า HTTP-พร็อกซี แต่ SOCKS5 ก็รองรับเมื่อติดตั้งส่วนเสริม
pip install requests[socks] - ใส่ข้อมูลในตัวแปร PROXY ในสคริปต์ รูปแบบ: โปรโตคอล, ทวิภาค, สแลชสองตัว, ล็อกอิน, ทวิภาค, รหัสผ่าน, แอด, โฮสต์, ทวิภาค, พอร์ต
- คัดลอกจากแดชบอร์ดลิงก์สำหรับเปลี่ยน IP และบันทึกในตัวแปร ROTATE_URL
- รันคำขอทดสอบผ่านพร็อกซีไปยังบริการใด ๆ ที่แสดง IP ของคุณ ในการตอบกลับควรมีที่อยู่ของผู้ให้บริการมือถือ ไม่ใช่ผู้ให้บริการอินเทอร์เน็ตบ้านของคุณ
กลยุทธ์การหมุนเวียน
มีสองวิธี และทั้งสองใช้ได้
- การหมุนเวียนตามเวลา ในแดชบอร์ดตั้งค่าช่วงเวลาการเปลี่ยน IP อัตโนมัติ เช่น ทุก 5 นาที สคริปต์ไม่ต้องทำอะไร — ที่อยู่เปลี่ยนเอง เหมาะสำหรับการรวบรวมยาว ๆ ที่สงบ
- การหมุนเวียนตามเหตุการณ์ สคริปต์ดึง ROTATE_URL ในจังหวะที่ต้องการ: หลังจากทุก N คำขอ เมื่อเปลี่ยนวัตถุใหม่ หรือเมื่อได้รับรหัส 429/403 เหมาะเมื่อต้องการควบคุม
กฎปฏิบัติสำหรับรีวิว: เปลี่ยน IP เมื่อเปลี่ยนวัตถุใหม่แต่ละครั้ง และเพิ่มเติมหลังจาก 40-60 คำขอภายในวัตถุเดียว หลังจากเปลี่ยน IP ให้หยุด 5-10 วินาที — ผู้ให้บริการต้องใช้เวลาให้ที่อยู่ใหม่ทำงาน
การจัดการข้อผิดพลาดและการลองใหม่
เพิ่มในฟังก์ชัน fetch_page ตัวห่อ: เมื่อมีรหัส 429, 403, 5xx หรือ timeout — เรียกการหมุนเวียน รอ ทำซ้ำคำขอไม่เกินสามครั้งด้วยการหยุดที่เพิ่มขึ้น (10, 30, 90 วินาที) หากสามครั้งไม่สำเร็จ — บันทึกวัตถุในไฟล์ failed.txt และไปยังรายการถัดไป วิธีนี้วัตถุที่มีปัญหาหนึ่งรายการจะไม่หยุดการรวบรวมทั้งหมด และคุณจะรวบรวมส่วนที่ขาดในภายหลังแยกต่างหาก
def fetch_with_retry(url, attempts=3):
delay = 10
for i in range(attempts):
try:
r = requests.get(url, headers=headers, proxies=proxies, timeout=30)
if r.status_code == 200:
return r.json()
except requests.RequestException:
pass
requests.get(ROTATE_URL, timeout=15)
time.sleep(delay)
delay *= 3
return Noneใช้กี่เธรด
สำหรับผู้เริ่มต้น — หนึ่งเธรด พร็อกซีเดียว การเชื่อมต่อเดียว การสำรวจแบบลำดับ ช้าแต่เชื่อถือได้: 500-1000 รีวิวต่อชั่วโมงโดยไม่มีปัญหา เมื่อแน่ใจว่าทุกอย่างเสถียร สามารถเพิ่มพร็อกซีที่สองและรันสคริปต์อินสแตนซ์ที่สองบนอีกครึ่งของรายการวัตถุ มากกว่า 3-4 เธรดต่อแพลตฟอร์มสำหรับรีวิวแทบไม่จำเป็น
คำแนะนำ: จับคู่ User-Agent กับประเภท IP หากใช้พร็อกซีมือถือ ให้แสดงเป็นเบราว์เซอร์มือถือตามตัวอย่างในขั้นตอนที่ 4 การไม่ตรงกัน «IP มือถือ แต่ Chrome เดสก์ท็อปบน Windows» ไม่สำคัญมาก แต่ความสอดคล้องช่วยลดการตรวจสอบเพิ่มเติม
ผลลัพธ์ที่คาดหวัง: สคริปต์ที่สำรวจ sources.csv ทั้งหมดบนแพลตฟอร์มเดียวโดยไม่ต้องแทรกแซง เปลี่ยน IP เมื่อเปลี่ยนวัตถุ และบันทึกวัตถุที่มีปัญหาลง failed.txt
ปัญหาที่อาจเกิดขึ้น: หลังเปลี่ยน IP คำขอแรก ๆ ล้มเหลวด้วย timeout วิธีแก้: เพิ่มเวลาหยุดหลังการหมุนเวียนเป็น 15 วินาที พร็อกซีไม่เชื่อมต่อเลย — ตรวจสอบว่าไม่ได้เปิดใช้รายการที่อยู่ IP ที่อนุญาตในแดชบอร์ด และเพิ่มที่อยู่คอมพิวเตอร์ของคุณ
การตรวจสอบ: รันการรวบรวม 10 วัตถุติดต่อกัน ในบันทึกควรมีรายการเกี่ยวกับการเปลี่ยน IP ระหว่างวัตถุ ไฟล์ failed.txt ว่างเปล่าหรือมีไม่เกินหนึ่งวัตถุ และจำนวนแถวทั้งหมดในผลลัพธ์เทียบได้กับผลรวมของตัวนับรีวิวบนแพลตฟอร์ม
ขั้นตอนที่ 8: บันทึก ทำความสะอาด และลบข้อมูลซ้ำ
เป้าหมายของขั้นตอนนี้: เปลี่ยนชุด CSV ดิบจากแพลตฟอร์มต่าง ๆ เป็นตารางเดียวที่สะอาด พร้อมสำหรับการวิเคราะห์
การรวมไฟล์
- ตรวจสอบว่าไฟล์ดิบทั้งหมดอยู่ในโฟลเดอร์ raw และมีหัวข้อเดียวกันตาม schema.txt
- สร้างไฟล์ merge.py ผ่าน pandas อ่าน CSV ทั้งหมดจากโฟลเดอร์ raw เป็น DataFrame เดียว: ฟังก์ชัน pandas.concat รวมรายการตาราง
- ตรวจสอบประเภท: rating ต้องเป็นตัวเลข published_at — วันที่ ปรับผ่าน pandas.to_numeric และ pandas.to_datetime ด้วยพารามิเตอร์ errors='coerce' เพื่อให้ค่าที่ไม่ถูกต้องกลายเป็นว่างเปล่า ไม่ทำให้การประมวลผลล้มเหลว
การลบข้อมูลซ้ำ
การซ้ำเกิดขึ้นจากสามสาเหตุ: การทับซ้อนของหน้าในการแบ่งหน้า การรันซ้ำ และรีวิวเดียวกันที่ผู้เขียนโพสต์บนหลายแพลตฟอร์ม จัดการตามลำดับ:
- ลบข้อมูลซ้ำที่แน่นอนตามคู่ source และ review_id — นี่คือการซ้ำจากการแบ่งหน้าและการรีสตาร์ท ใช้เมธอด drop_duplicates ด้วยพารามิเตอร์ subset
- ค้นหาข้อมูลซ้ำที่ไม่ชัดเจนภายในแพลตฟอร์มเดียว: object_id เดียวกัน วันที่เดียวกัน และ 100 ตัวอักษรแรกของข้อความเหมือนกัน สิ่งนี้เกิดขึ้นเมื่อแพลตฟอร์มเปลี่ยนตัวระบุเมื่อแก้ไขรีวิว
- อย่าลบข้อมูลซ้ำข้ามแพลตฟอร์ม แต่ทำเครื่องหมายในคอลัมน์แยก การที่คนเขียนสิ่งเดียวกันบน Otzovik และ Yandex Maps นั้นมีข้อมูลในตัวเอง
การทำความสะอาดข้อความ
- ลบช่องว่างคู่และการขึ้นบรรทัดใหม่ภายในข้อความ
- ลบวลีบริการของแพลตฟอร์มที่ปนเข้าไปในข้อความ: «อ่านต่อ», «แสดงเพิ่มเติม»
- แทนที่สตริงว่างใน pros และ cons ด้วยค่าที่ว่างเปล่าอย่างชัดเจน ไม่ใช่สตริง «ไม่มี» หรือ «-»
- ตรวจสอบการเข้ารหัส: หากเห็นตัวอักษรแปลก ๆ แสดงว่าไฟล์ถูกบันทึกไม่ใช่ utf-8 บันทึกใหม่จากแหล่งดิบ
การส่งออกผลลัพธ์
บันทึกตารางสุดท้ายในโฟลเดอร์ clean ชื่อ reviews_all_YYYY-MM-DD.xlsx ผ่านเมธอด to_excel และ CSV ควบคู่กัน Excel สะดวกสำหรับการดู CSV — สำหรับการโหลดเข้าสู่ระบบอื่น ๆ นอกจากนี้บันทึกไฟล์สรุปแยกต่างหาก: จำนวนรีวิวตามแพลตฟอร์ม คะแนนเฉลี่ยตามวัตถุ สัดส่วนรีวิวที่มีการตอบกลับของบริษัท
คำแนะนำ: เพิ่มคอลัมน์ text_len ในตารางที่สะอาดซึ่งมีความยาวของข้อความ รีวิวที่สั้นกว่า 30 ตัวอักษรแทบไม่มีประโยชน์สำหรับการวิเคราะห์สาเหตุ แต่รีวิวยาวที่มีคะแนน 2-3 คือทองคำ: ในนั้นผู้คนอธิบายอย่างละเอียดว่าอะไรไม่ถูกต้อง
ผลลัพธ์ที่คาดหวัง: ไฟล์เดียวที่สะอาดพร้อมรีวิวจากทุกแพลตฟอร์ม ไม่มีข้อมูลซ้ำที่แน่นอน พร้อมประเภทข้อมูลที่ถูกต้องและสรุป
ปัญหาที่อาจเกิดขึ้น: หลังการลบข้อมูลซ้ำ หายไปหลายแถวเกินไป สาเหตุ: review_id บนแพลตฟอร์มหนึ่งว่างเปล่าสำหรับทุกรายการ และทั้งหมดถือเป็นข้อมูลซ้ำ วิธีแก้: ตรวจสอบความสมบูรณ์ของ review_id ตามแพลตฟอร์ม และสำหรับแพลตฟอร์มที่มีปัญหา ให้สร้างตัวระบุจาก object_id วันที่ และแฮชของข้อความ
การตรวจสอบ: จำนวนแถวในไฟล์ที่สะอาดไม่น้อยกว่าผลรวมของแถวในไฟล์ดิบเกิน 5-10% ในคอลัมน์ rating ไม่มีค่านอกช่วง 1-5 ในคอลัมน์ published_at ไม่มีวันที่ในอนาคต
การตรวจสอบผลลัพธ์: เช็กลิสต์และการทดสอบ
ก่อนที่จะสร้างข้อสรุปจากรีวิวที่รวบรวมมา ตรวจสอบให้แน่ใจว่าการรวบรวมถูกต้อง ผ่านเช็กลิสต์ทั้งหมด
เช็กลิสต์ความพร้อม
- สำหรับแต่ละวัตถุจาก sources.csv ในตารางที่สะอาดมีอย่างน้อยหนึ่งรีวิว หรือวัตถุถูกบันทึกใน failed.txt พร้อมสาเหตุ
- จำนวนรีวิวต่อวัตถุแตกต่างจากตัวนับบนแพลตฟอร์มไม่เกิน 10%
- การกระจายคะแนนตามวัตถุใกล้เคียงกับการกระจายที่แพลตฟอร์มแสดง
- รีวิวล่าสุดในตารางมีวันที่ไม่เกินเมื่อวานเมื่อเทียบกับวันที่รวบรวม หากวัตถุยังใช้งานอยู่
- วันที่ทั้งหมดในรูปแบบ YYYY-MM-DD คะแนนทั้งหมดเป็นตัวเลข
- ไม่มีข้อมูลซ้ำที่แน่นอนตาม source และ review_id
- ชื่อผู้เขียนไม่มี หรือถูกแทนที่ด้วยแฮช หากงานไม่ต้องการชื่อ
- ไฟล์ข้อมูลดิบถูกบันทึกพร้อมวันที่และไม่ถูกเขียนทับ
- โทเค็นและข้อมูลพร็อกซีไม่ได้อยู่ในสคริปต์ แต่อยู่ในไฟล์การตั้งค่าแยก
วิธีทดสอบแบบสุ่ม
- เลือกรีวิว 10 รายการแบบสุ่มจากตารางด้วยฟังก์ชัน sample ใน pandas
- สำหรับแต่ละรายการ เปิดหน้าวัตถุบนแพลตฟอร์มและค้นหารีวิวตามส่วนของข้อความ
- ตรวจสอบคะแนน วันที่ และการมีอยู่ของการตอบกลับของบริษัท
- หากตรงกัน 10 จาก 10 — ยอดเยี่ยม หาก 8-9 — ตรวจสอบว่าความคลาดเคลื่อนเกี่ยวข้องกับการแก้ไขรีวิวหลังการรวบรวมหรือไม่ หากน้อยกว่า 8 — มีข้อผิดพลาดเชิงระบบในการแยกวิเคราะห์ กลับไปที่ขั้นตอนที่เกี่ยวข้อง
ตัวชี้วัดความสำเร็จ
ความสำเร็จมีลักษณะดังนี้: คุณสามารถเปิดตารางเดียว กรองตามแพลตฟอร์มและวัตถุใด ๆ จัดเรียงตามวันที่และคะแนน และตอบคำถามเริ่มต้นจากขั้นตอนที่ 1 ได้ภายในห้านาที ตัวอย่างเช่น เห็นว่า 40% ของรีวิวที่มีคะแนน 1-2 เกี่ยวกับร้านกาแฟบน Yandex Maps ในช่วงสามเดือนที่ผ่านมากล่าวถึงเวลารอ และบน 2GIS คนเดียวกันชื่นชมกาแฟแต่ตำหนิพนักงาน หากคำถามได้รับคำตอบ — การรวบรวมบรรลุเป้าหมาย
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
ด้านล่างรวบรวมปัญหาที่เกือบทุกคนที่ตั้งค่าตัวรวบรวมรีวิวครั้งแรกพบ รูปแบบ: ปัญหา สาเหตุ วิธีแก้
1. สคริปต์รวบรวมเฉพาะ 20 รีวิวแรก
สาเหตุ: ไม่ได้ใช้การแบ่งหน้าหรือกำหนดพารามิเตอร์ออฟเซ็ตไม่ถูกต้อง
วิธีแก้: กลับไปที่แผงเครื่องมือสำหรับนักพัฒนา เลื่อนรายการรีวิวสองครั้งและเปรียบเทียบที่อยู่ของคำขอสองคำขอติดกัน พารามิเตอร์ที่เปลี่ยนไปคือออฟเซ็ตหรือหมายเลขหน้า ตรวจสอบว่าสคริปต์เพิ่มค่าด้วยขั้นตอนที่ถูกต้อง
2. รีวิวทั้งหมดมีวันที่เดียวกัน — วันที่รวบรวม
สาเหตุ: ในฟิลด์ published_at บันทึก collected_at หรือแพลตฟอร์มให้วันที่ในฟิลด์ที่มีชื่ออื่น
วิธีแก้: เปิด raw_json ของรีวิวหนึ่งและค้นหาฟิลด์ที่มีวันที่เผยแพร่ อาจมีชื่อ date, created, published, time, updatedAt แก้ไขชื่อฟิลด์ในสคริปต์
3. ข้อความรัสเซียใน Excel แสดงไม่ถูกต้อง
สาเหตุ: CSV ถูกบันทึกใน utf-8 โดยไม่มีเครื่องหมายลำดับไบต์ Excel เปิดในรูปแบบอื่น
วิธีแก้: บันทึกด้วยการเข้ารหัส utf-8-sig หรือส่งออกเป็น xlsx ทันทีผ่าน to_excel
4. แพลตฟอร์มตอบกลับด้วยรหัส 403 ทุกคำขอ
สาเหตุ: ไม่ได้ส่งเฮดเดอร์ที่จำเป็น ไม่ได้ตั้งคุกกี้เซสชัน หรือส่งคำขอถี่เกินไป
วิธีแก้: เปรียบเทียบกับคำสั่ง cURL มาตรฐาน ใช้ requests.Session และโหลดหน้าวัตถุปกติก่อน เพิ่มเวลาหยุดเป็น 5 วินาที เปลี่ยน IP ผ่านพร็อกซีและรอ 10 นาทีก่อนลองใหม่
5. คะแนนที่รวบรวมได้ไม่ตรงกับของจริง
สาเหตุ: แพลตฟอร์มเก็บคะแนนในมาตราส่วนอื่น (เช่น 0 ถึง 100 หรือ 1 ถึง 10) หรือในฟิลด์แยกเก็บคะแนนตามเกณฑ์ย่อย ไม่ใช่คะแนนรวม
วิธีแก้: ตรวจสอบสามรีวิวด้วยมือ กำหนดมาตราส่วนและปรับเป็นห้าดาวโดยหารและปัดเศษ บันทึกสิ่งนี้ใน schema.txt
6. จำนวนรีวิวในแต่ละครั้งต่างกัน
สาเหตุ: ไม่ได้ล็อกการจัดเรียง และแพลตฟอร์มให้ชุดที่แตกต่างกันในโหมด «ตามความเกี่ยวข้อง»
วิธีแก้: ค้นหาพารามิเตอร์การจัดเรียงในที่อยู่คำขอและกำหนดการจัดเรียงตามวันที่อย่างเข้มงวด รวบรวมจนกว่าจะพบรีวิวที่เก่ากว่าช่วงเวลาที่ต้องการ
7. สคริปต์ล้มเหลวที่วัตถุหนึ่งและไม่ดำเนินการต่อ
สาเหตุ: ไม่มีการจัดการข้อยกเว้น ข้อผิดพลาดใด ๆ หยุดโปรแกรม
วิธีแก้: ห่อการประมวลผลแต่ละวัตถุใน try-except บันทึกข้อผิดพลาดและตัวระบุวัตถุใน failed.txt และไปยังรายการถัดไป ส่วนที่ขาดจะรวบรวมในการรันแยกต่างหาก
8. หลังจากทำงานมาหนึ่งสัปดาห์ สคริปต์ก็หยุดค้นหาทุกอย่างทันที
สาเหตุ: แพลตฟอร์มเปลี่ยนที่อยู่คำขอ โครงสร้าง JSON หรือชื่อคลาสใน HTML
วิธีแก้: นี่เป็นส่วนปกติของชีวิตตัวรวบรวมใด ๆ ทำซ้ำขั้นตอนการค้นหาคำขอจากขั้นตอนที่ 4 และอัปเดตที่อยู่และชื่อฟิลด์ เก็บรายการเซเลกเตอร์และฟิลด์ในไฟล์การตั้งค่าแยก เพื่อแก้ไขที่เดียว ไม่ใช่ทั้งโค้ด
9. พร็อกซีทำงาน แต่ความเร็วต่ำมาก
สาเหตุ: การตอบกลับมีขนาดใหญ่เกินไป (มาร์เก็ตเพลสบางครั้งส่งรีวิวหลายพันรายการในไฟล์เดียว) หรือภาระบนสถานีฐานของผู้ให้บริการในชั่วโมงเร่งด่วน
วิธีแก้: เพิ่ม timeout เปิดใช้การบีบอัดผ่านเฮดเดอร์ Accept-Encoding กำหนดการรวบรวมปริมาณมากในเวลากลางคืน
ความสามารถเพิ่มเติมสำหรับผู้ขั้นสูง
หากเข้าใจสถานการณ์พื้นฐานแล้ว นี่คือสิ่งที่สามารถพัฒนาได้ ส่วนนี้ถือว่าคุณเขียน Python ได้อย่างมั่นใจ
การรวบรวมแบบเพิ่มขึ้น
แทนที่จะรวบรวมใหม่ทั้งหมด ให้เก็บวันที่ของรีวิวล่าสุดที่รวบรวมได้สำหรับแต่ละวัตถุ ในการรันครั้งถัดไป ให้รวบรวมด้วยการจัดเรียงตามวันที่และหยุดเมื่อพบรีวิวที่ไม่ใหม่กว่าวันที่ที่บันทึกไว้ วิธีนี้การอัปเดตประจำวันสำหรับ 500 วัตถุใช้เวลาไม่กี่นาทีแทนที่จะเป็นชั่วโมง และภาระบนแพลตฟอร์มลดลงหลายสิบเท่า โปรดทราบว่ารีวิวอาจปรากฏย้อนหลังหลังการกลั่นกรอง — ทำการทับซ้อน 2-3 วัน
ระบบอัตโนมัติของเบราว์เซอร์สำหรับแพลตฟอร์มที่ซับซ้อน
Google Maps และบางส่วนของ Ozon รวบรวมได้ง่ายกว่าผ่านเบราว์เซอร์ที่ควบคุมได้: Playwright ที่เชื่อมต่อกับพร็อกซีมือถือเปิดหน้า เลื่อนรายการรีวิวและดักจับการตอบกลับเบื้องหลังผ่านตัวจัดการเหตุการณ์ response คุณจะได้ JSON เดียวกับในแผงเครื่องมือสำหรับนักพัฒนา แต่ไม่ต้องจำลองเฮดเดอร์และคุกกี้ด้วยมือ Playwright รองรับการจำลองอุปกรณ์มือถือ ซึ่งเข้ากันได้ดีกับ IP มือถือ ราคาคือความเร็วและการใช้หน่วยความจำ: เบราว์เซอร์หนึ่งตัวกิน 300-500 MB ดังนั้นอย่ารันเกิน 2-3 อินสแตนซ์
การจัดเก็บในฐานข้อมูล
เมื่อรีวิวมากกว่า 100,000 รายการ CSV ไม่สะดวก เปลี่ยนไปใช้ SQLite (มีใน Python ไฟล์บนดิสก์ ไม่ต้องตั้งค่า) หรือ PostgreSQL ตาราง reviews ที่มีดัชนีเฉพาะสำหรับคู่ source และ review_id ปกป้องจากข้อมูลซ้ำโดยอัตโนมัติ: การแทรกผ่าน INSERT พร้อมจัดการความขัดแย้ง ON CONFLICT DO NOTHING จะทิ้งข้อมูลซ้ำที่ระดับฐานข้อมูล
การเสริมข้อมูลและการวิเคราะห์
- อารมณ์และหัวข้อ ส่งข้อความผ่านโมเดลภาษาด้วยพรอมต์เช่น «ระบุ 3 หัวข้อหลักและอารมณ์โดยรวม» ผลลัพธ์ใส่ในคอลัมน์แยก สำหรับหลายหมื่นรีวิวใช้การประมวลผลแบบกลุ่มและแคชเพื่อไม่จ่ายซ้ำสำหรับข้อความเดียวกัน
- พลวัตของคะแนน สร้างคะแนนเฉลี่ยรายสัปดาห์สำหรับแต่ละวัตถุ การลดลงอย่างรวดเร็วเป็นสัญญาณของปัญหาที่รีวิวจะอธิบายเป็นคำพูด
- ความเร็วในการตอบสนองของบริษัท ความแตกต่างระหว่าง published_at และวันที่ตอบกลับของบริษัทเป็นตัวชี้วัดคุณภาพการสนับสนุนโดยตรง ทั้งของตัวเองและคู่แข่ง
- พจนานุกรมความเจ็บปวดสำหรับโฆษณา การวิเคราะห์ความถี่ของคำนามและคำคุณศัพท์ในรีวิวที่มีคะแนน 1-2 ให้รายการสูตรสำเร็จรูปสำหรับงานโฆษณาและหน้าแลนดิ้ง
การตรวจสอบสุขภาพของตัวรวบรวม
ตั้งการรันประจำวันผ่านตัวจัดกำหนดการงานของ Windows หรือ cron และเพิ่มการตรวจสอบง่าย ๆ: หากในหนึ่งวันรวบรวมได้น้อยกว่า 30% ของค่าเฉลี่ยรายสัปดาห์หรือสัดส่วนข้อผิดพลาดเกิน 10% — ส่งการแจ้งเตือนไปยัง Telegram ผ่านบอท วิธีนี้คุณจะรู้เกี่ยวกับการเปลี่ยนแปลงมาร์กอัปบนแพลตฟอร์มในวันเดียวกัน ไม่ใช่หลังจากผ่านไปหนึ่งเดือนเมื่อต้องการข้อมูล
การจัดการพูลพร็อกซี
เมื่อทำงานกับหลายแพลตฟอร์มพร้อมกัน ให้กำหนดพร็อกซีมือถือแยกสำหรับแต่ละแพลตฟอร์ม วิธีนี้พฤติกรรมบนแพลตฟอร์มหนึ่งจะไม่ส่งผลต่อชื่อเสียงของที่อยู่บนอีกแพลตฟอร์ม การหมุนเวียนสำหรับแผนที่ทำน้อยลง (วัตถุมักมีขนาดเล็ก 50-200 รีวิว) สำหรับมาร์เก็ตเพลส — บ่อยขึ้น (หลายพันรีวิวต่อการ์ด) เก็บบันทึก: เวลา แพลตฟอร์ม IP รหัสตอบกลับ หลังจากหนึ่งสัปดาห์จากบันทึกนี้จะเห็นว่าช่วงเวลาการหมุนเวียนใดเหมาะสมกับโปรไฟล์ภาระของคุณ
คำถามที่พบบ่อย: การรวบรวมรีวิว
การรวบรวมรีวิวจากหน้าสาธารณะถูกกฎหมายหรือไม่?
การรวบรวมข้อมูลสาธารณะเพื่อการวิเคราะห์ของตัวเองไม่ใช่สิ่งต้องห้าม แต่มีข้อจำกัด: ข้อตกลงผู้ใช้ของแพลตฟอร์ม ข้อกำหนด 152-ФЗ เกี่ยวกับการประมวลผลข้อมูลส่วนบุคคล ห้ามสร้างอุปสรรคต่อการทำงานของบริการ รักษาระยะห่าง ไม่ระบุตัวตนผู้เขียน อย่าเผยแพร่ฐานข้อมูลที่รวบรวม และใช้ API อย่างเป็นทางการทุกที่ที่มี สำหรับการใช้งานเชิงพาณิชย์ของข้อมูล ปรึกษาทนายความ
สามารถทำได้โดยไม่ต้องเขียนโปรแกรมหรือไม่?
บางส่วน สำหรับวัตถุของคุณเอง แดชบอร์ดก็เพียงพอ สำหรับงานเล็ก ๆ ครั้งเดียว ส่วนขยายเบราว์เซอร์สำหรับรวบรวมที่ส่งออกองค์ประกอบที่มองเห็นบนหน้าเป็นตารางก็เพียงพอ: คุณเลื่อนรีวิวด้วยมือ ส่วนขยายรวบรวม สำหรับการรวบรวมประจำจากหลายสิบวัตถุ สคริปต์ยังคงสะดวกและเชื่อถือได้มากกว่า และโค้ดสำเร็จรูปจากคู่มือนี้สามารถใช้ได้เกือบไม่เปลี่ยนแปลง
ทำไมต้องใช้พร็อกซีมือถือหากมีเพียง 10 วัตถุ?
สำหรับ 10 วัตถุและการรวบรวมครั้งเดียว สามารถลองได้โดยไม่ต้องใช้ แต่เมื่อคุณเริ่มอัปเดตข้อมูลเป็นประจำหรือขยายรายการ คำขอจาก IP บ้านเดียวจะเริ่มได้รับการตรวจสอบเพิ่มเติม พร็อกซีมือถือแก้ปัญหานี้ล่วงหน้า และค่าใช้จ่ายเทียบไม่ได้กับเวลาที่ใช้ในการจัดการการบล็อก
สามารถรวบรวมรีวิวได้กี่รีวิวต่อชั่วโมง?
ในหนึ่งเธรดที่มีการหยุด 2-5 วินาที — 500 ถึง 1500 รีวิวต่อชั่วโมง ขึ้นอยู่กับขนาดส่วนบนแพลตฟอร์ม มาร์เก็ตเพลสที่ส่งหลายร้อยรีวิวในคำตอบเดียวให้มากกว่า แพลตฟอร์มรวมรีวิวที่มี HTML แบ่งหน้าให้ — น้อยกว่า สำหรับงานวิเคราะห์ส่วนใหญ่เพียงพอมาก
จะรวบรวมเฉพาะรีวิวใหม่ ไม่ใช่ทั้งหมดใหม่ได้อย่างไร?
บันทึกวันที่ของรีวิวล่าสุดที่รวบรวมได้สำหรับแต่ละวัตถุ จัดเรียงตามวันที่เมื่อขอ และหยุดที่รีวิวที่รู้จักแล้วรายการแรก รายละเอียด — ในส่วนเกี่ยวกับการรวบรวมแบบเพิ่มขึ้น
รีวิวที่ไม่มีข้อความ มีแค่คะแนน — ควรรวบรวมหรือไม่?
ขึ้นอยู่กับงาน สำหรับการคำนวณคะแนนเฉลี่ยและพลวัต — ใช่ พวกมันมีผลต่อตัวเลข สำหรับการวิเคราะห์สาเหตุ — ไม่ สามารถกรองออกเมื่อประมวลผล รวบรวมทั้งหมด และกรองในขั้นตอนการวิเคราะห์: การรวบรวมใหม่มีค่าใช้จ่ายสูงกว่า
ทำอย่างไรหากแพลตฟอร์มแสดงแคปต์ชา?
หยุดการรวบรวม 10-15 นาที เปลี่ยน IP ผ่านพร็อกซี ลดความถี่ของคำขอและตรวจสอบเฮดเดอร์ แคปต์ชาเป็นสัญญาณว่าพฤติกรรมของคุณดูผิดปกติ งานคือทำให้เป็นปกติ ไม่ใช่ฝ่าด่านการตรวจสอบ
จะเก็บชื่อผู้เขียนอย่างไรไม่ให้ผิดกฎหมาย?
ที่ดีที่สุดคือไม่เก็บเลย หากต้องการแยกแยะรีวิวของผู้เขียนคนเดียวกัน ให้ใช้แฮชทางเดียวจากชื่อ หากจำเป็นต้องมีชื่อ (เช่น สำหรับตอบกลับลูกค้าผ่านแดชบอร์ด) ให้เก็บเฉพาะในกรอบการทำงานกับองค์กรของคุณเองและอย่าส่งให้บุคคลที่สาม
ตัวรวบรวมรีวิวเสียบ่อยแค่ไหน?
แพลตฟอร์มขนาดใหญ่เปลี่ยนคำขอภายในและมาร์กอัปหลายครั้งต่อปี ด้วยการตรวจสอบที่ดี การซ่อมแซมใช้เวลา 20-40 นาที: ทำซ้ำการค้นหาคำขอและอัปเดตฟิลด์ เก็บเซเลกเตอร์และที่อยู่ในไฟล์การตั้งค่า และการแก้ไขจะเป็นจุดเดียว
สามารถใช้สคริปต์เดียวรวบรวมจากทุกแพลตฟอร์มได้หรือไม่?
ได้ หากสร้างโครงร่างทั่วไป (พร็อกซี การลองใหม่ การเขียนลงสคีมา) และสำหรับแต่ละแพลตฟอร์มมีฟังก์ชันอะแดปเตอร์แยกที่รู้ที่อยู่คำขอและชื่อฟิลด์ นี่คือวิธีที่โปรเจกต์ที่เติบโตเต็มที่ทำงาน: โมดูลทั่วไปหนึ่งโมดูลและอะแดปเตอร์เล็ก ๆ สิบตัว
บทสรุป
มาสรุปกัน คุณได้เดินทางจากตั้งคำถามไปจนถึงตารางรีวิวที่สะอาดจากสามประเภทของแพลตฟอร์มที่แตกต่างกัน คุณได้เรียนรู้การค้นหาคำขอเบื้องหลังผ่านแผงเครื่องมือสำหรับนักพัฒนา จำลองด้วยสคริปต์ แยกวิเคราะห์ HTML ในที่ที่ JSON ไม่พร้อมใช้งาน เชื่อมต่อพร็อกซีมือถือพร้อมการหมุนเวียน จัดการข้อผิดพลาดและลองคำขอซ้ำ รวมและทำความสะอาดข้อมูล แยกต่างหากคุณได้เข้าใจช่องทางการส่งออกอย่างเป็นทางการและกรอบกฎหมาย ซึ่งปกป้องทั้งข้อมูลและตัวคุณ
สิ่งสำคัญที่ควรนำไปใช้: รีวิวเป็นประเภทข้อมูลเฉพาะที่มีพลวัตของตัวเอง พวกมันปรากฏอย่างต่อเนื่อง ถูกแก้ไข ผ่านการกลั่นกรอง และมีข้อมูลส่วนบุคคล ดังนั้นตัวรวบรวมรีวิวไม่ใช่สคริปต์ครั้งเดียว แต่เป็นระบบเล็ก ๆ: การรวบรวม การจัดเก็บข้อมูลดิบ การปรับให้เข้ากับสคีมา การลบข้อมูลซ้ำ การตรวจสอบ แต่ละองค์ประกอบของระบบนี้คุณได้สร้างในรูปแบบพื้นฐานแล้ว
สิ่งที่ต้องทำต่อไป:
- ขยาย sources.csv เป็นรายการวัตถุจริงและทำการรวบรวมเต็มรูปแบบ
- ตั้งการรันแบบเพิ่มขึ้นประจำวันผ่านตัวจัดกำหนดการ
- เพิ่มส่วนวิเคราะห์อย่างน้อยหนึ่งอย่าง: พลวัตของคะแนนหรือการจัดหัวข้อรีวิวเชิงลบ
- สร้างบันทึกการเปลี่ยนแปลงของแพลตฟอร์มและอัปเดตอะแดปเตอร์เมื่อเกิดการเสีย
จะพัฒนาต่อไปที่ไหน ระดับถัดไปคือระบบอัตโนมัติของการตอบสนอง: การแจ้งเตือนทีมเกี่ยวกับรีวิวเชิงลบภายในหนึ่งชั่วโมงหลังการเผยแพร่ รายงานเปรียบเทียบคู่แข่งสัปดาห์ละครั้ง การรวมหัวข้อจากรีวิวเข้าสู่แผนผลิตภัณฑ์และสมมติฐานโฆษณา ข้อมูลคุณมีอยู่แล้ว เหลือเพียงเปลี่ยนเป็นโซลูชัน และที่นี่ส่วนที่น่าสนใจที่สุดของงานเริ่มต้นขึ้น