ฉันมีเว็บไซต์เพลงขนาดใหญ่พอสมควรพร้อมฐานข้อมูลศิลปินขนาดใหญ่ ฉันสังเกตเห็นเว็บไซต์เพลงอื่น ๆ คัดลอกข้อมูลเว็บไซต์ของเรา (ฉันป้อนชื่อศิลปินที่นี่และจากนั้น Google ทำการค้นหาพวกเขา)
ฉันจะป้องกันการขูดหน้าจอได้อย่างไร เป็นไปได้ไหม
ฉันมีเว็บไซต์เพลงขนาดใหญ่พอสมควรพร้อมฐานข้อมูลศิลปินขนาดใหญ่ ฉันสังเกตเห็นเว็บไซต์เพลงอื่น ๆ คัดลอกข้อมูลเว็บไซต์ของเรา (ฉันป้อนชื่อศิลปินที่นี่และจากนั้น Google ทำการค้นหาพวกเขา)
ฉันจะป้องกันการขูดหน้าจอได้อย่างไร เป็นไปได้ไหม
คำตอบ:
หมายเหตุ:เนื่องจากคำตอบที่สมบูรณ์ของรุ่นนี้เกินความยาวสูงสุดของ Stack Overflow คุณจะต้องมุ่งหน้าไปที่ GitHubเพื่ออ่านฉบับขยายพร้อมด้วยเคล็ดลับและรายละเอียดเพิ่มเติม
เพื่อขัดขวางการขูด (เรียกอีกอย่างว่าWebscraping , Screencraping , การขุดข้อมูลบนเว็บ , การเก็บเกี่ยวเว็บหรือการดึงข้อมูลบนเว็บ ) ช่วยให้ทราบว่าเครื่องขูดเหล่านี้ทำงานอย่างไรและโดยการขยายสิ่งที่ป้องกันไม่ให้ทำงานได้ดี
มีมีดโกนชนิดต่าง ๆ และแต่ละงานแตกต่างกัน:
สไปเดอร์เช่นบอตของ Googleหรือเครื่องถ่ายเอกสารเว็บไซต์เช่นHTtrackซึ่งติดตามลิงก์ซ้ำไปยังหน้าอื่น ๆ เพื่อรับข้อมูล บางครั้งสิ่งเหล่านี้ใช้สำหรับการคัดลอกเป้าหมายเพื่อรับข้อมูลที่เฉพาะเจาะจงบ่อยครั้งเมื่อใช้ร่วมกับตัวแยกวิเคราะห์ HTML เพื่อแยกข้อมูลที่ต้องการจากแต่ละหน้า
เชลล์สคริปต์: บางครั้งเครื่องมือ Unix ทั่วไปจะใช้สำหรับการคัดลอก: Wget หรือ Curl เพื่อดาวน์โหลดหน้าและ Grep (Regex) เพื่อแยกข้อมูล
ตัวแยกวิเคราะห์ HTML เช่นตัวยึด Jsoup, Scrapyและอื่น ๆ คล้ายกับเชลล์ที่ใช้สคริปต์ regex ซึ่งทำงานโดยการดึงข้อมูลจากหน้าเว็บตามรูปแบบใน HTML โดยทั่วไปจะไม่สนใจสิ่งอื่นใด
ตัวอย่างเช่น: หากเว็บไซต์ของคุณมีคุณลักษณะการค้นหามีดโกนเช่นนั้นอาจส่งคำขอสำหรับการค้นหาจากนั้นรับลิงก์ผลลัพธ์ทั้งหมดและชื่อเรื่องจากหน้าผลลัพธ์ HTML เพื่อรับเฉพาะลิงก์ผลลัพธ์การค้นหาและชื่อเรื่องของพวกเขาเท่านั้น . เหล่านี้เป็นส่วนใหญ่
Screencrapers ตามเช่น SeleniumหรือPhantomJSซึ่งเปิดเว็บไซต์ของคุณในเบราว์เซอร์จริงเรียกใช้ JavaScript, AJAX และอื่น ๆ จากนั้นรับข้อความที่ต้องการจากหน้าเว็บโดยปกติแล้วโดย:
รับ HTML จากเบราว์เซอร์หลังจากโหลดหน้าเว็บแล้วและเรียกใช้ JavaScript แล้วใช้ตัวแยกวิเคราะห์ HTML เพื่อแยกข้อมูลที่ต้องการ สิ่งเหล่านี้เป็นวิธีที่พบได้บ่อยที่สุดและวิธีการมากมายสำหรับการแยกวิเคราะห์ HTML / ตัวแยกส่วน HTML ก็ทำงานได้ที่นี่เช่นกัน
การจับภาพหน้าจอของหน้าที่แสดงผลแล้วใช้ OCR เพื่อแยกข้อความที่ต้องการออกจากภาพหน้าจอ สิ่งเหล่านี้หายากและมีเพียงผู้คัดลอกเฉพาะที่ต้องการข้อมูลของคุณเท่านั้นที่จะตั้งค่านี้
บริการ Webscraping เช่นScrapingHubหรือกิโมโน ในความเป็นจริงมีคนที่ทำงานเพื่อค้นหาวิธีการขูดเว็บไซต์ของคุณและดึงเนื้อหาให้ผู้อื่นใช้
การขูดมืออาชีพเป็นการยากที่จะยับยั้ง แต่ถ้าคุณทำให้ยากและเสียเวลาในการหาวิธีขูดเว็บไซต์ของคุณสิ่งเหล่านี้ (และผู้ที่จ่ายเงินให้ทำ) อาจไม่ได้รับความสนใจที่จะขูดเว็บไซต์ของคุณ
การฝังเว็บไซต์ของคุณในหน้าอื่น ๆ ของไซต์พร้อมเฟรมและฝังไซต์ของคุณในแอพมือถือ
แอปมือถือ (Android และ iOS) สามารถฝังเว็บไซต์และฉีด CSS และ JavaScript ที่กำหนดเองได้ดังนั้นการเปลี่ยนลักษณะที่ปรากฏของหน้าเว็บของคุณอย่างสมบูรณ์
สำเนามนุษย์ - วาง: ผู้คนจะคัดลอกและวางเนื้อหาของคุณเพื่อใช้ในที่อื่น
มีการทับซ้อนกันมากมายระหว่างมีดโกนชนิดต่าง ๆ เหล่านี้และเครื่องขูดจำนวนมากจะทำงานคล้ายกันแม้ว่าพวกเขาจะใช้เทคโนโลยีและวิธีการต่างกัน
เคล็ดลับเหล่านี้ส่วนใหญ่เป็นความคิดของฉันเองปัญหาต่าง ๆ ที่ฉันพบในขณะที่เขียนแครปเปอร์ตลอดจนบิตของข้อมูลและแนวคิดจากรอบ interwebs
คุณไม่สามารถป้องกันได้อย่างสมบูรณ์เนื่องจากสิ่งที่คุณทำเครื่องขูดที่กำหนดยังสามารถทราบวิธีการขูด อย่างไรก็ตามคุณสามารถหยุดการขูดจำนวนมากโดยทำบางสิ่ง:
ตรวจสอบบันทึกของคุณเป็นประจำและในกรณีที่มีการกระทำที่ผิดปกติซึ่งบ่งบอกถึงการเข้าถึงอัตโนมัติ (แครปเปอร์) เช่นการกระทำที่คล้ายกันมากมายจากที่อยู่ IP เดียวกันคุณสามารถบล็อกหรือ จำกัด การเข้าถึง
โดยเฉพาะอย่างยิ่งความคิดบางอย่าง:
อัตรา จำกัด :
อนุญาตเฉพาะผู้ใช้ (และแครปเปอร์) เพื่อดำเนินการในจำนวนที่ จำกัด ในเวลาที่กำหนด - ตัวอย่างเช่นอนุญาตการค้นหาเพียงไม่กี่ครั้งต่อวินาทีจากที่อยู่ IP หรือผู้ใช้ใด ๆ นี่จะทำให้เครื่องขูดช้าลงและทำให้เครื่องไม่ทำงาน คุณสามารถแสดง captcha ได้หากการกระทำนั้นเสร็จเร็วเกินไปหรือเร็วกว่าที่ผู้ใช้จริงต้องการ
ตรวจหากิจกรรมที่ผิดปกติ:
หากคุณเห็นกิจกรรมที่ผิดปกติเช่นคำขอที่คล้ายกันจำนวนมากจากที่อยู่ IP ที่เฉพาะเจาะจงใครบางคนที่ดูหน้าเว็บมากเกินไปหรือทำการค้นหาจำนวนที่ผิดปกติคุณสามารถป้องกันการเข้าถึงหรือแสดง captcha สำหรับคำขอที่ตามมา
ไม่เพียงแค่ตรวจสอบและ จำกัด อัตราด้วยที่อยู่ IP - ใช้ตัวบ่งชี้อื่น ๆ ด้วย:
หากคุณบล็อกหรือ จำกัด อัตราอย่าทำเพียงแค่ต่อที่อยู่ IP เท่านั้น คุณสามารถใช้ตัวบ่งชี้และวิธีการอื่นเพื่อระบุผู้ใช้หรือแครปเปอร์เฉพาะ ตัวบ่งชี้บางตัวที่สามารถช่วยคุณระบุผู้ใช้ / แครปเปอร์เฉพาะ ได้แก่ :
ผู้ใช้กรอกฟอร์มอย่างรวดเร็วเพียงใดและคลิกที่ปุ่มใด
คุณสามารถรวบรวมข้อมูลจำนวนมากด้วย JavaScript เช่นขนาดหน้าจอ / ความละเอียดเขตเวลาแบบอักษรที่ติดตั้ง ฯลฯ คุณสามารถใช้สิ่งนี้เพื่อระบุผู้ใช้
ส่วนหัว HTTP และคำสั่งของพวกเขาโดยเฉพาะ User-Agent
ตัวอย่างเช่นถ้าคุณได้รับการร้องขอจำนวนมากจากที่อยู่ IP เดียวทั้งหมดใช้ตัวแทนผู้ใช้เดียวกันขนาดหน้าจอ (พิจารณาจาก JavaScript) และผู้ใช้ (มีดโกนในกรณีนี้) คลิกที่ปุ่มในลักษณะเดียวกันและที่ ช่วงเวลาปกติน่าจะเป็นมีดโกนหน้าจอ และคุณสามารถปิดกั้นคำขอที่คล้ายกันชั่วคราว (เช่นปิดกั้นคำขอทั้งหมดด้วยตัวแทนผู้ใช้และขนาดหน้าจอที่มาจากที่อยู่ IP นั้น) และวิธีนี้คุณจะไม่สะดวกกับผู้ใช้จริงในที่อยู่ IP นั้นเช่น ในกรณีที่มีการเชื่อมต่ออินเทอร์เน็ตที่ใช้ร่วมกัน
นอกจากนี้คุณยังสามารถดำเนินการต่อไปได้เนื่องจากคุณสามารถระบุคำขอที่คล้ายกันแม้ว่าจะมาจากที่อยู่ IP ที่แตกต่างกันซึ่งบ่งบอกถึงการคัดลอกแบบกระจาย (มีดโกนที่ใช้ botnet หรือเครือข่ายของผู้รับมอบฉันทะ) หากคุณได้รับคำขอที่เหมือนกันจำนวนมาก แต่มาจากที่อยู่ IP ที่แตกต่างกันคุณสามารถบล็อกได้ อีกครั้งโปรดระวังอย่าบล็อกผู้ใช้จริงโดยไม่ตั้งใจ
สิ่งนี้จะมีผลกับโปรแกรมสกรีนเซฟเวอร์ที่ใช้งาน JavaScript เนื่องจากคุณสามารถรับข้อมูลจำนวนมากได้
คำถามที่เกี่ยวข้องกับ Security Stack Exchange:
วิธีการระบุผู้ใช้ด้วยที่อยู่ IP ภายนอกแบบเดียวกันโดยไม่ซ้ำกัน สำหรับรายละเอียดเพิ่มเติมและ
ทำไมผู้คนใช้ที่อยู่ IP เรย์แบนเมื่อที่อยู่ IP มักจะเปลี่ยน? สำหรับข้อมูลเกี่ยวกับข้อ จำกัด ของวิธีการเหล่านี้
แทนที่จะปิดกั้นการเข้าถึงชั่วคราวให้ใช้ Captcha:
วิธีที่ง่ายในการใช้การ จำกัด อัตราการคือการปิดกั้นการเข้าถึงชั่วคราวในระยะเวลาหนึ่งอย่างไรก็ตามการใช้ Captcha อาจทำได้ดีกว่าดูที่ส่วนของ Captchas เพิ่มเติม
ต้องมีการสร้างบัญชีเพื่อดูเนื้อหาของคุณหากเป็นไปได้สำหรับเว็บไซต์ของคุณ นี่เป็นเครื่องยับยั้งที่ดีสำหรับเครื่องขูด แต่ก็เป็นเครื่องยับยั้งที่ดีสำหรับผู้ใช้งานจริง
เพื่อหลีกเลี่ยงสคริปต์ที่สร้างบัญชีหลายบัญชีคุณควร:
ต้องมีที่อยู่อีเมลสำหรับการลงทะเบียนและยืนยันว่าที่อยู่อีเมลนั้นโดยการส่งลิงค์ที่ต้องเปิดเพื่อเปิดใช้งานบัญชี อนุญาตหนึ่งบัญชีต่อหนึ่งที่อยู่อีเมล
ต้องการ captcha เพื่อแก้ไขในระหว่างการลงทะเบียน / สร้างบัญชี
การสร้างบัญชีที่ต้องการดูเนื้อหาจะทำให้ผู้ใช้และเครื่องมือค้นหาไม่อยู่ หากคุณต้องการสร้างบัญชีเพื่อดูบทความผู้ใช้จะไปที่อื่น
บางครั้งเครื่องขูดจะถูกเรียกใช้จากบริการเว็บโฮสติ้งเช่น Amazon Web Services หรือ GAE หรือ VPSes จำกัด การเข้าถึงเว็บไซต์ของคุณ (หรือแสดง captcha) สำหรับคำขอที่มาจากที่อยู่ IP ที่ใช้โดยบริการโฮสต์บนคลาวด์ดังกล่าว
ในทำนองเดียวกันคุณสามารถ จำกัด การเข้าถึงจากที่อยู่ IP ที่ใช้โดยผู้ให้บริการพร็อกซีหรือ VPN เนื่องจากเครื่องขูดอาจใช้พร็อกซีเซิร์ฟเวอร์ดังกล่าวเพื่อหลีกเลี่ยงการตรวจพบคำขอจำนวนมาก
ระวังว่าด้วยการบล็อกการเข้าถึงจากพร็อกซีเซิร์ฟเวอร์และ VPN คุณจะส่งผลเสียต่อผู้ใช้งานจริง
หากคุณทำการบล็อก / จำกัด การเข้าถึงคุณควรตรวจสอบให้แน่ใจว่าคุณไม่ได้บอกมีดโกนว่าอะไรเป็นสาเหตุให้บล็อกทำให้พวกเขารู้ว่าจะแก้ไขมีดโกนได้อย่างไร ดังนั้นความคิดที่ดีคือการแสดงหน้าข้อผิดพลาดด้วยข้อความเช่น:
มีคำขอจากที่อยู่ IP ของคุณมากเกินไปโปรดลองอีกครั้งในภายหลัง
ข้อผิดพลาดส่วนหัวตัวแทนผู้ใช้ไม่ปรากฏ!
ให้แสดงข้อความแสดงข้อผิดพลาดที่เป็นมิตรที่ไม่ได้บอกมีดโกนว่าเกิดจากอะไร บางสิ่งเช่นนี้ดีกว่ามาก:
helpdesk@example.com
หากปัญหายังคงมีอยู่นอกจากนี้ยังเป็นมิตรกับผู้ใช้มากขึ้นสำหรับผู้ใช้จริงหากพวกเขาเคยเห็นหน้าข้อผิดพลาดดังกล่าว คุณควรพิจารณาแสดง captcha สำหรับคำขอที่ตามมาแทนฮาร์ดบล็อคในกรณีที่ผู้ใช้จริงเห็นข้อความแสดงข้อผิดพลาดเพื่อที่คุณจะไม่ได้ปิดกั้นและทำให้ผู้ใช้ที่ถูกกฎหมายติดต่อคุณ
แคปต์คัส ("การทดสอบอัตโนมัติเพื่อบอกคอมพิวเตอร์และมนุษย์ออกจากกันโดยสิ้นเชิง") มีประสิทธิภาพมากในการหยุดแครปเปอร์ น่าเสียดายที่พวกเขามีประสิทธิภาพมากในการทำให้ผู้ใช้เกิดการระคายเคือง
ดังนั้นจึงมีประโยชน์เมื่อคุณสงสัยว่ามีมีดโกนที่เป็นไปได้และต้องการหยุดการขูดโดยไม่ปิดกั้นการเข้าถึงในกรณีที่ไม่ใช่มีดโกน แต่เป็นผู้ใช้จริง คุณอาจต้องการพิจารณาแสดง captcha ก่อนอนุญาตให้เข้าถึงเนื้อหาหากคุณสงสัยว่ามีมีดโกน
สิ่งที่ควรระวังเมื่อใช้งาน Captchas:
อย่าม้วนตัวคุณเองใช้บางอย่างเช่นreCaptchaของ Google : มันง่ายกว่าการติดตั้ง captcha ด้วยตัวคุณเองมันเป็นมิตรกับผู้ใช้มากกว่าโซลูชันข้อความที่พร่ามัวและบิดเบี้ยวที่คุณอาจเกิดขึ้นกับตัวเอง (ผู้ใช้มักจะต้องทำเครื่องหมายในกล่อง ) และมันก็ยากกว่ามากสำหรับผู้ให้ความช่วยเหลือในการแก้ไขมากกว่าภาพธรรมดาที่แสดงจากไซต์ของคุณ
อย่ารวมโซลูชันของ captcha ในมาร์กอัป HTML: ฉันเคยเห็นเว็บไซต์หนึ่งที่มีโซลูชันสำหรับ captcha ในหน้าเว็บนั้นเอง (แม้ว่าจะค่อนข้างซ่อนเร้นอยู่) จึงทำให้มันไร้ประโยชน์เลย อย่าทำอะไรแบบนี้ ใช้บริการเช่น reCaptcha อีกครั้งและคุณจะไม่มีปัญหาเช่นนี้ (หากคุณใช้อย่างถูกต้อง)
แคปต์ชาสามารถแก้ไขได้ในปริมาณมาก: มีบริการแก้ปัญหาแคปต์ชาที่ซึ่งมนุษย์จ่ายจริงและแก้แคปชาในปริมาณมาก อีกครั้งการใช้ reCaptcha เป็นความคิดที่ดีที่นี่เนื่องจากมีการป้องกัน (เช่นเวลาค่อนข้างสั้นที่ผู้ใช้มีเพื่อแก้แคปต์ชา) บริการประเภทนี้ไม่น่าจะนำมาใช้เว้นแต่ว่าข้อมูลของคุณมีค่าจริง ๆ
คุณสามารถแสดงข้อความลงในเซิร์ฟเวอร์ด้านภาพและแสดงสิ่งที่จะแสดงซึ่งจะขัดขวางเครื่องคัดแยกข้อความแบบง่าย
อย่างไรก็ตามสิ่งนี้ไม่ดีสำหรับโปรแกรมอ่านหน้าจอเครื่องมือค้นหาประสิทธิภาพและอื่น ๆ อีกมาก นอกจากนี้ยังผิดกฎหมายในบางสถานที่ (เนื่องจากการเข้าถึงได้ง่ายเช่นพระราชบัญญัติคนอเมริกันที่มีความพิการ) และยังสามารถหลีกเลี่ยง OCR บางอย่างได้ง่ายดังนั้นอย่าทำเช่นนั้น
คุณสามารถทำสิ่งที่คล้ายกับสไปรต์ CSS แต่สิ่งนั้นทนทุกข์ทรมานจากปัญหาเดียวกัน
หากเป็นไปได้อย่าให้วิธีการสำหรับสคริปต์ / บ็อตเพื่อรับชุดข้อมูลทั้งหมดของคุณ ตัวอย่างเช่นคุณมีเว็บไซต์ข่าวที่มีบทความเป็นจำนวนมาก คุณสามารถทำให้บทความเหล่านั้นสามารถเข้าถึงได้โดยการค้นหาบทความเหล่านั้นผ่านการค้นหาในไซต์และหากคุณไม่มีรายการทั้งหมดบทความในเว็บไซต์และ URL ที่ใดก็ตามบทความเหล่านั้นจะสามารถเข้าถึงได้โดยใช้การค้นหาเท่านั้น ลักษณะเฉพาะ. ซึ่งหมายความว่าสคริปต์ที่ต้องการนำบทความทั้งหมดออกจากไซต์ของคุณจะต้องค้นหาวลีที่เป็นไปได้ทั้งหมดซึ่งอาจปรากฏในบทความของคุณเพื่อค้นหาทั้งหมดซึ่งจะใช้เวลานานไม่มีประสิทธิภาพอย่างน่ากลัวและหวังว่าจะทำให้ มีดโกนก็ยอมแพ้
สิ่งนี้จะไม่ได้ผลถ้า:
example.com/article.php?articleId=12345
ซึ่งมีลักษณะบางอย่างเช่น สิ่งนี้ (และสิ่งที่คล้ายกัน) ซึ่งจะช่วยให้เครื่องขูดสามารถย้ำไปทั่วarticleId
และขอบทความทั้งหมดในแบบนั้นตรวจสอบให้แน่ใจว่าคุณไม่ได้เปิดเผย API ใด ๆ โดยไม่ได้ตั้งใจ ตัวอย่างเช่นหากคุณใช้ AJAX หรือคำขอเครือข่ายจากภายใน Adobe Flash หรือ Java Applets (พระเจ้าห้าม!) ในการโหลดข้อมูลของคุณมันเป็นเรื่องเล็กน้อยที่จะดูคำขอเครือข่ายจากหน้าและหาว่าคำขอเหล่านั้นจะไปที่ใดและ จากนั้นทำวิศวกรรมย้อนกลับและใช้จุดปลายเหล่านั้นในโปรแกรมมีดโกน ตรวจสอบให้แน่ใจว่าคุณทำให้งงงวยปลายทางและทำให้พวกเขายากสำหรับคนอื่น ๆ ที่จะใช้ตามที่อธิบายไว้
เนื่องจากตัวแยกวิเคราะห์ HTML ทำงานโดยการแยกเนื้อหาออกจากหน้าเว็บตามรูปแบบที่ระบุตัวตนใน HTML เราจึงสามารถเปลี่ยนรูปแบบเหล่านั้นในรูปแบบอื่นเพื่อทำลายตัวแบ่งเหล่านี้หรือแม้แต่ใช้ร่วมกับพวกเขา เคล็ดลับเหล่านี้ส่วนใหญ่ยังนำไปใช้กับเครื่องขูดอื่น ๆ เช่นแมงมุมและเครื่องสกรีน
ผู้คัดลอกที่กระบวนการ HTML ทำโดยตรงโดยการแยกเนื้อหาจากส่วนที่ระบุและระบุตัวได้ของหน้า HTML ของคุณ ตัวอย่างเช่น: หากทุกหน้าในเว็บไซต์ของคุณมีdiv
รหัสarticle-content
ซึ่งมีข้อความของบทความอยู่นั้นเป็นเรื่องเล็กน้อยที่จะเขียนสคริปต์เพื่อเยี่ยมชมหน้าบทความทั้งหมดในเว็บไซต์ของคุณและแยกเนื้อหาเนื้อหาของarticle-content
div ในแต่ละหน้าบทความและvoilà scraper มีบทความทั้งหมดจากไซต์ของคุณในรูปแบบที่สามารถนำกลับมาใช้ที่อื่นได้
หากคุณเปลี่ยน HTML และโครงสร้างหน้าเว็บของคุณบ่อยครั้งเครื่องขูดดังกล่าวจะไม่ทำงานอีกต่อไป
คุณสามารถเปลี่ยนรหัสประจำตัวและคลาสขององค์ประกอบต่าง ๆ ใน HTML ของคุณได้โดยอัตโนมัติ ดังนั้นหากคุณdiv.article-content
กลายเป็นคนที่ชอบdiv.a4c36dda13eaf0
และเปลี่ยนแปลงทุกสัปดาห์มีดโกนจะทำงานได้ดีในตอนแรก แต่จะพังหลังจากผ่านไปหนึ่งสัปดาห์ ตรวจสอบให้แน่ใจว่าเปลี่ยนความยาวของรหัส / คลาสของคุณด้วยไม่เช่นนั้นมีดโกนจะใช้div.[any-14-characters]
เพื่อค้นหา div ที่ต้องการแทน ระวังหลุมที่คล้ายกันอื่น ๆ ด้วย ..
หากไม่มีวิธีการค้นหาเนื้อหาที่ต้องการจากมาร์กอัปมีดโกนจะทำจากวิธีที่โครงสร้าง HTML ดังนั้นหากหน้าบทความทั้งหมดของคุณมีความคล้ายคลึงกันในทุก ๆdiv
ด้านdiv
ที่อยู่หลัง a h1
คือเนื้อหาบทความแครปเปอร์จะได้รับเนื้อหาของบทความตามนั้น อีกครั้งเพื่อทำลายสิ่งนี้คุณสามารถเพิ่ม / ลบมาร์กอัปพิเศษใน HTML ของคุณเป็นระยะ ๆ และแบบสุ่มเช่น เพิ่มdiv
s หรือspan
s พิเศษ ด้วยการประมวลผล HTML ฝั่งเซิร์ฟเวอร์ที่ทันสมัยสิ่งนี้ไม่ควรยากเกินไป
สิ่งที่ต้องระวัง:
มันจะน่าเบื่อและยากที่จะใช้บำรุงรักษาและแก้ปัญหา
คุณจะขัดขวางการแคช โดยเฉพาะอย่างยิ่งถ้าคุณเปลี่ยนรหัสหรือคลาสขององค์ประกอบ HTML ของคุณสิ่งนี้จะต้องมีการเปลี่ยนแปลงที่สอดคล้องกันในไฟล์ CSS และ JavaScript ของคุณซึ่งหมายความว่าทุกครั้งที่คุณเปลี่ยนแปลงพวกเขาจะต้องดาวน์โหลดเบราว์เซอร์อีกครั้ง ซึ่งจะส่งผลให้เวลาในการโหลดหน้าเว็บนานขึ้นสำหรับผู้เยี่ยมชมซ้ำและเพิ่มการโหลดเซิร์ฟเวอร์ หากคุณเปลี่ยนเพียงสัปดาห์ละครั้งก็จะไม่เป็นปัญหาใหญ่
เครื่องขูดฉลาดยังคงสามารถรับเนื้อหาของคุณโดยอนุมานว่าเนื้อหาที่แท้จริงคืออะไร โดยการรู้ว่าบล็อกข้อความขนาดใหญ่บนหน้าเว็บน่าจะเป็นบทความจริง สิ่งนี้ทำให้ยังคงสามารถค้นหาและแยกข้อมูลที่ต้องการจากหน้า Boilerpipeทำสิ่งนี้อย่างแน่นอน
โดยพื้นฐานแล้วตรวจสอบให้แน่ใจว่าสคริปต์ไม่สามารถค้นหาเนื้อหาที่ต้องการจริงสำหรับทุกหน้าที่คล้ายกันได้
ดูเพิ่มเติมวิธีป้องกันการรวบรวมข้อมูลโดยขึ้นอยู่กับ XPath จากการรับเนื้อหาของหน้าเว็บสำหรับรายละเอียดเกี่ยวกับวิธีการนำสิ่งนี้ไปใช้ใน PHP
นี่คล้ายกับเคล็ดลับก่อนหน้านี้ หากคุณให้บริการ HTML ที่แตกต่างกันตามสถานที่ตั้ง / ประเทศของผู้ใช้ของคุณ (พิจารณาจากที่อยู่ IP) สิ่งนี้อาจทำให้เครื่องแครปเปอร์ซึ่งส่งมอบให้กับผู้ใช้ ตัวอย่างเช่นหากมีใครบางคนกำลังเขียนแอพมือถือที่ scrapes ข้อมูลจากเว็บไซต์ของคุณมันจะทำงานได้ดีในตอนแรก แต่จะพังเมื่อมันถูกส่งไปยังผู้ใช้จริงเพราะผู้ใช้เหล่านั้นอาจอยู่ในประเทศอื่นและทำให้ HTML แตกต่างกัน มีดโกนแบบฝังตัวไม่ได้ถูกออกแบบมาให้ใช้งาน
ตัวอย่าง: คุณมีคุณลักษณะการค้นหาบนเว็บไซต์ของคุณซึ่งตั้งอยู่ที่example.com/search?query=somesearchquery
ซึ่งจะส่งคืน HTML ต่อไปนี้:
<div class="search-result">
<h3 class="search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"search-result-link" href="/stories/story-link">Read more</a>
</div>
(And so on, lots more identically structured divs with search results)
เนื่องจากคุณอาจเดาได้ว่านี่เป็นเรื่องง่ายที่จะขูด: มีดโกนทั้งหมดที่ต้องทำคือกด URL การค้นหาด้วยการสืบค้นและดึงข้อมูลที่ต้องการจาก HTML ที่ส่งคืน นอกเหนือจากการเปลี่ยน HTML เป็นระยะ ๆ ตามที่อธิบายไว้ข้างต้นคุณสามารถปล่อยมาร์กอัพเก่าด้วยรหัสและคลาสเก่าในซ่อนด้วย CSS และเติมด้วยข้อมูลปลอมจึงทำให้มีดโกนเป็นพิษ นี่คือวิธีที่หน้าผลการค้นหาสามารถเปลี่ยนแปลงได้:
<div class="the-real-search-result">
<h3 class="the-real-search-result-title">Stack Overflow has become the world's most popular programming Q & A website</h3>
<p class="the-real-search-result-excerpt">The website Stack Overflow has now become the most popular programming Q & A website, with 10 million questions and many users, which...</p>
<a class"the-real-search-result-link" href="/stories/story-link">Read more</a>
</div>
<div class="search-result" style="display:none">
<h3 class="search-result-title">Visit Example.com now, for all the latest Stack Overflow related news !</h3>
<p class="search-result-excerpt">Example.com is so awesome, visit now !</p>
<a class"search-result-link" href="http://example.com/">Visit Now !</a>
</div>
(More real search results follow)
นี่จะหมายถึงว่าตัวคัดลอกที่เขียนเพื่อดึงข้อมูลจาก HTML ตามคลาสหรือรหัสจะยังคงทำงานได้ แต่พวกเขาจะได้รับข้อมูลปลอมหรือแม้กระทั่งโฆษณาข้อมูลที่ผู้ใช้จริงจะไม่เห็นเนื่องจากซ่อนด้วย CSS
เมื่อเพิ่มตัวอย่างก่อนหน้านี้คุณสามารถเพิ่มรายการ honeypot ที่มองไม่เห็นใน HTML เพื่อจับแครปเปอร์ ตัวอย่างที่สามารถเพิ่มลงในหน้าผลการค้นหาที่อธิบายไว้ก่อนหน้า:
<div class="search-result" style="display:none">
<h3 class="search-result-title">This search result is here to prevent scraping</h3>
<p class="search-result-excerpt">If you're a human and see this, please ignore it. If you're a scraper, please click the link below :-)
Note that clicking the link below will block access to this site for 24 hours.</p>
<a class"search-result-link" href="/scrapertrap/scrapertrap.php">I'm a scraper !</a>
</div>
(The actual, real, search results follow.)
มีดโกนที่เขียนขึ้นเพื่อให้ได้ผลลัพธ์การค้นหาทั้งหมดจะรับสิ่งนี้เช่นเดียวกับผลการค้นหาอื่น ๆ บนหน้าและเข้าชมลิงก์เพื่อค้นหาเนื้อหาที่ต้องการ มนุษย์ที่แท้จริงจะไม่เห็นมันตั้งแต่แรก (เนื่องจากมันถูกซ่อนไว้ด้วย CSS) และจะไม่เยี่ยมชมลิงก์ แมงมุมที่น่าพึงพอใจและเป็นที่ต้องการเช่นของ Google จะไม่ไปที่ลิงก์เพราะคุณไม่อนุญาต/scrapertrap/
ใน robots.txt ของคุณ
คุณสามารถscrapertrap.php
ทำสิ่งที่คุณต้องการเช่นบล็อกการเข้าถึงสำหรับที่อยู่ IP ที่เข้าเยี่ยมชมหรือบังคับให้ captcha สำหรับการร้องขอที่ตามมาทั้งหมดจาก IP ที่
อย่าลืมที่จะไม่อนุญาต honeypot ของคุณ ( /scrapertrap/
) ในไฟล์ robots.txt ของคุณเพื่อที่บอตของเครื่องมือค้นหาจะไม่ตกหล่น
คุณสามารถ / ควรรวมสิ่งนี้กับเคล็ดลับก่อนหน้าของการเปลี่ยน HTML ของคุณบ่อยๆ
เปลี่ยนบ่อยเช่นกันในขณะที่แครปเปอร์จะเรียนรู้ที่จะหลีกเลี่ยง เปลี่ยน URL และข้อความ honeypot ยังต้องการพิจารณาเปลี่ยน inline CSS ที่ใช้สำหรับซ่อนและใช้แอตทริบิวต์ ID และ CSS ภายนอกแทนเนื่องจาก scrapers จะเรียนรู้ที่จะหลีกเลี่ยงสิ่งใดก็ตามที่มีstyle
แอตทริบิวต์พร้อม CSS ที่ใช้เพื่อซ่อนเนื้อหา ลองใช้งานเฉพาะในบางครั้งเท่านั้นดังนั้นมีดโกนจะทำงานในตอนแรก แต่จะแตกหลังจากผ่านไปครู่หนึ่ง นอกจากนี้ยังใช้กับเคล็ดลับก่อนหน้า
คนที่เป็นอันตรายสามารถป้องกันการเข้าถึงสำหรับผู้ใช้จริงโดยแชร์ลิงก์ไปยัง honeypot ของคุณหรือแม้แต่การฝังลิงก์นั้นไว้ที่ใดที่หนึ่งในรูป (เช่นบนฟอรัม) เปลี่ยน URL บ่อยครั้งและทำให้แบนเป็นเวลาสั้น ๆ
หากคุณตรวจพบมีดโกนที่เห็นได้ชัดว่าคุณสามารถให้บริการข้อมูลปลอมและไร้ประโยชน์; นี่จะทำให้ข้อมูลที่มีดโกนได้รับจากเว็บไซต์ของคุณเสียหาย คุณควรทำให้เป็นไปไม่ได้ที่จะแยกแยะข้อมูลปลอมดังกล่าวออกจากข้อมูลจริงเพื่อให้เครื่องขูดไม่ทราบว่ากำลังถูกเมาด้วย
ตัวอย่างเช่นคุณมีเว็บไซต์ข่าว หากคุณตรวจพบมีดโกนแทนที่จะบล็อกการเข้าถึงให้บริการบทความปลอมที่สร้างแบบสุ่มและสิ่งนี้จะทำให้พิษข้อมูลที่มีดโกนได้รับ หากคุณทำให้ข้อมูลปลอมของคุณแยกไม่ออกจากของจริงคุณจะทำให้มันยากสำหรับแครปเปอร์ที่จะได้รับสิ่งที่พวกเขาต้องการคือข้อมูลจริงที่แท้จริง
บ่อยครั้งที่ scrapers ที่เขียนขึ้นอย่างขี้เกียจจะไม่ส่งส่วนหัว User Agent ตามที่ร้องขอในขณะที่เบราว์เซอร์ทั้งหมดรวมถึงสไปเดอร์ของเครื่องมือค้นหาจะ
หากคุณได้รับคำขอที่ไม่มีส่วนหัวของตัวแทนผู้ใช้คุณสามารถแสดงแคปต์ชาหรือเพียงแค่บล็อกหรือ จำกัด การเข้าถึง (หรือให้บริการข้อมูลปลอมตามที่อธิบายไว้ข้างต้นหรืออย่างอื่น .. )
มันไม่สำคัญที่จะหลอก แต่เป็นมาตรการต่อต้านแครปเปอร์ที่เขียนไม่ดี
ในบางกรณีแครปเปอร์จะใช้ตัวแทนผู้ใช้ซึ่งไม่มีเบราว์เซอร์จริงหรือเดอร์เครื่องมือค้นหาใช้เช่น:
หากคุณพบว่ามีการใช้สตริงตัวแทนผู้ใช้เฉพาะในเครื่องขูดบนไซต์ของคุณและไม่ได้ใช้โดยเบราว์เซอร์จริงหรือสไปเดอร์ที่ถูกกฎหมายคุณสามารถเพิ่มลงในบัญชีดำของคุณได้
เบราว์เซอร์จริงจะร้องขอและดาวน์โหลดเนื้อหาเกือบทั้งหมดเช่นรูปภาพและ CSS ตัวแยกวิเคราะห์และตัวขูด HTML จะไม่ทำเพราะพวกเขาสนใจเฉพาะหน้าจริงและเนื้อหา
คุณสามารถบันทึกคำขอไปยังเนื้อหาของคุณและหากคุณเห็นคำขอจำนวนมากสำหรับ HTML เท่านั้นนั่นอาจเป็นมีดโกนได้
ระวังว่าบอทของเครื่องมือค้นหาอุปกรณ์มือถือโบราณตัวอ่านหน้าจอและอุปกรณ์ที่กำหนดค่าผิดอาจไม่ร้องขอสินทรัพย์ด้วยเช่นกัน
คุณสามารถกำหนดให้เปิดใช้งานคุกกี้เพื่อที่จะดูเว็บไซต์ของคุณ วิธีนี้จะช่วยยับยั้งนักเขียนมือใหม่และมือใหม่อย่างไรก็ตามมันง่ายสำหรับมีดโกนในการส่งคุกกี้ หากคุณใช้และต้องการสิ่งเหล่านี้คุณสามารถติดตามการกระทำของผู้ใช้และ scraper กับพวกเขาและใช้การ จำกัด อัตราการบล็อกหรือการแสดง captchas ต่อผู้ใช้แทนที่จะเป็นพื้นฐานต่อ IP
ตัวอย่างเช่น: เมื่อผู้ใช้ทำการค้นหาให้ตั้งค่าคุกกี้การระบุที่ไม่ซ้ำกัน เมื่อมีการดูหน้าผลลัพธ์ให้ตรวจสอบคุกกี้นั้น หากผู้ใช้เปิดผลการค้นหาทั้งหมด (คุณสามารถบอกได้จากคุกกี้) นั่นอาจเป็นมีดโกน
การใช้คุกกี้อาจไม่ได้ผลเนื่องจาก scrapers สามารถส่งคุกกี้พร้อมคำขอของพวกเขาได้เช่นกันและทิ้งตามต้องการ คุณจะป้องกันการเข้าถึงสำหรับผู้ใช้จริงที่ปิดใช้งานคุกกี้หากเว็บไซต์ของคุณใช้งานได้เฉพาะกับคุกกี้
โปรดทราบว่าหากคุณใช้ JavaScript เพื่อตั้งค่าและเรียกค้นคุกกี้คุณจะปิดกั้นตัวขูดที่ไม่ได้เรียกใช้ JavaScript เนื่องจากไม่สามารถเรียกดูและส่งคุกกี้ตามคำขอของพวกเขาได้
คุณสามารถใช้ JavaScript + AJAX เพื่อโหลดเนื้อหาหลังจากโหลดหน้าเว็บได้แล้ว สิ่งนี้จะทำให้เนื้อหาไม่สามารถเข้าถึงตัวแยกวิเคราะห์ HTML ที่ไม่ได้เรียกใช้ JavaScript นี่เป็นตัวยับยั้งที่มีประสิทธิภาพสำหรับโปรแกรมเมอร์มือใหม่และมือใหม่ที่เขียนแครปเปอร์
ระวัง:
การใช้ JavaScript เพื่อโหลดเนื้อหาจริงจะทำให้ประสบการณ์การใช้งานและประสิทธิภาพการทำงานลดลง
เอ็นจิ้นการค้นหาอาจไม่เรียกใช้ JavaScript เช่นกันดังนั้นจึงป้องกันไม่ให้จัดทำดัชนีเนื้อหาของคุณ นี่อาจไม่เป็นปัญหาสำหรับหน้าผลการค้นหา แต่อาจมีประโยชน์สำหรับสิ่งอื่น ๆ เช่นหน้าบทความ
หากคุณใช้ Ajax และ JavaScript เพื่อโหลดข้อมูลของคุณให้ทำให้ข้อมูลที่ถ่ายโอนสับสน ตัวอย่างเช่นคุณสามารถเข้ารหัสข้อมูลของคุณบนเซิร์ฟเวอร์ (ด้วยสิ่งที่เรียบง่ายเหมือนกับ base64 หรือซับซ้อนกว่า) จากนั้นถอดรหัสและแสดงบนไคลเอนต์หลังจากดึงข้อมูลผ่าน Ajax นี่หมายความว่ามีคนที่ตรวจสอบปริมาณการใช้เครือข่ายจะไม่เห็นว่าหน้าเว็บของคุณทำงานและโหลดข้อมูลอย่างไรและจะยากขึ้นสำหรับใครบางคนที่จะขอข้อมูลโดยตรงจากปลายทางของคุณเนื่องจากพวกเขาจะต้องย้อนกลับ
หากคุณใช้ Ajax ในการโหลดข้อมูลคุณควรทำให้ยากต่อการใช้จุดสิ้นสุดโดยไม่ต้องโหลดหน้าเว็บก่อนเช่นโดยกำหนดให้มีคีย์เซสชันเป็นพารามิเตอร์ซึ่งคุณสามารถฝังใน JavaScript หรือ HTML ของคุณ
คุณยังสามารถฝังข้อมูลที่ยุ่งเหยิงของคุณโดยตรงในหน้า HTML เริ่มต้นและใช้ JavaScript เพื่อ deobfuscate และแสดงซึ่งจะหลีกเลี่ยงการร้องขอเครือข่ายเพิ่มเติม การทำเช่นนี้จะทำให้ยากขึ้นอย่างมากในการแยกข้อมูลโดยใช้ตัวแยกวิเคราะห์ HTML เท่านั้นซึ่งไม่ได้เรียกใช้ JavaScript เนื่องจากผู้เขียน scraper จะต้องย้อนวิศวกร JavaScript ของคุณ (ซึ่งคุณควร obfuscate ด้วย)
คุณอาจต้องการเปลี่ยนวิธีการทำให้งงงวยเป็นประจำเพื่อทำลายเครื่องขูดที่คิดออก
มีข้อเสียหลายประการในการทำสิ่งนี้แม้ว่า:
มันจะน่าเบื่อและยากที่จะใช้บำรุงรักษาและแก้ปัญหา
มันจะไม่ได้ผลกับแครปเปอร์และสกรีนแคปเปอร์ซึ่งเรียกใช้จาวาสคริปต์แล้วดึงข้อมูล (โปรแกรมแยกวิเคราะห์ HTML ทั่วไปส่วนใหญ่จะไม่เรียกใช้ JavaScript)
มันจะทำให้ไซต์ของคุณไม่ทำงานสำหรับผู้ใช้จริงหากพวกเขาปิดการใช้งาน JavaScript
ประสิทธิภาพและเวลาในการโหลดหน้าเว็บจะได้รับผลกระทบ
บอกให้คนอื่นอย่าขูดและบางคนก็เคารพมัน
หาทนายความ
ทำให้ข้อมูลของคุณพร้อมใช้งานระบุ API:
คุณสามารถทำให้ข้อมูลของคุณพร้อมใช้งานได้ง่ายและต้องมีการระบุแหล่งที่มาและลิงค์กลับมายังเว็บไซต์ของคุณ อาจคิดค่าใช้จ่าย $$$ สำหรับมัน
นอกจากนี้ยังมีบริการป้องกันการขูดเชิงพาณิชย์เช่นการป้องกันการขูดด้วย Cloudflare หรือDistill Networks (รายละเอียดเกี่ยวกับวิธีการทำงานที่นี่ ) ซึ่งทำสิ่งเหล่านี้และอื่น ๆ อีกมากมายสำหรับคุณ
ค้นหาความสมดุลระหว่างการใช้งานสำหรับผู้ใช้จริงและการพิสูจน์ด้วยมีดโกน: ทุกสิ่งที่คุณทำจะส่งผลกระทบต่อประสบการณ์ผู้ใช้ในทางลบไม่ทางใดก็ทางหนึ่ง
อย่าลืมไซต์มือถือและแอพของคุณ หากคุณมีแอพมือถือที่สามารถคัดกรองหน้าจอได้และสามารถตรวจสอบการรับส่งข้อมูลเครือข่ายเพื่อกำหนดปลายทาง REST ที่ใช้
เครื่องขูดสามารถขูดเครื่องขูดอื่น ๆ : หากมีเว็บไซต์หนึ่งที่มีเนื้อหาที่คัดลอกมาจากคุณเครื่องขูดอื่น ๆ สามารถขูดได้จากเว็บไซต์ของมีดโกนนั้น
บทความวิกิพีเดียในเว็บขูด รายละเอียดมากมายเกี่ยวกับเทคโนโลยีที่เกี่ยวข้องและประเภทของมีดโกนเว็บ
หยุด scripters จากกระแทกหลายร้อยเว็บไซต์ของคุณครั้งที่สอง ถาม - ตอบเกี่ยวกับปัญหาที่คล้ายกันมาก - บอตกำลังตรวจสอบเว็บไซต์และซื้อสิ่งต่าง ๆ ทันทีที่วางจำหน่าย ข้อมูลที่เกี่ยวข้องจำนวนมากโดยเฉพาะ บน Captchas และการ จำกัด อัตรา
A real browser will (almost always) request and download assets such as images and CSS
จริงสำหรับผู้อ่านที่เข้าถึงได้อย่างไร CAPTCHA เสียแล้วอย่างน้อยบริการระดับมืออาชีพอาจไม่ขัดขวางโดยมัน การใช้คุกกี้ต้องมีการแจ้งเตือน / ยินยอมในสหภาพยุโรป Find a balance between usability for real users and scraper-proofness
ปรับสมดุลเวลาการเขียนโปรแกรม / ความซับซ้อนกับผลประโยชน์ทางการเงิน
robots.txt
ผมจะเข้าใจว่าคุณได้ตั้งค่า
อย่างที่คนอื่น ๆ พูดถึงเครื่องขูดสามารถลอกเลียนแบบได้เกือบทุกด้านของกิจกรรมและอาจเป็นเรื่องยากมากที่จะระบุคำขอที่มาจากคนเลว
ฉันจะพิจารณา:
/jail.html
.robots.txt
(ดังนั้นสไปเดอร์ที่เคารพจะไม่เข้าชม)display: none
)/jail.html
ของผู้เข้าชมนี่อาจช่วยให้คุณระบุคำขอจากแครปเปอร์ที่ไม่สนใจคุณrobots.txt
อย่างชัดเจน
คุณอาจต้องการทำให้/jail.html
ทั้งเว็บไซต์ของคุณมีมาร์กอัปเหมือนกันทุกหน้า แต่มีข้อมูลปลอม ( /jail/album/63ajdka
, /jail/track/3aads8
และอื่น ๆ ) ด้วยวิธีนี้ตัวขูดที่ไม่ดีจะไม่ถูกแจ้งเตือนให้ "ใส่ผิดปกติ" จนกว่าคุณจะมีโอกาสปิดกั้นพวกเขาทั้งหมด
Sue 'em
อย่างจริงจัง: ถ้าคุณมีเงินให้คุยกับทนายความที่เก่งและดีที่รู้จักทางของพวกเขารอบ ๆ อินเตอร์เน็ต คุณสามารถทำอะไรที่นี่ได้จริงๆ คุณอาจจะมีทนายความที่เขียนคำสั่งหยุดพักชั่วคราวหรือสิ่งที่เทียบเท่าในประเทศของคุณ อย่างน้อยคุณก็สามารถสร้างความหวาดกลัวให้ไอ้พวกนั้นได้
บันทึกการแทรกค่าหุ่นจำลองของคุณ ใส่ค่าดัมมี่ที่ชัดเจน (แต่คลุมเครือ) ชี้ไปที่คุณ ฉันคิดว่านี่เป็นวิธีปฏิบัติทั่วไปกับ บริษัท สมุดโทรศัพท์และที่นี่ในเยอรมนีฉันคิดว่ามีหลายครั้งที่การลอกเลียนแบบถูกขโมยผ่านรายการปลอมที่พวกเขาคัดลอก 1: 1
มันจะเป็นความอัปยศถ้าสิ่งนี้จะนำคุณไปสู่การเลอะรหัส HTML ของคุณลาก SEO ลงความถูกต้องและสิ่งอื่น ๆ (แม้ว่าระบบ templating ที่ใช้โครงสร้าง HTML ที่แตกต่างกันเล็กน้อยในแต่ละคำขอสำหรับหน้าเหมือนกันอาจช่วยได้มากกับ scrapers ที่พึ่งพาโครงสร้าง HTML และชื่อคลาส / ID เสมอเพื่อให้ได้เนื้อหาออกมา)
กรณีเช่นนี้เป็นสิ่งที่กฎหมายลิขสิทธิ์ดี การริปออกงานซื่อสัตย์ของคนอื่นเพื่อทำเงินกับเป็นสิ่งที่คุณควรจะสามารถต่อสู้กับ
ไม่มีอะไรที่คุณสามารถทำได้เพื่อป้องกันสิ่งนี้อย่างสมบูรณ์ เครื่องขูดสามารถปลอมตัวแทนผู้ใช้ของพวกเขาใช้ที่อยู่ IP หลาย ๆ ฯลฯ และปรากฏเป็นผู้ใช้ปกติ สิ่งเดียวที่คุณทำได้คือทำให้ข้อความไม่พร้อมใช้งานในขณะที่โหลดหน้าเว็บ - สร้างด้วยภาพแฟลชหรือโหลดด้วย JavaScript อย่างไรก็ตามสองข้อแรกเป็นแนวคิดที่ไม่ดีและข้อสุดท้ายจะเป็นปัญหาการเข้าถึงข้อมูลหากไม่ได้เปิดใช้งาน JavaScript สำหรับผู้ใช้ปกติบางรายของคุณ
หากพวกเขากระแทกเว็บไซต์ของคุณและโจมตีหน้าเว็บทุกหน้าของคุณคุณสามารถ จำกัด อัตราบางอย่างได้
มีความหวังอยู่บ้าง เครื่องขูดใช้ข้อมูลของไซต์ของคุณในรูปแบบที่สอดคล้องกัน หากคุณสามารถสุ่มมันอย่างใดมันอาจทำลายมีดโกนของพวกเขา สิ่งต่าง ๆ เช่นการเปลี่ยน ID หรือชื่อคลาสขององค์ประกอบของหน้าเว็บในการโหลดแต่ละครั้ง ฯลฯ แต่นั่นเป็นงานที่ต้องทำมากมายและฉันไม่แน่ใจว่ามันคุ้มค่าหรือไม่ และถึงอย่างนั้นพวกเขาก็สามารถเดินไปรอบ ๆ ได้ด้วยความทุ่มเทที่เพียงพอ
ระบุ XML API เพื่อเข้าถึงข้อมูลของคุณ ในลักษณะที่ใช้งานง่าย หากผู้คนต้องการข้อมูลของคุณพวกเขาจะได้รับมันคุณก็อาจจะหมดทุกอย่าง
วิธีนี้คุณสามารถให้ชุดย่อยของฟังก์ชันการทำงานอย่างมีประสิทธิภาพเพื่อให้มั่นใจว่าอย่างน้อยที่สุดตัวขูดจะไม่ทำให้คำขอ HTTP และแบนด์วิดท์จำนวนมหาศาลถูกดึงออกมา
สิ่งที่คุณต้องทำคือโน้มน้าวผู้คนที่ต้องการให้ข้อมูลของคุณใช้ API ;)
ขออภัยมันค่อนข้างยากที่จะทำเช่นนี้ ...
ฉันขอแนะนำให้คุณอย่างสุภาพขอให้พวกเขาไม่ใช้เนื้อหาของคุณ (หากเนื้อหาของคุณมีลิขสิทธิ์)
หากเป็นและพวกเขาไม่ได้เอาลงคุณสามารถดำเนินการต่อไปและส่งจดหมายหยุดและหยุดยั้งพวกเขาหยุดและหยุดยั้งตัวอักษร
โดยทั่วไปสิ่งที่คุณทำเพื่อป้องกันการขูดอาจเป็นผลลบมากขึ้นเช่นการเข้าถึงบอท / สไปเดอร์ ฯลฯ
เอาล่ะอย่างที่ทุกโพสต์บอกว่าถ้าคุณต้องการทำให้มันเป็นมิตรกับระบบค้นหาบอทก็สามารถขูดได้อย่างแน่นอน
แต่คุณยังสามารถทำบางสิ่งบางอย่างและมันอาจจะเป็นอารมณ์สำหรับบอทขูด 60-70%
ทำสคริปต์ตัวตรวจสอบเหมือนด้านล่าง
หากที่อยู่ IP ใดที่หนึ่งกำลังเข้าชมอย่างรวดเร็วหลังจากนั้นไม่กี่ครั้ง (5-10) ให้ใส่ที่อยู่ IP + ข้อมูลเบราว์เซอร์ในไฟล์หรือฐานข้อมูล
(นี่จะเป็นกระบวนการพื้นหลังและรันตลอดเวลาหรือกำหนดเวลาหลังจากนั้นไม่กี่นาที) สร้างสคริปต์อื่นที่จะทำการตรวจสอบที่อยู่ IP ที่น่าสงสัยเหล่านั้นต่อไป
กรณีที่ 1. หากตัวแทนผู้ใช้เป็นของเครื่องมือค้นหาที่รู้จักเช่น Google, Bing , Yahoo (คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับตัวแทนผู้ใช้โดย googling) จากนั้นคุณต้องดูhttp://www.iplists.com/ รายการนี้และพยายามจับคู่รูปแบบ และหากดูเหมือนว่าตัวแทนผู้ใช้ที่ปลอมแปลงแล้วขอให้กรอกCAPTCHAในการเยี่ยมชมครั้งต่อไป (คุณต้องค้นคว้าเพิ่มเติมอีกเล็กน้อยเกี่ยวกับที่อยู่ IP ของบอทฉันรู้ว่าสิ่งนี้สามารถทำได้และลองใช้ whois ของที่อยู่ IP ซึ่งจะมีประโยชน์)
กรณีที่ 2 ไม่มีตัวแทนผู้ใช้ของบอทการค้นหา: เพียงแค่ขอให้กรอก CAPTCHA ในครั้งต่อไป
ตอบช้า - และคำตอบนี้อาจไม่ใช่คำตอบที่คุณต้องการ ...
ตัวฉันเองเขียนแครปเปอร์การทำเหมืองข้อมูลเฉพาะจำนวนมาก (หลายสิบ) (เพียงเพราะฉันชอบปรัชญา "ข้อมูลเปิด")
ต่อไปนี้เป็นคำแนะนำมากมายในคำตอบอื่น ๆ - ตอนนี้ฉันจะเล่นบทบาทผู้สนับสนุนของปีศาจและจะขยายและ / หรือแก้ไขประสิทธิภาพของพวกเขา
ครั้งแรก:
การพยายามใช้สิ่งกีดขวางทางเทคนิคบางอย่างนั้นไม่คุ้มกับปัญหาที่เกิดขึ้น:
HMTL ธรรมดา - วิธีที่ง่ายที่สุดคือการแยกวิเคราะห์หน้า HTML ธรรมดาด้วยโครงสร้างที่กำหนดไว้อย่างดีและคลาส css เช่นมันก็เพียงพอที่จะตรวจสอบองค์ประกอบด้วย Firebug และใช้ Xpaths ที่ถูกต้องและ / หรือเส้นทาง CSS ในมีดโกนของฉัน
คุณสามารถสร้างโครงสร้าง HTML แบบไดนามิกและคุณสามารถสร้าง CSS class-names แบบไดนามิก (และ CSS เองด้วย) (เช่นโดยใช้ชื่อคลาสแบบสุ่มบางส่วน) - แต่
คุณไม่สามารถเปลี่ยนโครงสร้างสำหรับการตอบกลับทุกครั้งเนื่องจากผู้ใช้ปกติของคุณจะเกลียดคุณ นอกจากนี้จะทำให้เกิดปัญหามากขึ้นสำหรับคุณ (การบำรุงรักษา) ไม่ใช่สำหรับมีดโกน เส้นทาง XPath หรือ CSS สามารถกำหนดได้โดยสคริปต์การขูดโดยอัตโนมัติจากเนื้อหาที่รู้จัก
Ajax - ยากขึ้นเล็กน้อยในการเริ่มต้น แต่หลายครั้งความเร็วในการขูด :) - ทำไม
เมื่อวิเคราะห์คำขอและคำตอบฉันเพิ่งตั้งค่าพร็อกซีเซิร์ฟเวอร์ของฉันเอง (เขียนเป็นภาษา Perl) และ firefox ของฉันกำลังใช้งานอยู่ แน่นอนเพราะเป็นพร็อกซีของฉันเอง - มันถูกซ่อนไว้อย่างสมบูรณ์ - เซิร์ฟเวอร์เป้าหมายมองว่าเป็นเบราว์เซอร์ปกติ (ดังนั้นไม่มี X-Forwarded-for และส่วนหัวดังกล่าว) จากบันทึกของพร็อกซีส่วนใหญ่จะเป็นไปได้ที่จะกำหนด "ตรรกะ" ของคำขอ ajax เช่นฉันสามารถข้ามการขูด html เกือบทั้งหมดและใช้การตอบสนอง ajax ที่มีโครงสร้างอย่างดี (ส่วนใหญ่อยู่ในรูปแบบ JSON)
ดังนั้นอาแจ็กซ์ไม่ได้ช่วยอะไรมาก ...
บางหน้ามีความซับซ้อนมากขึ้นซึ่งใช้มาก ฟังก์ชั่นจาวาสคริปต์บรรจุ
นี่เป็นไปได้ที่จะใช้วิธีการพื้นฐานสองวิธี:
การขูดนั้นช้า (การขูดจะทำเหมือนในเบราว์เซอร์ทั่วไป) แต่ก็เป็นเช่นนั้น
การกรองตามUser-Agentไม่ได้ช่วยอะไรเลย นักขุดข้อมูลที่จริงจังจะตั้งให้มันถูกต้องในมีดโกนของเขา
ต้องการเข้าสู่ระบบ - ไม่ช่วย วิธีที่ง่ายที่สุดในการเอาชนะ (โดยไม่มีการวิเคราะห์และ / หรือการเขียนสคริปต์การเข้าสู่ระบบโพรโทคอล) เป็นเพียงการเข้าสู่เว็บไซต์ในฐานะผู้ใช้ปกติโดยใช้ Mozilla และหลังจากเรียกใช้เครื่องขูดตาม Mozrepl ...
โปรดจำไว้ว่าการเข้าสู่ระบบจำเป็นต้องใช้เพื่อช่วยบอทที่ไม่ระบุชื่อ แต่ไม่ได้ช่วยคนที่ต้องการขูดข้อมูลของคุณ เขาเพิ่งลงทะเบียนตัวเองในเว็บไซต์ของคุณในฐานะผู้ใช้ปกติ
การใช้เฟรมไม่ได้มีประสิทธิภาพมากเช่นกัน สิ่งนี้ถูกใช้โดยบริการภาพยนตร์สดมากมายและไม่ยากที่จะเอาชนะ เฟรมเป็นอีกหนึ่งหน้า HTML / Javascript สิ่งที่จำเป็นในการวิเคราะห์ ... หากข้อมูลมีค่าปัญหา - data-miner จะทำการวิเคราะห์ที่จำเป็น
การ จำกัด IPไม่ได้มีประสิทธิภาพเลย - ที่นี่มีพร็อกซีเซิร์ฟเวอร์สาธารณะมากเกินไปและที่นี่คือ TOR ... :) มันไม่ทำให้การคัดลอกข้อมูลช้าลง (สำหรับคนที่ต้องการข้อมูลของคุณจริงๆ )
ยากมากที่จะขูดข้อมูลที่ซ่อนอยู่ในภาพ (เช่นการแปลงข้อมูลให้เป็นอิมเมจฝั่งเซิร์ฟเวอร์) การใช้ "tesseract" (OCR) ช่วยได้หลายครั้ง แต่โดยสุจริต - ข้อมูลจะต้องคุ้มค่ากับปัญหาของมีดโกน (ซึ่งหลายครั้งไม่คุ้มค่า)
ในอีกด้านหนึ่งผู้ใช้ของคุณจะเกลียดคุณในเรื่องนี้ ตัวเอง (แม้ว่าจะไม่ได้คัดลอก) เว็บไซต์ที่เกลียดชังซึ่งไม่อนุญาตให้คัดลอกเนื้อหาของหน้าลงในคลิปบอร์ด (เพราะข้อมูลอยู่ในภาพหรือ (คนโง่) พยายามที่จะผูกพันกับคลิกขวาเหตุการณ์ Javascript ที่กำหนดเอง: )
ที่ยากที่สุดเป็นเว็บไซต์ที่ใช้จาวาหรือแฟลชและแอปเพล็ใช้รักษาความปลอดภัย httpsขอตัวเองภายใน แต่คิดว่าสองครั้ง - ผู้ใช้ iPhone ของคุณจะมีความสุขแค่ไหน ... ;) ดังนั้นในปัจจุบันมีไซต์น้อยมากที่ใช้พวกเขา ตัวเองบล็อกเนื้อหาแฟลชทั้งหมดในเบราว์เซอร์ของฉัน (ในช่วงการเรียกดูปกติ) - และไม่เคยใช้เว็บไซต์ที่ขึ้นอยู่กับ Flash
เหตุการณ์สำคัญของคุณอาจเป็น ... ดังนั้นคุณสามารถลองใช้วิธีนี้ - แค่จำไว้ - คุณอาจจะหลวมผู้ใช้บางส่วน โปรดจำไว้ว่าไฟล์ SWF บางไฟล์สามารถถอดรหัสได้ ;)
แคปต์ชา (คนดี - เหมือน reCaptcha) ช่วยได้มาก - แต่ผู้ใช้ของคุณจะเกลียดคุณ ... - แค่คิดว่าผู้ใช้ของคุณจะรักคุณได้อย่างไรเมื่อพวกเขาต้องการแก้แคปชาในบางหน้าที่แสดงข้อมูลเกี่ยวกับศิลปินเพลง
อาจไม่จำเป็นต้องดำเนินการต่อ - คุณเข้าสู่รูปภาพแล้ว
ตอนนี้สิ่งที่คุณควรทำ:
เตือนความจำ: แทบจะเป็นไปไม่ได้เลยที่จะซ่อนข้อมูลของคุณหากคุณอยู่ในอีกด้านหนึ่งต้องการเผยแพร่ข้อมูลเหล่านั้น (ด้วยวิธีง่าย ๆ ) แก่ผู้ใช้ทั่วไปของคุณ
ดังนั้น,
คิดให้รอบคอบก่อนที่คุณจะพยายามใช้สิ่งกีดขวางทางเทคนิค
แทนที่จะพยายามบล็อกตัวขุดข้อมูลเพียงเพิ่มความพยายามมากขึ้นในการใช้งานเว็บไซต์ของคุณ ผู้ใช้ของคุณจะรักคุณ เวลา (& พลังงาน) ที่ลงทุนในกำแพงด้านเทคนิคมักไม่คุ้มค่า - ควรใช้เวลาในการสร้างเว็บไซต์ที่ดียิ่งขึ้น ...
นอกจากนี้ขโมยข้อมูลก็ไม่เหมือนขโมยปกติ
หากคุณซื้อสัญญาณเตือนบ้านราคาไม่แพงและเพิ่มคำเตือน "บ้านนี้เชื่อมต่อกับตำรวจ" - ขโมยจำนวนมากจะไม่ได้พยายามบุกเข้าไป เพราะเขาย้ายผิดหนึ่งครั้ง - และเขาจะเข้าคุก ...
ดังนั้นคุณลงทุนเพียงไม่กี่ bucks แต่ขโมยลงทุนและเสี่ยงมาก
แต่ขโมยข้อมูลไม่ได้มีความเสี่ยงดังกล่าว ตรงกันข้ามถ้าคุณทำผิดพลาดไปหนึ่งครั้ง (เช่นถ้าคุณแนะนำ BUG บางส่วนอันเป็นผลมาจากอุปสรรคทางเทคนิค) คุณจะหลวมผู้ใช้ หากบอทที่ขูดไม่ทำงานเป็นครั้งแรกไม่มีอะไรเกิดขึ้น - data-miner จะลองใช้วิธีอื่นและ / หรือจะดีบักสคริปต์
ในกรณีนี้คุณต้องลงทุนมากขึ้นและมีดโกนก็ลงทุนน้อยลง
แค่คิดว่าคุณต้องการลงทุนเวลาและพลังงานของคุณ ...
Ps: ภาษาอังกฤษไม่ใช่ภาษาของฉัน - ดังนั้นให้อภัยภาษาอังกฤษที่เสียของฉัน ...
จากมุมมองทางเทคโนโลยี: เพียงแค่สร้างแบบจำลองสิ่งที่ Google ทำเมื่อคุณค้นหาด้วยข้อความค้นหาจำนวนมากในคราวเดียว ที่ควรหยุดชะงักไปเยอะเลย
จากมุมมองทางกฎหมาย: ดูเหมือนว่าข้อมูลที่คุณเผยแพร่ไม่ใช่กรรมสิทธิ์ หมายความว่าคุณกำลังเผยแพร่ชื่อและสถิติและข้อมูลอื่น ๆ ที่ไม่สามารถมีลิขสิทธิ์ได้
หากเป็นเช่นนี้ตัวขูดไม่ได้ละเมิดลิขสิทธิ์โดยการแจกจ่ายข้อมูลของคุณเกี่ยวกับชื่อศิลปิน ฯลฯ อย่างไรก็ตามพวกเขาอาจละเมิดลิขสิทธิ์เมื่อพวกเขาโหลดเว็บไซต์ของคุณลงในหน่วยความจำเนื่องจากไซต์ของคุณมีองค์ประกอบที่มีลิขสิทธิ์ (เช่นเลย์เอาต์ ฯลฯ )
ฉันแนะนำให้อ่านเกี่ยวกับ Facebook v. Power.com และดูข้อโต้แย้งที่ Facebook ใช้เพื่อหยุดการคัดลอกหน้าจอ มีวิธีการทางกฎหมายมากมายที่คุณสามารถดำเนินการเกี่ยวกับการพยายามหยุดใครบางคนจากการขูดเว็บไซต์ของคุณ พวกเขาสามารถเข้าถึงและจินตนาการ บางครั้งศาลก็ซื้อข้อโต้แย้ง บางครั้งพวกเขาทำไม่ได้
แต่สมมติว่าคุณกำลังเผยแพร่ข้อมูลโดเมนสาธารณะที่ไม่ได้มีลิขสิทธิ์เช่นชื่อและสถิติพื้นฐาน ... คุณควรปล่อยให้มันอยู่ในชื่อของการพูดฟรีและเปิดข้อมูล นั่นคือสิ่งที่เกี่ยวกับเว็บ
สิ่งที่อาจทำงานกับแครปเปอร์มือใหม่:
สิ่งที่จะช่วยโดยทั่วไป:
สิ่งที่จะช่วย แต่จะทำให้ผู้ใช้ของคุณเกลียดคุณ:
ฉันทำการขูดเว็บจำนวนมากและได้สรุปเทคนิคบางอย่างเพื่อหยุดการขูดเว็บ ในบล็อกของฉันจากสิ่งที่ฉันพบว่าน่ารำคาญ
เป็นการแลกเปลี่ยนระหว่างผู้ใช้กับเครื่องขูดของคุณ หากคุณ จำกัด IP ใช้ CAPTCHA ต้องการการเข้าสู่ระบบและอื่น ๆ คุณทำให้เรื่องยากสำหรับแครปเปอร์ แต่สิ่งนี้อาจทำให้ผู้ใช้ของคุณหายไป
ตัวเลือกที่ดีที่สุดของคุณนั้นเป็นคู่มือที่ค่อนข้างน่าเสียดาย: มองหารูปแบบการรับส่งข้อมูลที่คุณเชื่อว่าบ่งบอกถึงการคัดลอกและห้ามที่อยู่ IP ของพวกเขา
เมื่อคุณพูดถึงเว็บไซต์สาธารณะการทำให้เครื่องมือค้นหาไซต์เป็นมิตรนั้นจะทำให้ไซต์นั้นเป็นมิตรกับการขูด หากเครื่องมือค้นหาสามารถรวบรวมข้อมูลและขูดไซต์ของคุณได้มีดโกนที่เป็นอันตรายก็สามารถทำได้เช่นกัน มันเป็นเส้นดีที่จะเดิน
แน่นอนมันเป็นไปได้ เพื่อความสำเร็จ 100% ให้ออฟไลน์ไซต์ของคุณ
ในความเป็นจริงคุณสามารถทำบางสิ่งที่ทำให้ขูดเล็ก ๆ น้อย ๆ ที่ยากขึ้น Google ทำการตรวจสอบเบราว์เซอร์เพื่อให้แน่ใจว่าคุณไม่ใช่หุ่นยนต์ที่คัดลอกผลการค้นหา (แม้ว่านี่จะเป็นสิ่งอื่นที่เหมือนกันทุกอย่าง)
คุณสามารถทำสิ่งต่าง ๆ เช่นต้องใช้เวลาหลายวินาทีระหว่างการเชื่อมต่อครั้งแรกกับเว็บไซต์ของคุณและการคลิกที่ตามมา ฉันไม่แน่ใจว่าเวลาที่เหมาะจะเป็นอย่างไรหรือทำอย่างไร แต่เป็นความคิดอื่น
ฉันแน่ใจว่ามีคนอื่นอีกหลายคนที่มีประสบการณ์มากกว่านี้ แต่ฉันหวังว่าความคิดเหล่านั้นมีประโยชน์อย่างน้อย
มีบางสิ่งที่คุณสามารถทำได้เพื่อพยายามป้องกันการคัดลอกหน้าจอ บางอย่างไม่ได้ผลมากในขณะที่คนอื่น (CAPTCHA) มี แต่ขัดขวางการใช้งาน คุณต้องจำไว้เช่นกันว่าอาจเป็นอุปสรรคต่อไซต์ที่ถูกกฎหมายเช่นดัชนีเครื่องมือค้นหา
อย่างไรก็ตามฉันคิดว่าถ้าคุณไม่ต้องการคัดลอกมันหมายความว่าคุณไม่ต้องการให้เสิร์ชเอ็นจิ้นจัดทำดัชนีเช่นกัน
นี่คือบางสิ่งที่คุณสามารถลองได้:
หากฉันต้องทำสิ่งนี้ฉันอาจใช้ทั้งสามอย่างรวมกันเพราะพวกเขาลดความไม่สะดวกให้กับผู้ใช้ที่ถูกกฎหมาย อย่างไรก็ตามคุณต้องยอมรับว่าคุณจะไม่สามารถปิดกั้นทุกคนด้วยวิธีนี้และเมื่อมีคนรู้วิธีที่จะหลีกเลี่ยงมันพวกเขาจะสามารถขูดมันได้ตลอดไป จากนั้นคุณสามารถลองปิดกั้นที่อยู่ IP ของพวกเขาในขณะที่คุณค้นพบพวกเขาฉันเดา
มันไม่ใช่คำตอบที่คุณอาจต้องการ แต่ทำไมซ่อนสิ่งที่คุณพยายามเปิดเผยต่อสาธารณะ
วิธีที่หนึ่ง (ไซต์ขนาดเล็กเท่านั้น): ให้
บริการข้อมูลที่เข้ารหัส / เข้ารหัส
ฉัน scape เว็บโดยใช้ python (urllib, คำขอ, beautifulSoup ฯลฯ ... ) และพบเว็บไซต์จำนวนมากที่ให้บริการข้อมูลที่เข้ารหัส / เข้ารหัสที่ไม่สามารถถอดรหัสได้ในภาษาการเขียนโปรแกรมใด ๆ เพียงเพราะวิธีการเข้ารหัสไม่มีอยู่
ฉันประสบความสำเร็จในเว็บไซต์ PHP โดยการเข้ารหัสและลดการแสดงผล (คำเตือน: นี่ไม่ใช่ความคิดที่ดีสำหรับเว็บไซต์ขนาดใหญ่) การตอบสนองเป็นเนื้อหาที่สับสนอยู่เสมอ
ตัวอย่างของการย่อขนาดเอาต์พุตใน PHP ( จะย่อเอาท์พุตphp page html ได้อย่างไร ):
<?php
function sanitize_output($buffer) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array('>', '<', '\\1');
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
ob_start("sanitize_output");
?>
วิธีที่สอง:
หากคุณไม่สามารถหยุดพวกเขาขันพวกเขาให้บริการข้อมูลปลอม / ไร้ประโยชน์เป็นการตอบสนอง
วิธีที่สาม:
บล็อกตัวแทนผู้ใช้การคัดลอกทั่วไปคุณจะเห็นสิ่งนี้ในเว็บไซต์หลัก / เว็บไซต์ขนาดใหญ่เนื่องจากไม่สามารถขูดด้วย "python3.4" ในฐานะตัวแทนผู้ใช้ของคุณ
วิธีที่สี่:
ตรวจสอบให้แน่ใจว่าส่วนหัวของผู้ใช้ทั้งหมดถูกต้องบางครั้งฉันมีส่วนหัวให้มากที่สุดเท่าที่จะเป็นไปได้เพื่อให้มีดโกนของฉันดูเหมือนเป็นผู้ใช้จริงบางคนก็ไม่ได้จริง
นี่คือรายการของส่วนหัวที่ฉันมักจะให้
headers = {
"Requested-URI": "/example",
"Request-Method": "GET",
"Remote-IP-Address": "656.787.909.121",
"Remote-IP-Port": "69696",
"Protocol-version": "HTTP/1.1",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "en-FU,en;q=0.8",
"Cache-Control": "max-age=0",
"Connection": "keep-alive",
"Dnt": "1",
"Host": "http://example.com",
"Referer": "http://example.com",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"
}
แทนที่จะบอทขึ้นบัญชีดำคุณอาจจะอนุญาตพวกมันในรายการที่ปลอดภัย หากคุณไม่ต้องการที่จะฆ่าผลการค้นหาสำหรับเอ็นจินไม่กี่อันดับแรกคุณสามารถทำรายการที่อนุญาตพิเศษให้กับสตริงตัวแทนผู้ใช้ซึ่งได้รับการเผยแพร่อย่างดี บอตทางจริยธรรมที่น้อยลงมักจะปลอมแปลงสตริงตัวแทนผู้ใช้ของเว็บเบราว์เซอร์ยอดนิยม เสิร์ชเอนจิ้นอันดับสองสามอันดับควรสูงกว่า 95% ของปริมาณการเข้าชม
การระบุบอทนั้นควรตรงไปตรงมาพอสมควรโดยใช้เทคนิคที่ผู้โพสต์คนอื่น ๆ แนะนำไว้
วิธีที่รวดเร็วในการนี้ก็คือการตั้งค่ากับดักบูบี /
สร้างหน้าเว็บที่หากเปิดขึ้นมาเป็นระยะเวลาหนึ่งหรือเปิดตลอดเวลาจะรวบรวมข้อมูลบางอย่างเช่น IP และอะไรก็ตาม (คุณสามารถพิจารณาความผิดปกติหรือรูปแบบได้ แต่หน้านี้ไม่ควรเปิดเลย)
ทำลิงค์ไปยังสิ่งนี้ในหน้าของคุณที่ถูกซ่อนไว้ด้วย CSS display: none; หรือซ้าย: -9999px; positon: absolute; พยายามวางไว้ในที่ที่ไม่น่าจะถูกเพิกเฉยเช่นเนื้อหาของคุณอยู่ด้านล่างและไม่ใช่ส่วนท้ายของคุณเพราะบางครั้งบอทสามารถเลือกที่จะลืมบางส่วนของหน้า
ในไฟล์ robots.txt ของคุณตั้งกฎการไม่อนุญาตทั้งกลุ่มไว้ที่หน้าเว็บที่คุณไม่ต้องการบอตที่เป็นมิตร (LOL เหมือนพวกเขามีใบหน้าที่มีความสุข!) เพื่อรวบรวมข้อมูลและตั้งหน้านี้เป็นหนึ่งในนั้น
ทีนี้ถ้าบอทที่เป็นมิตรเข้ามามันควรจะข้ามหน้านั้นไป ใช่ แต่ก็ยังไม่ดีพอ ทำให้หน้าเหล่านี้เพิ่มขึ้นอีกสองสามหน้าหรือเปลี่ยนเส้นทางหน้าใหม่เพื่อยอมรับชื่อ differnt จากนั้นวางกฎการไม่อนุญาตเพิ่มเติมให้กับหน้า Trap เหล่านี้ในไฟล์ robots.txt ของคุณพร้อมกับหน้าที่คุณต้องการข้าม
รวบรวม IP ของบ็อตเหล่านี้หรือใครก็ตามที่เข้ามาในหน้าเหล่านี้ห้ามแบน แต่ทำหน้าที่ในการแสดงข้อความที่ไม่มีข้อความในเนื้อหาของคุณเช่นตัวเลขสุ่มประกาศลิขสิทธิ์สตริงข้อความเฉพาะแสดงภาพที่น่ากลัว เนื้อหาที่ดี คุณสามารถตั้งค่าลิงค์ที่ชี้ไปยังหน้าซึ่งจะใช้เวลาตลอดไปในการโหลดเช่น ใน php คุณสามารถใช้ฟังก์ชั่น sleep () วิธีนี้จะต่อสู้กับซอฟต์แวร์รวบรวมข้อมูลหากมีการตรวจจับบางอย่างเพื่อข้ามหน้าเว็บซึ่งใช้เวลาในการโหลดนานเกินไปเนื่องจากบอตที่เขียนอย่างดีบางตัวถูกตั้งค่าให้ประมวลผลจำนวนลิงก์ X ในแต่ละครั้ง
หากคุณได้กำหนดสตริงข้อความ / ประโยคที่เฉพาะเจาะจงว่าทำไมไม่ไปที่เสิร์ชเอ็นจิ้นที่คุณชื่นชอบและค้นหามันอาจจะแสดงให้คุณทราบว่าเนื้อหาของคุณสิ้นสุดที่ใด
อย่างไรก็ตามถ้าคุณคิดอย่างมีกลยุทธ์และสร้างสรรค์สิ่งนี้อาจเป็นจุดเริ่มต้นที่ดี สิ่งที่ดีที่สุดที่ควรทำคือเรียนรู้วิธีการทำงานของบอท
ฉันยังคิดเกี่ยวกับการ scambling ID บางส่วนหรือวิธีคุณลักษณะในองค์ประกอบของหน้าจะแสดง:
<a class="someclass" href="../xyz/abc" rel="nofollow" title="sometitle">
ที่เปลี่ยนรูปแบบของมันทุกครั้งที่บอตบางตัวอาจถูกตั้งค่าให้มองหารูปแบบเฉพาะในหน้าเว็บหรือองค์ประกอบเป้าหมายของคุณ
<a title="sometitle" href="../xyz/abc" rel="nofollow" class="someclass">
id="p-12802" > id="p-00392"
คุณไม่สามารถหยุดการขูดหน้าจอปกติได้ ดีกว่าหรือแย่กว่านั้นคือลักษณะของเว็บ
คุณสามารถทำให้มันไม่มีใครสามารถเข้าถึงบางสิ่ง (รวมถึงไฟล์เพลง) เว้นแต่ว่าพวกเขาจะเข้าสู่ระบบในฐานะผู้ใช้ที่ลงทะเบียน มันไม่ยากเกินไปที่จะทำใน Apache ฉันคิดว่าคงไม่ยากเกินไปที่จะทำใน IIS เช่นกัน
วิธีหนึ่งคือการแสดงเนื้อหาเป็นแอตทริบิวต์ XML, สตริงที่เข้ารหัส URL, ข้อความที่จัดรูปแบบล่วงหน้าด้วย JSON ที่เข้ารหัส HTML หรือ URI ข้อมูลจากนั้นแปลงเป็น HTML บนไคลเอนต์ นี่คือบางเว็บไซต์ที่ทำสิ่งนี้:
Skechers : XML
<document
filename=""
height=""
width=""
title="SKECHERS"
linkType=""
linkUrl=""
imageMap=""
href="http://www.bobsfromskechers.com"
alt="BOBS from Skechers"
title="BOBS from Skechers"
/>
Chrome เว็บสโตร์ : JSON
<script type="text/javascript" src="https://apis.google.com/js/plusone.js">{"lang": "en", "parsetags": "explicit"}</script>
Bing News : data data
<script type="text/javascript">
//<![CDATA[
(function()
{
var x;x=_ge('emb7');
if(x)
{
x.src='data:image/jpeg;base64,/*...*/';
}
}() )
Protopage : สตริงที่เข้ารหัส URL
unescape('Rolling%20Stone%20%3a%20Rock%20and%20Roll%20Daily')
TiddlyWiki : หน่วยงาน HTML + JSON ที่ฟอร์แมตแล้ว
<pre>
{"tiddlers":
{
"GettingStarted":
{
"title": "GettingStarted",
"text": "Welcome to TiddlyWiki,
}
}
}
</pre>
Amazon : Lazy Loading
amzn.copilot.jQuery=i;amzn.copilot.jQuery(document).ready(function(){d(b);f(c,function() {amzn.copilot.setup({serviceEndPoint:h.vipUrl,isContinuedSession:true})})})},f=function(i,h){var j=document.createElement("script");j.type="text/javascript";j.src=i;j.async=true;j.onload=h;a.appendChild(j)},d=function(h){var i=document.createElement("link");i.type="text/css";i.rel="stylesheet";i.href=h;a.appendChild(i)}})();
amzn.copilot.checkCoPilotSession({jsUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-js/cs-copilot-customer-js-min-1875890922._V1_.js', cssUrl : 'http://z-ecx.images-amazon.com/images/G/01/browser-scripts/cs-copilot-customer-css/cs-copilot-customer-css-min-2367001420._V1_.css', vipUrl : 'https://copilot.amazon.com'
XMLCalabash : Namespaced XML + ประเภท MIME ที่กำหนดเอง + นามสกุลไฟล์ที่กำหนดเอง
<p:declare-step type="pxp:zip">
<p:input port="source" sequence="true" primary="true"/>
<p:input port="manifest"/>
<p:output port="result"/>
<p:option name="href" required="true" cx:type="xsd:anyURI"/>
<p:option name="compression-method" cx:type="stored|deflated"/>
<p:option name="compression-level" cx:type="smallest|fastest|default|huffman|none"/>
<p:option name="command" select="'update'" cx:type="update|freshen|create|delete"/>
</p:declare-step>
หากคุณดูที่มาของข้อมูลใด ๆ ข้างต้นคุณจะเห็นว่าการคัดลอกจะส่งคืนข้อมูลเมตาและการนำทาง
ส่วนใหญ่มีการพูดไปแล้ว แต่คุณได้พิจารณาการป้องกัน CloudFlare หรือไม่ ฉันหมายถึงสิ่งนี้:
บริษัท อื่นอาจทำเช่นนี้ CloudFlare เป็น บริษัท เดียวที่ฉันรู้
ฉันค่อนข้างแน่ใจว่ามันจะทำให้งานของพวกเขาซับซ้อนขึ้น ฉันยังได้รับแบน IP โดยอัตโนมัติเป็นเวลา 4 เดือนเมื่อฉันพยายามที่จะคัดลอกข้อมูลของไซต์ที่ป้องกันโดย CloudFlare เนื่องจากอัตรา จำกัด
ฉันเห็นด้วยกับข้อความส่วนใหญ่ด้านบนและฉันต้องการเพิ่มว่ายิ่งเครื่องมือค้นหาเป็นมิตรกับไซต์ของคุณมากเท่าใดก็ยิ่งเป็นไปได้มากขึ้นเท่านั้น คุณสามารถลองทำสองสามอย่างที่ทำให้ยากสำหรับแครปเปอร์ แต่มันอาจส่งผลต่อความสามารถในการค้นหาของคุณ ... ขึ้นอยู่กับว่าคุณต้องการให้เว็บไซต์ของคุณติดอันดับบนเสิร์ชเอนจิ้นแน่นอน
การวางเนื้อหาของคุณไว้ด้านหลังแคปช่าอาจหมายถึงว่าโรบ็อตอาจพบว่ายากที่จะเข้าถึงเนื้อหาของคุณ อย่างไรก็ตามมนุษย์จะไม่สะดวกดังนั้นอาจไม่เป็นที่ต้องการ
เครื่องขูดหน้าจอทำงานโดยการประมวลผล HTML และหากพวกเขามุ่งมั่นที่จะรับข้อมูลของคุณมีไม่มากที่คุณสามารถทำได้ในทางเทคนิคเพราะลูกตามนุษย์ประมวลผลอะไร ถูกต้องตามกฎหมายแล้วชี้ให้เห็นว่าคุณอาจมีการขอความช่วยเหลือบางส่วนและนั่นจะเป็นคำแนะนำของฉัน
อย่างไรก็ตามคุณสามารถซ่อนส่วนที่สำคัญของข้อมูลของคุณโดยใช้ตรรกะการนำเสนอที่ไม่ใช่ HTML
โปรดทราบว่าสิ่งนี้อาจส่งผลต่อการจัดอันดับการค้นหาของคุณ
สร้าง HTML, CSS และ JavaScript การเขียนตัวสร้างจะง่ายกว่าตัวแยกวิเคราะห์ดังนั้นคุณสามารถสร้างแต่ละหน้าที่แสดงแตกต่างกันได้ คุณไม่สามารถใช้แคชหรือเนื้อหาคงที่ได้อีกต่อไป