ฉันจะป้องกันการขูดเว็บไซต์ได้อย่างไร [ปิด]


301

ฉันมีเว็บไซต์เพลงขนาดใหญ่พอสมควรพร้อมฐานข้อมูลศิลปินขนาดใหญ่ ฉันสังเกตเห็นเว็บไซต์เพลงอื่น ๆ คัดลอกข้อมูลเว็บไซต์ของเรา (ฉันป้อนชื่อศิลปินที่นี่และจากนั้น Google ทำการค้นหาพวกเขา)

ฉันจะป้องกันการขูดหน้าจอได้อย่างไร เป็นไปได้ไหม


9
คุณเคยลองตรวจจับมีดโกนของพวกเขาผ่าน IP หรือคล้ายกัน (ตรวจสอบบันทึกของคุณ) และเพียงแค่แกล้งข้อมูลของคุณทั้งหมดสำหรับสิ่งเหล่านั้นหรือไม่? ด้วยวิธีนี้ใช่พวกเขาจะ "ขูด" ไซต์ของคุณ แต่ "ข้อมูล" ของพวกเขาจะไร้ประโยชน์
Lasse V. Karlsen

30
คว่ำ lolcats และกลับรายการ / ส่งสัญญาณรบกวนใคร?
Wayne Werner

2
คำถามที่คล้ายกันstackoverflow.com/questions/2705394/…
279521


2
@ JonasCz มันเป็นเรื่องตลกแดกดัน สิ่งที่น่าเศร้าก็คือข้อเสนอที่คล้ายกันรวมอยู่ในคำตอบของคุณแม้ว่าจะถูกวิจารณ์
Tomáš Zato - Reinstate Monica

คำตอบ:


325

หมายเหตุ:เนื่องจากคำตอบที่สมบูรณ์ของรุ่นนี้เกินความยาวสูงสุดของ 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:

  • แทนที่จะปิดกั้นการเข้าถึงชั่วคราวให้ใช้ Captcha:

    วิธีที่ง่ายในการใช้การ จำกัด อัตราการคือการปิดกั้นการเข้าถึงชั่วคราวในระยะเวลาหนึ่งอย่างไรก็ตามการใช้ Captcha อาจทำได้ดีกว่าดูที่ส่วนของ Captchas เพิ่มเติม

ต้องลงทะเบียนและเข้าสู่ระบบ

ต้องมีการสร้างบัญชีเพื่อดูเนื้อหาของคุณหากเป็นไปได้สำหรับเว็บไซต์ของคุณ นี่เป็นเครื่องยับยั้งที่ดีสำหรับเครื่องขูด แต่ก็เป็นเครื่องยับยั้งที่ดีสำหรับผู้ใช้งานจริง

  • หากคุณต้องการสร้างบัญชีและเข้าสู่ระบบคุณสามารถติดตามการกระทำของผู้ใช้และมีดโกนได้อย่างถูกต้อง ด้วยวิธีนี้คุณสามารถตรวจสอบได้อย่างง่ายดายเมื่อมีการใช้บัญชีเฉพาะสำหรับการคัดลอกและห้าม สิ่งต่าง ๆ เช่นการ จำกัด อัตราการตรวจจับการละเมิด (เช่นการค้นหาจำนวนมากในเวลาอันสั้น) นั้นง่ายขึ้นเนื่องจากคุณสามารถระบุตัวขูดเฉพาะแทนที่จะเป็นที่อยู่ IP

เพื่อหลีกเลี่ยงสคริปต์ที่สร้างบัญชีหลายบัญชีคุณควร:

  • ต้องมีที่อยู่อีเมลสำหรับการลงทะเบียนและยืนยันว่าที่อยู่อีเมลนั้นโดยการส่งลิงค์ที่ต้องเปิดเพื่อเปิดใช้งานบัญชี อนุญาตหนึ่งบัญชีต่อหนึ่งที่อยู่อีเมล

  • ต้องการ captcha เพื่อแก้ไขในระหว่างการลงทะเบียน / สร้างบัญชี

การสร้างบัญชีที่ต้องการดูเนื้อหาจะทำให้ผู้ใช้และเครื่องมือค้นหาไม่อยู่ หากคุณต้องการสร้างบัญชีเพื่อดูบทความผู้ใช้จะไปที่อื่น

บล็อกการเข้าถึงจากที่อยู่ IP บนคลาวด์และการคัดลอกที่อยู่ IP ของบริการ

บางครั้งเครื่องขูดจะถูกเรียกใช้จากบริการเว็บโฮสติ้งเช่น Amazon Web Services หรือ GAE หรือ VPSes จำกัด การเข้าถึงเว็บไซต์ของคุณ (หรือแสดง captcha) สำหรับคำขอที่มาจากที่อยู่ IP ที่ใช้โดยบริการโฮสต์บนคลาวด์ดังกล่าว

ในทำนองเดียวกันคุณสามารถ จำกัด การเข้าถึงจากที่อยู่ IP ที่ใช้โดยผู้ให้บริการพร็อกซีหรือ VPN เนื่องจากเครื่องขูดอาจใช้พร็อกซีเซิร์ฟเวอร์ดังกล่าวเพื่อหลีกเลี่ยงการตรวจพบคำขอจำนวนมาก

ระวังว่าด้วยการบล็อกการเข้าถึงจากพร็อกซีเซิร์ฟเวอร์และ VPN คุณจะส่งผลเสียต่อผู้ใช้งานจริง

ทำให้ข้อความแสดงข้อผิดพลาดของคุณไม่ใช่ตัวอักษรหากคุณบล็อก

หากคุณทำการบล็อก / จำกัด การเข้าถึงคุณควรตรวจสอบให้แน่ใจว่าคุณไม่ได้บอกมีดโกนว่าอะไรเป็นสาเหตุให้บล็อกทำให้พวกเขารู้ว่าจะแก้ไขมีดโกนได้อย่างไร ดังนั้นความคิดที่ดีคือการแสดงหน้าข้อผิดพลาดด้วยข้อความเช่น:

  • มีคำขอจากที่อยู่ IP ของคุณมากเกินไปโปรดลองอีกครั้งในภายหลัง

  • ข้อผิดพลาดส่วนหัวตัวแทนผู้ใช้ไม่ปรากฏ!

ให้แสดงข้อความแสดงข้อผิดพลาดที่เป็นมิตรที่ไม่ได้บอกมีดโกนว่าเกิดจากอะไร บางสิ่งเช่นนี้ดีกว่ามาก:

  • ขอโทษมีบางอย่างผิดพลาด. คุณสามารถติดต่อฝ่ายสนับสนุนผ่านทางhelpdesk@example.comหากปัญหายังคงมีอยู่

นอกจากนี้ยังเป็นมิตรกับผู้ใช้มากขึ้นสำหรับผู้ใช้จริงหากพวกเขาเคยเห็นหน้าข้อผิดพลาดดังกล่าว คุณควรพิจารณาแสดง captcha สำหรับคำขอที่ตามมาแทนฮาร์ดบล็อคในกรณีที่ผู้ใช้จริงเห็นข้อความแสดงข้อผิดพลาดเพื่อที่คุณจะไม่ได้ปิดกั้นและทำให้ผู้ใช้ที่ถูกกฎหมายติดต่อคุณ

ใช้ Captchas หากคุณสงสัยว่ามีดโกนของคุณถูกเข้าถึงโดยเว็บไซต์ของคุณ

แคปต์คัส ("การทดสอบอัตโนมัติเพื่อบอกคอมพิวเตอร์และมนุษย์ออกจากกันโดยสิ้นเชิง") มีประสิทธิภาพมากในการหยุดแครปเปอร์ น่าเสียดายที่พวกเขามีประสิทธิภาพมากในการทำให้ผู้ใช้เกิดการระคายเคือง

ดังนั้นจึงมีประโยชน์เมื่อคุณสงสัยว่ามีมีดโกนที่เป็นไปได้และต้องการหยุดการขูดโดยไม่ปิดกั้นการเข้าถึงในกรณีที่ไม่ใช่มีดโกน แต่เป็นผู้ใช้จริง คุณอาจต้องการพิจารณาแสดง captcha ก่อนอนุญาตให้เข้าถึงเนื้อหาหากคุณสงสัยว่ามีมีดโกน

สิ่งที่ควรระวังเมื่อใช้งาน Captchas:

  • อย่าม้วนตัวคุณเองใช้บางอย่างเช่นreCaptchaของ Google : มันง่ายกว่าการติดตั้ง captcha ด้วยตัวคุณเองมันเป็นมิตรกับผู้ใช้มากกว่าโซลูชันข้อความที่พร่ามัวและบิดเบี้ยวที่คุณอาจเกิดขึ้นกับตัวเอง (ผู้ใช้มักจะต้องทำเครื่องหมายในกล่อง ) และมันก็ยากกว่ามากสำหรับผู้ให้ความช่วยเหลือในการแก้ไขมากกว่าภาพธรรมดาที่แสดงจากไซต์ของคุณ

  • อย่ารวมโซลูชันของ captcha ในมาร์กอัป HTML: ฉันเคยเห็นเว็บไซต์หนึ่งที่มีโซลูชันสำหรับ captcha ในหน้าเว็บนั้นเอง (แม้ว่าจะค่อนข้างซ่อนเร้นอยู่) จึงทำให้มันไร้ประโยชน์เลย อย่าทำอะไรแบบนี้ ใช้บริการเช่น reCaptcha อีกครั้งและคุณจะไม่มีปัญหาเช่นนี้ (หากคุณใช้อย่างถูกต้อง)

  • แคปต์ชาสามารถแก้ไขได้ในปริมาณมาก: มีบริการแก้ปัญหาแคปต์ชาที่ซึ่งมนุษย์จ่ายจริงและแก้แคปชาในปริมาณมาก อีกครั้งการใช้ reCaptcha เป็นความคิดที่ดีที่นี่เนื่องจากมีการป้องกัน (เช่นเวลาค่อนข้างสั้นที่ผู้ใช้มีเพื่อแก้แคปต์ชา) บริการประเภทนี้ไม่น่าจะนำมาใช้เว้นแต่ว่าข้อมูลของคุณมีค่าจริง ๆ

แสดงเนื้อหาข้อความของคุณเป็นภาพ

คุณสามารถแสดงข้อความลงในเซิร์ฟเวอร์ด้านภาพและแสดงสิ่งที่จะแสดงซึ่งจะขัดขวางเครื่องคัดแยกข้อความแบบง่าย

อย่างไรก็ตามสิ่งนี้ไม่ดีสำหรับโปรแกรมอ่านหน้าจอเครื่องมือค้นหาประสิทธิภาพและอื่น ๆ อีกมาก นอกจากนี้ยังผิดกฎหมายในบางสถานที่ (เนื่องจากการเข้าถึงได้ง่ายเช่นพระราชบัญญัติคนอเมริกันที่มีความพิการ) และยังสามารถหลีกเลี่ยง OCR บางอย่างได้ง่ายดังนั้นอย่าทำเช่นนั้น

คุณสามารถทำสิ่งที่คล้ายกับสไปรต์ CSS แต่สิ่งนั้นทนทุกข์ทรมานจากปัญหาเดียวกัน

อย่าเปิดเผยชุดข้อมูลที่สมบูรณ์ของคุณ:

หากเป็นไปได้อย่าให้วิธีการสำหรับสคริปต์ / บ็อตเพื่อรับชุดข้อมูลทั้งหมดของคุณ ตัวอย่างเช่นคุณมีเว็บไซต์ข่าวที่มีบทความเป็นจำนวนมาก คุณสามารถทำให้บทความเหล่านั้นสามารถเข้าถึงได้โดยการค้นหาบทความเหล่านั้นผ่านการค้นหาในไซต์และหากคุณไม่มีรายการทั้งหมดบทความในเว็บไซต์และ URL ที่ใดก็ตามบทความเหล่านั้นจะสามารถเข้าถึงได้โดยใช้การค้นหาเท่านั้น ลักษณะเฉพาะ. ซึ่งหมายความว่าสคริปต์ที่ต้องการนำบทความทั้งหมดออกจากไซต์ของคุณจะต้องค้นหาวลีที่เป็นไปได้ทั้งหมดซึ่งอาจปรากฏในบทความของคุณเพื่อค้นหาทั้งหมดซึ่งจะใช้เวลานานไม่มีประสิทธิภาพอย่างน่ากลัวและหวังว่าจะทำให้ มีดโกนก็ยอมแพ้

สิ่งนี้จะไม่ได้ผลถ้า:

  • บอต / สคริปต์ไม่ต้องการ / ต้องการชุดข้อมูลแบบเต็มอยู่แล้ว
  • บทความของคุณจะได้รับจาก URL example.com/article.php?articleId=12345ซึ่งมีลักษณะบางอย่างเช่น สิ่งนี้ (และสิ่งที่คล้ายกัน) ซึ่งจะช่วยให้เครื่องขูดสามารถย้ำไปทั่วarticleIdและขอบทความทั้งหมดในแบบนั้น
  • มีวิธีอื่นในการค้นหาบทความทั้งหมดในที่สุดเช่นโดยการเขียนสคริปต์เพื่อติดตามลิงก์ภายในบทความที่นำไปสู่บทความอื่น ๆ
  • การค้นหาบางอย่างเช่น "และ" หรือ "the" สามารถเปิดเผยได้เกือบทุกอย่างเพื่อให้เป็นสิ่งที่ควรระวัง (คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยส่งผลลัพธ์ 10 อันดับแรกหรือ 20 รายการเท่านั้น)
  • คุณต้องการเครื่องมือค้นหาเพื่อค้นหาเนื้อหาของคุณ

อย่าเปิดเผย APIs จุดสิ้นสุดและสิ่งที่คล้ายกันของคุณ:

ตรวจสอบให้แน่ใจว่าคุณไม่ได้เปิดเผย API ใด ๆ โดยไม่ได้ตั้งใจ ตัวอย่างเช่นหากคุณใช้ AJAX หรือคำขอเครือข่ายจากภายใน Adobe Flash หรือ Java Applets (พระเจ้าห้าม!) ในการโหลดข้อมูลของคุณมันเป็นเรื่องเล็กน้อยที่จะดูคำขอเครือข่ายจากหน้าและหาว่าคำขอเหล่านั้นจะไปที่ใดและ จากนั้นทำวิศวกรรมย้อนกลับและใช้จุดปลายเหล่านั้นในโปรแกรมมีดโกน ตรวจสอบให้แน่ใจว่าคุณทำให้งงงวยปลายทางและทำให้พวกเขายากสำหรับคนอื่น ๆ ที่จะใช้ตามที่อธิบายไว้

ในการยับยั้ง HTML parsers และ scrapers:

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

เปลี่ยน HTML ของคุณบ่อยๆ

ผู้คัดลอกที่กระบวนการ HTML ทำโดยตรงโดยการแยกเนื้อหาจากส่วนที่ระบุและระบุตัวได้ของหน้า HTML ของคุณ ตัวอย่างเช่น: หากทุกหน้าในเว็บไซต์ของคุณมีdivรหัสarticle-contentซึ่งมีข้อความของบทความอยู่นั้นเป็นเรื่องเล็กน้อยที่จะเขียนสคริปต์เพื่อเยี่ยมชมหน้าบทความทั้งหมดในเว็บไซต์ของคุณและแยกเนื้อหาเนื้อหาของarticle-contentdiv ในแต่ละหน้าบทความและvoilà scraper มีบทความทั้งหมดจากไซต์ของคุณในรูปแบบที่สามารถนำกลับมาใช้ที่อื่นได้

หากคุณเปลี่ยน HTML และโครงสร้างหน้าเว็บของคุณบ่อยครั้งเครื่องขูดดังกล่าวจะไม่ทำงานอีกต่อไป

  • คุณสามารถเปลี่ยนรหัสประจำตัวและคลาสขององค์ประกอบต่าง ๆ ใน HTML ของคุณได้โดยอัตโนมัติ ดังนั้นหากคุณdiv.article-contentกลายเป็นคนที่ชอบdiv.a4c36dda13eaf0และเปลี่ยนแปลงทุกสัปดาห์มีดโกนจะทำงานได้ดีในตอนแรก แต่จะพังหลังจากผ่านไปหนึ่งสัปดาห์ ตรวจสอบให้แน่ใจว่าเปลี่ยนความยาวของรหัส / คลาสของคุณด้วยไม่เช่นนั้นมีดโกนจะใช้div.[any-14-characters]เพื่อค้นหา div ที่ต้องการแทน ระวังหลุมที่คล้ายกันอื่น ๆ ด้วย ..

  • หากไม่มีวิธีการค้นหาเนื้อหาที่ต้องการจากมาร์กอัปมีดโกนจะทำจากวิธีที่โครงสร้าง HTML ดังนั้นหากหน้าบทความทั้งหมดของคุณมีความคล้ายคลึงกันในทุก ๆdivด้านdivที่อยู่หลัง a h1คือเนื้อหาบทความแครปเปอร์จะได้รับเนื้อหาของบทความตามนั้น อีกครั้งเพื่อทำลายสิ่งนี้คุณสามารถเพิ่ม / ลบมาร์กอัปพิเศษใน HTML ของคุณเป็นระยะ ๆ และแบบสุ่มเช่น เพิ่มdivs หรือspans พิเศษ ด้วยการประมวลผล HTML ฝั่งเซิร์ฟเวอร์ที่ทันสมัยสิ่งนี้ไม่ควรยากเกินไป

สิ่งที่ต้องระวัง:

  • มันจะน่าเบื่อและยากที่จะใช้บำรุงรักษาและแก้ปัญหา

  • คุณจะขัดขวางการแคช โดยเฉพาะอย่างยิ่งถ้าคุณเปลี่ยนรหัสหรือคลาสขององค์ประกอบ HTML ของคุณสิ่งนี้จะต้องมีการเปลี่ยนแปลงที่สอดคล้องกันในไฟล์ CSS และ JavaScript ของคุณซึ่งหมายความว่าทุกครั้งที่คุณเปลี่ยนแปลงพวกเขาจะต้องดาวน์โหลดเบราว์เซอร์อีกครั้ง ซึ่งจะส่งผลให้เวลาในการโหลดหน้าเว็บนานขึ้นสำหรับผู้เยี่ยมชมซ้ำและเพิ่มการโหลดเซิร์ฟเวอร์ หากคุณเปลี่ยนเพียงสัปดาห์ละครั้งก็จะไม่เป็นปัญหาใหญ่

  • เครื่องขูดฉลาดยังคงสามารถรับเนื้อหาของคุณโดยอนุมานว่าเนื้อหาที่แท้จริงคืออะไร โดยการรู้ว่าบล็อกข้อความขนาดใหญ่บนหน้าเว็บน่าจะเป็นบทความจริง สิ่งนี้ทำให้ยังคงสามารถค้นหาและแยกข้อมูลที่ต้องการจากหน้า Boilerpipeทำสิ่งนี้อย่างแน่นอน

โดยพื้นฐานแล้วตรวจสอบให้แน่ใจว่าสคริปต์ไม่สามารถค้นหาเนื้อหาที่ต้องการจริงสำหรับทุกหน้าที่คล้ายกันได้

ดูเพิ่มเติมวิธีป้องกันการรวบรวมข้อมูลโดยขึ้นอยู่กับ XPath จากการรับเนื้อหาของหน้าเว็บสำหรับรายละเอียดเกี่ยวกับวิธีการนำสิ่งนี้ไปใช้ใน PHP

เปลี่ยน HTML ของคุณตามตำแหน่งของผู้ใช้

นี่คล้ายกับเคล็ดลับก่อนหน้านี้ หากคุณให้บริการ HTML ที่แตกต่างกันตามสถานที่ตั้ง / ประเทศของผู้ใช้ของคุณ (พิจารณาจากที่อยู่ IP) สิ่งนี้อาจทำให้เครื่องแครปเปอร์ซึ่งส่งมอบให้กับผู้ใช้ ตัวอย่างเช่นหากมีใครบางคนกำลังเขียนแอพมือถือที่ scrapes ข้อมูลจากเว็บไซต์ของคุณมันจะทำงานได้ดีในตอนแรก แต่จะพังเมื่อมันถูกส่งไปยังผู้ใช้จริงเพราะผู้ใช้เหล่านั้นอาจอยู่ในประเทศอื่นและทำให้ HTML แตกต่างกัน มีดโกนแบบฝังตัวไม่ได้ถูกออกแบบมาให้ใช้งาน

เปลี่ยน 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 ปลอมที่มองไม่เห็นลงในหน้าของคุณ

เมื่อเพิ่มตัวอย่างก่อนหน้านี้คุณสามารถเพิ่มรายการ 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 ตามที่ร้องขอในขณะที่เบราว์เซอร์ทั้งหมดรวมถึงสไปเดอร์ของเครื่องมือค้นหาจะ

หากคุณได้รับคำขอที่ไม่มีส่วนหัวของตัวแทนผู้ใช้คุณสามารถแสดงแคปต์ชาหรือเพียงแค่บล็อกหรือ จำกัด การเข้าถึง (หรือให้บริการข้อมูลปลอมตามที่อธิบายไว้ข้างต้นหรืออย่างอื่น .. )

มันไม่สำคัญที่จะหลอก แต่เป็นมาตรการต่อต้านแครปเปอร์ที่เขียนไม่ดี

ไม่รับคำขอหากตัวแทนผู้ใช้เป็นมีดโกนทั่วไป รายการที่ไม่อนุญาตที่ใช้โดยแครปเปอร์

ในบางกรณีแครปเปอร์จะใช้ตัวแทนผู้ใช้ซึ่งไม่มีเบราว์เซอร์จริงหรือเดอร์เครื่องมือค้นหาใช้เช่น:

  • "Mozilla" (แค่นั้นไม่มีอะไรอีกแล้วฉันเคยเห็นคำถามสองสามข้อเกี่ยวกับการขูดที่นี่โดยใช้สิ่งนั้นเบราว์เซอร์ที่แท้จริงจะไม่ใช้เฉพาะที่)
  • "Java 1.7.43_u43" (โดยค่าเริ่มต้น HttpUrlConnection ของ Java ใช้สิ่งนี้)
  • "BIZCO EasyScraping Studio 2.0"
  • "wget", "curl", "libcurl", .. (บางครั้ง Wget และ cURL ใช้สำหรับการขูดพื้นฐาน)

หากคุณพบว่ามีการใช้สตริงตัวแทนผู้ใช้เฉพาะในเครื่องขูดบนไซต์ของคุณและไม่ได้ใช้โดยเบราว์เซอร์จริงหรือสไปเดอร์ที่ถูกกฎหมายคุณสามารถเพิ่มลงในบัญชีดำของคุณได้

หากไม่ขอเนื้อหา (CSS, รูปภาพ) แสดงว่าไม่ใช่เบราว์เซอร์จริง

เบราว์เซอร์จริงจะร้องขอและดาวน์โหลดเนื้อหาเกือบทั้งหมดเช่นรูปภาพและ CSS ตัวแยกวิเคราะห์และตัวขูด HTML จะไม่ทำเพราะพวกเขาสนใจเฉพาะหน้าจริงและเนื้อหา

คุณสามารถบันทึกคำขอไปยังเนื้อหาของคุณและหากคุณเห็นคำขอจำนวนมากสำหรับ HTML เท่านั้นนั่นอาจเป็นมีดโกนได้

ระวังว่าบอทของเครื่องมือค้นหาอุปกรณ์มือถือโบราณตัวอ่านหน้าจอและอุปกรณ์ที่กำหนดค่าผิดอาจไม่ร้องขอสินทรัพย์ด้วยเช่นกัน

ใช้และต้องการคุกกี้ ใช้พวกเขาเพื่อติดตามการกระทำของผู้ใช้และมีดโกน

คุณสามารถกำหนดให้เปิดใช้งานคุกกี้เพื่อที่จะดูเว็บไซต์ของคุณ วิธีนี้จะช่วยยับยั้งนักเขียนมือใหม่และมือใหม่อย่างไรก็ตามมันง่ายสำหรับมีดโกนในการส่งคุกกี้ หากคุณใช้และต้องการสิ่งเหล่านี้คุณสามารถติดตามการกระทำของผู้ใช้และ scraper กับพวกเขาและใช้การ จำกัด อัตราการบล็อกหรือการแสดง captchas ต่อผู้ใช้แทนที่จะเป็นพื้นฐานต่อ IP

ตัวอย่างเช่น: เมื่อผู้ใช้ทำการค้นหาให้ตั้งค่าคุกกี้การระบุที่ไม่ซ้ำกัน เมื่อมีการดูหน้าผลลัพธ์ให้ตรวจสอบคุกกี้นั้น หากผู้ใช้เปิดผลการค้นหาทั้งหมด (คุณสามารถบอกได้จากคุกกี้) นั่นอาจเป็นมีดโกน

การใช้คุกกี้อาจไม่ได้ผลเนื่องจาก scrapers สามารถส่งคุกกี้พร้อมคำขอของพวกเขาได้เช่นกันและทิ้งตามต้องการ คุณจะป้องกันการเข้าถึงสำหรับผู้ใช้จริงที่ปิดใช้งานคุกกี้หากเว็บไซต์ของคุณใช้งานได้เฉพาะกับคุกกี้

โปรดทราบว่าหากคุณใช้ JavaScript เพื่อตั้งค่าและเรียกค้นคุกกี้คุณจะปิดกั้นตัวขูดที่ไม่ได้เรียกใช้ JavaScript เนื่องจากไม่สามารถเรียกดูและส่งคุกกี้ตามคำขอของพวกเขาได้

ใช้ JavaScript + Ajax เพื่อโหลดเนื้อหาของคุณ

คุณสามารถใช้ 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 และการ จำกัด อัตรา


11
สิ่งนี้ทำให้ฉันมาที่นี่ คำตอบที่น่าประทับใจทีเดียว นอกจากนี้ยังมีประวัติการแก้ไขที่น่าทึ่ง ขอบคุณสำหรับการโพสต์ คุณได้รับการโหวต ไม่ใช่เพียงเพราะความพยายามที่ใส่เข้าไปในสิ่งนี้ แต่เพราะมันมีประโยชน์สำหรับฉัน
DaveTheMinion

1
คำตอบที่ดี! นี่คือความคิดบางอย่าง 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ปรับสมดุลเวลาการเขียนโปรแกรม / ความซับซ้อนกับผลประโยชน์ทางการเงิน
Eric J.

5
@ จอนถ้าพวกเขาสนใจพวกเขาจะอ่านมัน นอกจากนี้ฉันได้แบ่งส่วนย่อยเป็นส่วนหัวและส่วนหัวย่อยเพื่อให้ผู้ใช้สามารถสแกนและอ่านส่วนที่ต้องการได้ ในความเป็นจริงมีคำตอบที่คล้ายกันสองสามข้อและผู้คนอ่านพวกเขา
JonasCz - Reinstate Monica

2
@JoshCrozier - ฉันแค่คิดว่าเว็บไซต์แบบนี้เล่นได้ไม่ดีกับข้อมูลมากมายนี้ ฉันไม่ได้บอกว่าข้อมูลไม่ดี
JonH

2
ป.ล. พิมพ์ลายเซ็นด้วยความคิดเนื้อหาสามารถใช้ในศาลยุติธรรมได้ ลองจินตนาการถึงความตกใจเมื่อคุณพิสูจน์ว่าผู้ครอบครองข้อมูลของคุณได้รับจากคุณผ่านคุณสมบัติที่เป็นเอกลักษณ์โดยตรงในข้อมูล ...
ErikE

241

robots.txtผมจะเข้าใจว่าคุณได้ตั้งค่า

อย่างที่คนอื่น ๆ พูดถึงเครื่องขูดสามารถลอกเลียนแบบได้เกือบทุกด้านของกิจกรรมและอาจเป็นเรื่องยากมากที่จะระบุคำขอที่มาจากคนเลว

ฉันจะพิจารณา:

  1. ตั้งค่าหน้า /jail.html .
  2. ไม่อนุญาตให้เข้าถึงหน้าเว็บในrobots.txt(ดังนั้นสไปเดอร์ที่เคารพจะไม่เข้าชม)
  3. วางลิงก์บนหนึ่งในหน้าของคุณซ่อนด้วย CSS ( display: none)
  4. ที่อยู่ในบันทึก IP /jail.htmlของผู้เข้าชม

นี่อาจช่วยให้คุณระบุคำขอจากแครปเปอร์ที่ไม่สนใจคุณrobots.txtอย่างชัดเจน

คุณอาจต้องการทำให้/jail.htmlทั้งเว็บไซต์ของคุณมีมาร์กอัปเหมือนกันทุกหน้า แต่มีข้อมูลปลอม ( /jail/album/63ajdka, /jail/track/3aads8และอื่น ๆ ) ด้วยวิธีนี้ตัวขูดที่ไม่ดีจะไม่ถูกแจ้งเตือนให้ "ใส่ผิดปกติ" จนกว่าคุณจะมีโอกาสปิดกั้นพวกเขาทั้งหมด


48
ฉันเคยเห็นเทคนิคนี้เรียกว่า "honeypot" มาก่อน เป็นเทคนิคที่ใช้ในการกรองสแปมซึ่งคุณใส่ที่อยู่อีเมลบนหน้าเว็บ แต่ซ่อนหรือทำให้ชัดเจนว่าไม่ใช่สำหรับผู้ที่ส่งจดหมายที่ถูกกฎหมาย จากนั้นรวบรวมที่อยู่ IP ของเซิร์ฟเวอร์จดหมายใด ๆ ที่ส่งจดหมายไปยังที่อยู่นั้น
thomasrutter

12
นี่ถือว่าพวกเขากำลังรวบรวมข้อมูลลิงก์ แครปเปอร์ส่วนใหญ่จะพยายามส่งไปยังรูปแบบบางอย่างและขูดข้อมูลที่ส่งคืน
Byron Whitlock

9
ฉันเคยเห็น honeypots ที่ใช้ Perl สำหรับอีเมลที่มีลิงก์ไปยัง "เพจ" อื่น ๆ ที่สร้างขึ้นโดยสคริปต์ Perl บอทที่ถูกต้องที่อ่าน robots.txt จะไม่มองมันและมันถูกซ่อนจากผู้ใช้ผ่าน CSS แต่แครปเปอร์ (หรือผู้เก็บเกี่ยวอีเมล) จะถูกดักจับอย่างรวดเร็วในต้นไม้ที่มีความลึกไม่ จำกัด ซึ่งมีข้อมูลที่ไม่ดี ใส่ลิงค์ไปยังสคริปต์ที่จุดเริ่มต้นของแต่ละหน้าของคุณ
Stephen P

18
อีกสิ่งที่ยอดเยี่ยมในการโยนเพื่อ honeypots คือ teergrubing (หรือผ้าใบกันน้ำ) นี่เป็นเทคนิคเก่าที่ฉันชอบ - เมื่อคุณระบุคนเลวคุณนำกระบวนการสแปม / การคัดลอกมาที่การรวบรวมข้อมูลโดยตั้งใจให้การเชื่อมต่อของเขาเปิดนานที่สุดเท่าที่จะเป็นไปได้ แน่นอนว่าสิ่งนี้อาจเตือนพวกเขาว่าคุณกำลังอยู่กับพวกเขาเช่นกัน แต่เอ้ยมันสนุก en.wikipedia.org/wiki/Teergrubing
womp

11
ปัญหาเดียวของวิธีนี้คือถ้าฉันวาง [img] yoursite / jail.html [/ img] ในฟอรัมยอดนิยม คุณจะได้รับ IP จำนวนมากที่ล็อกอินเข้าสู่ระบบของคุณและมันจะเป็นการยากที่จะกรองว่าอันไหนที่ไม่ดี หากคุณต้องการป้องกันสิ่งนี้คุณต้องเพิ่มโทเค็นที่เกี่ยวข้องกับ IP ใน URL สิ่งที่ต้องการ jail.php? t = hoeyvm และในฐานข้อมูลคุณมีการเชื่อมโยงของ hoeyvm และ IP ที่ร้องขอหน้าเว็บ
HoLyVieR

48

Sue 'em

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

บันทึกการแทรกค่าหุ่นจำลองของคุณ ใส่ค่าดัมมี่ที่ชัดเจน (แต่คลุมเครือ) ชี้ไปที่คุณ ฉันคิดว่านี่เป็นวิธีปฏิบัติทั่วไปกับ บริษัท สมุดโทรศัพท์และที่นี่ในเยอรมนีฉันคิดว่ามีหลายครั้งที่การลอกเลียนแบบถูกขโมยผ่านรายการปลอมที่พวกเขาคัดลอก 1: 1

มันจะเป็นความอัปยศถ้าสิ่งนี้จะนำคุณไปสู่การเลอะรหัส HTML ของคุณลาก SEO ลงความถูกต้องและสิ่งอื่น ๆ (แม้ว่าระบบ templating ที่ใช้โครงสร้าง HTML ที่แตกต่างกันเล็กน้อยในแต่ละคำขอสำหรับหน้าเหมือนกันอาจช่วยได้มากกับ scrapers ที่พึ่งพาโครงสร้าง HTML และชื่อคลาส / ID เสมอเพื่อให้ได้เนื้อหาออกมา)

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


9
ใช้งานได้ในประเทศที่มีกรอบทางกฎหมายที่มั่นคงเท่านั้น
TomL

3
ทนายความเติบโตได้ดีจากความขัดแย้ง - และผลกำไรจากมัน ทนายความของคุณจะไม่แนะนำให้คุณไปศาล ใครก็ตามที่จะบอกคุณว่าการชนะและแพ้นั้นไม่มีส่วนเกี่ยวข้องใด ๆ กับแนวคิดที่ดีของ 'ความยุติธรรม' แต่การขัดแย้งอารมณ์และอคติในวันนั้น จำไว้ว่าถ้ามันผิดพลาดคุณอาจต้องรับผิดชอบไม่เพียง แต่ค่าใช้จ่ายของทนายความของคุณ แต่ยังรวมถึงฝ่ายอื่น ๆ ด้วยและหากพวกเขาตัดสินใจฟ้องร้อง - คุณอาจสูญเสียบ้านและทรัพย์สินอื่น ๆ ในชีวิตได้อย่างง่ายดาย ไม่ใช่การพนันที่ฉันอยากจะแนะนำ ฉันแนะนำให้คุณหลีกเลี่ยงค่าใช้จ่ายทั้งหมด
Frankie

3
ฉันเห็นด้วยกับ @TomL ถ้าพวกเขาอยู่ในฝั่งตะวันตกมันก็มีเหตุผล แต่ถ้าพวกเขาอยู่ในอินเดีย / จีน / รัสเซีย / ยูเครน / อะไรก็ตาม - อย่างจริงจังอย่างน้อยก็ไม่มีโอกาส ฉันสามารถพูดเกี่ยวกับศาลรัสเซีย: พวกเขาจะไม่สนใจทำงานกับการเรียกร้องของคุณ
Highstaker

35

ไม่มีอะไรที่คุณสามารถทำได้เพื่อป้องกันสิ่งนี้อย่างสมบูรณ์ เครื่องขูดสามารถปลอมตัวแทนผู้ใช้ของพวกเขาใช้ที่อยู่ IP หลาย ๆ ฯลฯ และปรากฏเป็นผู้ใช้ปกติ สิ่งเดียวที่คุณทำได้คือทำให้ข้อความไม่พร้อมใช้งานในขณะที่โหลดหน้าเว็บ - สร้างด้วยภาพแฟลชหรือโหลดด้วย JavaScript อย่างไรก็ตามสองข้อแรกเป็นแนวคิดที่ไม่ดีและข้อสุดท้ายจะเป็นปัญหาการเข้าถึงข้อมูลหากไม่ได้เปิดใช้งาน JavaScript สำหรับผู้ใช้ปกติบางรายของคุณ

หากพวกเขากระแทกเว็บไซต์ของคุณและโจมตีหน้าเว็บทุกหน้าของคุณคุณสามารถ จำกัด อัตราบางอย่างได้

มีความหวังอยู่บ้าง เครื่องขูดใช้ข้อมูลของไซต์ของคุณในรูปแบบที่สอดคล้องกัน หากคุณสามารถสุ่มมันอย่างใดมันอาจทำลายมีดโกนของพวกเขา สิ่งต่าง ๆ เช่นการเปลี่ยน ID หรือชื่อคลาสขององค์ประกอบของหน้าเว็บในการโหลดแต่ละครั้ง ฯลฯ แต่นั่นเป็นงานที่ต้องทำมากมายและฉันไม่แน่ใจว่ามันคุ้มค่าหรือไม่ และถึงอย่างนั้นพวกเขาก็สามารถเดินไปรอบ ๆ ได้ด้วยความทุ่มเทที่เพียงพอ


14
การสร้างระบบที่ จำกัด จำนวน IP ที่สามารถดูได้ต่อนาทีเป็นแฮ็คที่ดีเนื่องจากเครื่องขูดหน้าจอจะริปไซต์ได้เร็วกว่าบุคคลทั่วไปมาก
TravisO

ตกลง IP เสียค่าใช้จ่ายและถูก จำกัด โดย บริษัท โฮสติ้งส่วนใหญ่
Tal Weiss

เรื่อง: "สิ่งต่าง ๆ เช่นการเปลี่ยน ID หรือชื่อคลาสขององค์ประกอบหน้าในแต่ละโหลด ฯลฯ " นั่นไม่เลวร้ายนักถ้าคุณสร้างชื่อคลาสผ่าน PHP และจากนั้นใช้ <div class = "<? php echo $ myPHPGeneratedClassName;?>"> คุณยังสามารถใช้สตริงแบบสุ่มเพื่อทำให้มันไม่ซ้ำกันอย่างสมบูรณ์ อะไรก็ตามที่หยุดพวกเขาในการหารูปแบบทำให้การแยกออกจาก DOM ยากขึ้น
niggles

การค้นหา IP ไม่ใช่เรื่องยาก มีพร็อกซี่มากมายคอมพิวเตอร์เพื่อนคอมพิวเตอร์ที่ทำงานคอมพิวเตอร์ในโรงเรียนคอมพิวเตอร์ในห้องสมุด ...
ไม่ระบุตัวตน

@ user257493: จริง แต่เรากำลังพูดถึงคนที่ขูดข้อมูลที่นี่ โอกาสที่พวกเขาจะไม่ได้ไปไปที่ความพยายามมากเพียงเพื่อเก็บเกี่ยวข้อมูล และถ้าพวกเขาทำคุณจะหมดสิ้นลงในการจัดหา IP ของพวกเขา
ryeguy

31

ระบุ XML API เพื่อเข้าถึงข้อมูลของคุณ ในลักษณะที่ใช้งานง่าย หากผู้คนต้องการข้อมูลของคุณพวกเขาจะได้รับมันคุณก็อาจจะหมดทุกอย่าง

วิธีนี้คุณสามารถให้ชุดย่อยของฟังก์ชันการทำงานอย่างมีประสิทธิภาพเพื่อให้มั่นใจว่าอย่างน้อยที่สุดตัวขูดจะไม่ทำให้คำขอ HTTP และแบนด์วิดท์จำนวนมหาศาลถูกดึงออกมา

สิ่งที่คุณต้องทำคือโน้มน้าวผู้คนที่ต้องการให้ข้อมูลของคุณใช้ API ;)


3
ดูเหมือนว่าสมเหตุสมผลมาก การคัดลอกหน้าจอเป็นการยากที่จะป้องกันและถ้าคุณให้ API คุณสามารถใส่ข้อ จำกัด เพิ่มประกาศ ("เนื้อหาจาก ----.com") และโดยทั่วไปจะควบคุมข้อมูลที่ได้รับ
alecwh

6
@alecwh: และเรียกเก็บเงินสำหรับการเข้าถึง!
André Caron

3
ฉันได้รับรางวัลให้คุณส่วนหนึ่งเป็นเพราะเว็บจะดีขึ้นมากถ้าทุกเว็บไซต์ทำเช่นนี้ หวังว่ามันจะกลายเป็นเรื่องธรรมดามากขึ้น
JonasCz - Reinstate Monica

1
ทันทีที่คุณทำให้พวกเขาลงทะเบียนใช้บริการพวกเขาจะกลับไปที่ไซต์ปกติ
mplungjan

ฉันเป็นคนหนึ่งที่อยู่ฝั่งตรงข้ามของการสนทนานี้ ฉันสร้างแบบจำลองสำหรับการแสดงบรอดเวย์และต้องขูดข้อมูลทั้งหมดของฉันแทนที่จะเข้าถึงได้อย่างเรียบร้อย
Yaakov Bressler

22

ขออภัยมันค่อนข้างยากที่จะทำเช่นนี้ ...

ฉันขอแนะนำให้คุณอย่างสุภาพขอให้พวกเขาไม่ใช้เนื้อหาของคุณ (หากเนื้อหาของคุณมีลิขสิทธิ์)

หากเป็นและพวกเขาไม่ได้เอาลงคุณสามารถดำเนินการต่อไปและส่งจดหมายหยุดและหยุดยั้งพวกเขาหยุดและหยุดยั้งตัวอักษร

โดยทั่วไปสิ่งที่คุณทำเพื่อป้องกันการขูดอาจเป็นผลลบมากขึ้นเช่นการเข้าถึงบอท / สไปเดอร์ ฯลฯ


12

เอาล่ะอย่างที่ทุกโพสต์บอกว่าถ้าคุณต้องการทำให้มันเป็นมิตรกับระบบค้นหาบอทก็สามารถขูดได้อย่างแน่นอน

แต่คุณยังสามารถทำบางสิ่งบางอย่างและมันอาจจะเป็นอารมณ์สำหรับบอทขูด 60-70%

ทำสคริปต์ตัวตรวจสอบเหมือนด้านล่าง

หากที่อยู่ IP ใดที่หนึ่งกำลังเข้าชมอย่างรวดเร็วหลังจากนั้นไม่กี่ครั้ง (5-10) ให้ใส่ที่อยู่ IP + ข้อมูลเบราว์เซอร์ในไฟล์หรือฐานข้อมูล

ขั้นตอนต่อไป

(นี่จะเป็นกระบวนการพื้นหลังและรันตลอดเวลาหรือกำหนดเวลาหลังจากนั้นไม่กี่นาที) สร้างสคริปต์อื่นที่จะทำการตรวจสอบที่อยู่ IP ที่น่าสงสัยเหล่านั้นต่อไป

กรณีที่ 1. หากตัวแทนผู้ใช้เป็นของเครื่องมือค้นหาที่รู้จักเช่น Google, Bing , Yahoo (คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับตัวแทนผู้ใช้โดย googling) จากนั้นคุณต้องดูhttp://www.iplists.com/ รายการนี้และพยายามจับคู่รูปแบบ และหากดูเหมือนว่าตัวแทนผู้ใช้ที่ปลอมแปลงแล้วขอให้กรอกCAPTCHAในการเยี่ยมชมครั้งต่อไป (คุณต้องค้นคว้าเพิ่มเติมอีกเล็กน้อยเกี่ยวกับที่อยู่ IP ของบอทฉันรู้ว่าสิ่งนี้สามารถทำได้และลองใช้ whois ของที่อยู่ IP ซึ่งจะมีประโยชน์)

กรณีที่ 2 ไม่มีตัวแทนผู้ใช้ของบอทการค้นหา: เพียงแค่ขอให้กรอก CAPTCHA ในครั้งต่อไป


+1 การใช้ iplists.com เป็นแนวคิดที่ยอดเยี่ยม
Daniel Trebbien

10

ตอบช้า - และคำตอบนี้อาจไม่ใช่คำตอบที่คุณต้องการ ...

ตัวฉันเองเขียนแครปเปอร์การทำเหมืองข้อมูลเฉพาะจำนวนมาก (หลายสิบ) (เพียงเพราะฉันชอบปรัชญา "ข้อมูลเปิด")

ต่อไปนี้เป็นคำแนะนำมากมายในคำตอบอื่น ๆ - ตอนนี้ฉันจะเล่นบทบาทผู้สนับสนุนของปีศาจและจะขยายและ / หรือแก้ไขประสิทธิภาพของพวกเขา

ครั้งแรก:

  • ถ้ามีคนต้องการข้อมูลของคุณจริงๆ
  • คุณไม่สามารถซ่อนข้อมูลของคุณได้อย่างมีประสิทธิภาพ
  • ถ้าข้อมูลนั้นควรเข้าถึงได้โดย "ผู้ใช้ปกติ" ของคุณ

การพยายามใช้สิ่งกีดขวางทางเทคนิคบางอย่างนั้นไม่คุ้มกับปัญหาที่เกิดขึ้น:

  • สำหรับผู้ใช้ทั่วไปโดยทำให้ประสบการณ์การใช้งานของผู้ใช้แย่ลง
  • สู่บอตปกติและยินดี (เครื่องมือค้นหา)
  • ฯลฯ ...

HMTL ธรรมดา - วิธีที่ง่ายที่สุดคือการแยกวิเคราะห์หน้า HTML ธรรมดาด้วยโครงสร้างที่กำหนดไว้อย่างดีและคลาส css เช่นมันก็เพียงพอที่จะตรวจสอบองค์ประกอบด้วย Firebug และใช้ Xpaths ที่ถูกต้องและ / หรือเส้นทาง CSS ในมีดโกนของฉัน

คุณสามารถสร้างโครงสร้าง HTML แบบไดนามิกและคุณสามารถสร้าง CSS class-names แบบไดนามิก (และ CSS เองด้วย) (เช่นโดยใช้ชื่อคลาสแบบสุ่มบางส่วน) - แต่

  • คุณต้องการนำเสนอข้อมูลให้กับผู้ใช้ปกติของคุณในลักษณะที่สอดคล้องกัน
  • เช่นอีกครั้ง - ก็เพียงพอที่จะวิเคราะห์โครงสร้างหน้าอีกครั้งเพื่อตั้งค่ามีดโกน
  • และสามารถทำได้โดยอัตโนมัติโดยการวิเคราะห์ "เนื้อหาที่รู้จักแล้ว"
    • เมื่อมีคนรู้แล้ว (โดยการขูดก่อนหน้านี้) เช่น:
    • สิ่งที่มีข้อมูลเกี่ยวกับ "phil collins"
    • พอแสดงหน้า "phil collins" และ (โดยอัตโนมัติ) วิเคราะห์วิธีการจัดโครงสร้างหน้า "วันนี้" :)

คุณไม่สามารถเปลี่ยนโครงสร้างสำหรับการตอบกลับทุกครั้งเนื่องจากผู้ใช้ปกติของคุณจะเกลียดคุณ นอกจากนี้จะทำให้เกิดปัญหามากขึ้นสำหรับคุณ (การบำรุงรักษา) ไม่ใช่สำหรับมีดโกน เส้นทาง XPath หรือ CSS สามารถกำหนดได้โดยสคริปต์การขูดโดยอัตโนมัติจากเนื้อหาที่รู้จัก

Ajax - ยากขึ้นเล็กน้อยในการเริ่มต้น แต่หลายครั้งความเร็วในการขูด :) - ทำไม

เมื่อวิเคราะห์คำขอและคำตอบฉันเพิ่งตั้งค่าพร็อกซีเซิร์ฟเวอร์ของฉันเอง (เขียนเป็นภาษา Perl) และ firefox ของฉันกำลังใช้งานอยู่ แน่นอนเพราะเป็นพร็อกซีของฉันเอง - มันถูกซ่อนไว้อย่างสมบูรณ์ - เซิร์ฟเวอร์เป้าหมายมองว่าเป็นเบราว์เซอร์ปกติ (ดังนั้นไม่มี X-Forwarded-for และส่วนหัวดังกล่าว) จากบันทึกของพร็อกซีส่วนใหญ่จะเป็นไปได้ที่จะกำหนด "ตรรกะ" ของคำขอ ajax เช่นฉันสามารถข้ามการขูด html เกือบทั้งหมดและใช้การตอบสนอง ajax ที่มีโครงสร้างอย่างดี (ส่วนใหญ่อยู่ในรูปแบบ JSON)

ดังนั้นอาแจ็กซ์ไม่ได้ช่วยอะไรมาก ...

บางหน้ามีความซับซ้อนมากขึ้นซึ่งใช้มาก ฟังก์ชั่นจาวาสคริปต์บรรจุ

นี่เป็นไปได้ที่จะใช้วิธีการพื้นฐานสองวิธี:

  • แกะและทำความเข้าใจกับ JS และสร้าง scraper ซึ่งเป็นไปตามลอจิก Javascript (วิธีที่ยาก)
  • หรือ (ควรใช้ด้วยตัวเอง) - เพียงแค่ใช้ Mozilla กับMozreplเพื่อขูด เช่นการขูดจริงจะทำในเบราว์เซอร์ที่เปิดใช้งานจาวาสคริปต์เต็มรูปแบบซึ่งถูกตั้งโปรแกรมให้คลิกไปที่องค์ประกอบที่เหมาะสมและเพิ่งคว้าการตอบสนอง "ถอดรหัส" โดยตรงจากหน้าต่างเบราว์เซอร์

การขูดนั้นช้า (การขูดจะทำเหมือนในเบราว์เซอร์ทั่วไป) แต่ก็เป็นเช่นนั้น

  • ติดตั้งและใช้งานง่ายมาก
  • และเกือบจะเป็นไปไม่ได้ที่จะตอบโต้ :)
  • และจำเป็นต้องใช้ "ความช้า" เพื่อตอบโต้การ "บล็อกการร้องขอ IP ที่เร็วเหมือนกัน"

การกรองตามUser-Agentไม่ได้ช่วยอะไรเลย นักขุดข้อมูลที่จริงจังจะตั้งให้มันถูกต้องในมีดโกนของเขา

ต้องการเข้าสู่ระบบ - ไม่ช่วย วิธีที่ง่ายที่สุดในการเอาชนะ (โดยไม่มีการวิเคราะห์และ / หรือการเขียนสคริปต์การเข้าสู่ระบบโพรโทคอล) เป็นเพียงการเข้าสู่เว็บไซต์ในฐานะผู้ใช้ปกติโดยใช้ Mozilla และหลังจากเรียกใช้เครื่องขูดตาม Mozrepl ...

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

การใช้เฟรมไม่ได้มีประสิทธิภาพมากเช่นกัน สิ่งนี้ถูกใช้โดยบริการภาพยนตร์สดมากมายและไม่ยากที่จะเอาชนะ เฟรมเป็นอีกหนึ่งหน้า HTML / Javascript สิ่งที่จำเป็นในการวิเคราะห์ ... หากข้อมูลมีค่าปัญหา - data-miner จะทำการวิเคราะห์ที่จำเป็น

การ จำกัด IPไม่ได้มีประสิทธิภาพเลย - ที่นี่มีพร็อกซีเซิร์ฟเวอร์สาธารณะมากเกินไปและที่นี่คือ TOR ... :) มันไม่ทำให้การคัดลอกข้อมูลช้าลง (สำหรับคนที่ต้องการข้อมูลของคุณจริงๆ )

ยากมากที่จะขูดข้อมูลที่ซ่อนอยู่ในภาพ (เช่นการแปลงข้อมูลให้เป็นอิมเมจฝั่งเซิร์ฟเวอร์) การใช้ "tesseract" (OCR) ช่วยได้หลายครั้ง แต่โดยสุจริต - ข้อมูลจะต้องคุ้มค่ากับปัญหาของมีดโกน (ซึ่งหลายครั้งไม่คุ้มค่า)

ในอีกด้านหนึ่งผู้ใช้ของคุณจะเกลียดคุณในเรื่องนี้ ตัวเอง (แม้ว่าจะไม่ได้คัดลอก) เว็บไซต์ที่เกลียดชังซึ่งไม่อนุญาตให้คัดลอกเนื้อหาของหน้าลงในคลิปบอร์ด (เพราะข้อมูลอยู่ในภาพหรือ (คนโง่) พยายามที่จะผูกพันกับคลิกขวาเหตุการณ์ Javascript ที่กำหนดเอง: )

ที่ยากที่สุดเป็นเว็บไซต์ที่ใช้จาวาหรือแฟลชและแอปเพล็ใช้รักษาความปลอดภัย httpsขอตัวเองภายใน แต่คิดว่าสองครั้ง - ผู้ใช้ iPhone ของคุณจะมีความสุขแค่ไหน ... ;) ดังนั้นในปัจจุบันมีไซต์น้อยมากที่ใช้พวกเขา ตัวเองบล็อกเนื้อหาแฟลชทั้งหมดในเบราว์เซอร์ของฉัน (ในช่วงการเรียกดูปกติ) - และไม่เคยใช้เว็บไซต์ที่ขึ้นอยู่กับ Flash

เหตุการณ์สำคัญของคุณอาจเป็น ... ดังนั้นคุณสามารถลองใช้วิธีนี้ - แค่จำไว้ - คุณอาจจะหลวมผู้ใช้บางส่วน โปรดจำไว้ว่าไฟล์ SWF บางไฟล์สามารถถอดรหัสได้ ;)

แคปต์ชา (คนดี - เหมือน reCaptcha) ช่วยได้มาก - แต่ผู้ใช้ของคุณจะเกลียดคุณ ... - แค่คิดว่าผู้ใช้ของคุณจะรักคุณได้อย่างไรเมื่อพวกเขาต้องการแก้แคปชาในบางหน้าที่แสดงข้อมูลเกี่ยวกับศิลปินเพลง

อาจไม่จำเป็นต้องดำเนินการต่อ - คุณเข้าสู่รูปภาพแล้ว

ตอนนี้สิ่งที่คุณควรทำ:

เตือนความจำ: แทบจะเป็นไปไม่ได้เลยที่จะซ่อนข้อมูลของคุณหากคุณอยู่ในอีกด้านหนึ่งต้องการเผยแพร่ข้อมูลเหล่านั้น (ด้วยวิธีง่าย ๆ ) แก่ผู้ใช้ทั่วไปของคุณ

ดังนั้น,

  • ทำให้ข้อมูลของคุณสามารถเข้าถึงได้ง่ายโดย API บางตัว
    • ทำให้สามารถเข้าถึงข้อมูลได้ง่าย
    • เช่นนำเซิร์ฟเวอร์ของคุณออกจากการขูด - ดีต่อคุณ
  • ตั้งค่าสิทธิ์การใช้งานที่ถูกต้อง (เช่นต้องอ้างอิงแหล่งที่มา)
  • โปรดจำไว้ว่าข้อมูลจำนวนมากไม่สามารถใช้ลิขสิทธิ์ได้และป้องกันได้ยาก
  • เพิ่มข้อมูลปลอม (ตามที่คุณทำไปแล้ว) และใช้เครื่องมือทางกฎหมาย
    • อย่างที่คนอื่นพูดแล้วส่ง "หยุดและหยุดยั้งจดหมาย"
    • การดำเนินการทางกฎหมายอื่น ๆ (ฟ้องร้องและชอบ) อาจมีค่าใช้จ่ายสูงและยากที่จะชนะ (โดยเฉพาะกับเว็บไซต์ที่ไม่ใช่ของสหรัฐอเมริกา)

คิดให้รอบคอบก่อนที่คุณจะพยายามใช้สิ่งกีดขวางทางเทคนิค

แทนที่จะพยายามบล็อกตัวขุดข้อมูลเพียงเพิ่มความพยายามมากขึ้นในการใช้งานเว็บไซต์ของคุณ ผู้ใช้ของคุณจะรักคุณ เวลา (& พลังงาน) ที่ลงทุนในกำแพงด้านเทคนิคมักไม่คุ้มค่า - ควรใช้เวลาในการสร้างเว็บไซต์ที่ดียิ่งขึ้น ...

นอกจากนี้ขโมยข้อมูลก็ไม่เหมือนขโมยปกติ

หากคุณซื้อสัญญาณเตือนบ้านราคาไม่แพงและเพิ่มคำเตือน "บ้านนี้เชื่อมต่อกับตำรวจ" - ขโมยจำนวนมากจะไม่ได้พยายามบุกเข้าไป เพราะเขาย้ายผิดหนึ่งครั้ง - และเขาจะเข้าคุก ...

ดังนั้นคุณลงทุนเพียงไม่กี่ bucks แต่ขโมยลงทุนและเสี่ยงมาก

แต่ขโมยข้อมูลไม่ได้มีความเสี่ยงดังกล่าว ตรงกันข้ามถ้าคุณทำผิดพลาดไปหนึ่งครั้ง (เช่นถ้าคุณแนะนำ BUG บางส่วนอันเป็นผลมาจากอุปสรรคทางเทคนิค) คุณจะหลวมผู้ใช้ หากบอทที่ขูดไม่ทำงานเป็นครั้งแรกไม่มีอะไรเกิดขึ้น - data-miner จะลองใช้วิธีอื่นและ / หรือจะดีบักสคริปต์

ในกรณีนี้คุณต้องลงทุนมากขึ้นและมีดโกนก็ลงทุนน้อยลง

แค่คิดว่าคุณต้องการลงทุนเวลาและพลังงานของคุณ ...

Ps: ภาษาอังกฤษไม่ใช่ภาษาของฉัน - ดังนั้นให้อภัยภาษาอังกฤษที่เสียของฉัน ...


@Parapluie คุณควรอ่านเกี่ยวกับเนื้อหาฟรีและ / หรือเกี่ยวกับโมเดลโอเพนซอร์ซเกี่ยวกับวันที่ประวัติความเป็นมาเป้าหมายและจริยธรรม และโดยเฉพาะอย่างยิ่งเกี่ยวกับOpen Data - ซึ่งฉันสร้าง scrapers ของฉันส่วนใหญ่ ...
jm666

ฉันเข้าใจแนวคิดนี้แล้ว แต่ฉันขอขอบคุณสำหรับคำแนะนำอันไม่สมควรของคุณ เราอาจมีการสนทนาที่น่าสนใจเกี่ยวกับเรื่องนั้น; แต่ดูเหมือนว่าบุคคลที่สามจะลบความคิดเห็นดั้งเดิมของฉัน และดังนั้นเราเป็นอิสระจริง ๆ หลังจากทั้งหมดหรือไม่
Parapluie

8

จากมุมมองทางเทคโนโลยี: เพียงแค่สร้างแบบจำลองสิ่งที่ Google ทำเมื่อคุณค้นหาด้วยข้อความค้นหาจำนวนมากในคราวเดียว ที่ควรหยุดชะงักไปเยอะเลย

จากมุมมองทางกฎหมาย: ดูเหมือนว่าข้อมูลที่คุณเผยแพร่ไม่ใช่กรรมสิทธิ์ หมายความว่าคุณกำลังเผยแพร่ชื่อและสถิติและข้อมูลอื่น ๆ ที่ไม่สามารถมีลิขสิทธิ์ได้

หากเป็นเช่นนี้ตัวขูดไม่ได้ละเมิดลิขสิทธิ์โดยการแจกจ่ายข้อมูลของคุณเกี่ยวกับชื่อศิลปิน ฯลฯ อย่างไรก็ตามพวกเขาอาจละเมิดลิขสิทธิ์เมื่อพวกเขาโหลดเว็บไซต์ของคุณลงในหน่วยความจำเนื่องจากไซต์ของคุณมีองค์ประกอบที่มีลิขสิทธิ์ (เช่นเลย์เอาต์ ฯลฯ )

ฉันแนะนำให้อ่านเกี่ยวกับ Facebook v. Power.com และดูข้อโต้แย้งที่ Facebook ใช้เพื่อหยุดการคัดลอกหน้าจอ มีวิธีการทางกฎหมายมากมายที่คุณสามารถดำเนินการเกี่ยวกับการพยายามหยุดใครบางคนจากการขูดเว็บไซต์ของคุณ พวกเขาสามารถเข้าถึงและจินตนาการ บางครั้งศาลก็ซื้อข้อโต้แย้ง บางครั้งพวกเขาทำไม่ได้

แต่สมมติว่าคุณกำลังเผยแพร่ข้อมูลโดเมนสาธารณะที่ไม่ได้มีลิขสิทธิ์เช่นชื่อและสถิติพื้นฐาน ... คุณควรปล่อยให้มันอยู่ในชื่อของการพูดฟรีและเปิดข้อมูล นั่นคือสิ่งที่เกี่ยวกับเว็บ


1
แม้ว่าคุณอาจจะไม่สามารถจดลิขสิทธิ์ข้อมูลได้ แต่คุณสามารถใส่ข้อคัดลอกในการใช้งานได้ จากนั้นส่งจดหมายหยุดและหยุดยั้งสำหรับการละเมิดข้อกำหนดการใช้งาน
André Caron

1
การพูดและเปิดข้อมูลฟรีถือเป็นจิตวิญญาณของอินเทอร์เน็ต!
Ciara

ใช่พูดฟรีและทั้งหมด แต่แครปเปอร์อาจเสียงบประมาณหรือแบนด์วิดท์ของ OP จำนวนมากรวมถึงการคัดลอกข้อมูลที่ไม่สามารถให้สิทธิ์ได้
jpaugh

8

สิ่งที่อาจทำงานกับแครปเปอร์มือใหม่:

  • การปิดกั้น IP
  • ใช้อาแจ็กซ์จำนวนมาก
  • ตรวจสอบส่วนหัวคำขอผู้อ้างอิง
  • ต้องเข้าสู่ระบบ

สิ่งที่จะช่วยโดยทั่วไป:

  • เปลี่ยนเค้าโครงของคุณทุกสัปดาห์
  • robots.txt

สิ่งที่จะช่วย แต่จะทำให้ผู้ใช้ของคุณเกลียดคุณ:

  • แจ้งลบความคิดเห็น

8

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

เป็นการแลกเปลี่ยนระหว่างผู้ใช้กับเครื่องขูดของคุณ หากคุณ จำกัด IP ใช้ CAPTCHA ต้องการการเข้าสู่ระบบและอื่น ๆ คุณทำให้เรื่องยากสำหรับแครปเปอร์ แต่สิ่งนี้อาจทำให้ผู้ใช้ของคุณหายไป


8

ตัวเลือกที่ดีที่สุดของคุณนั้นเป็นคู่มือที่ค่อนข้างน่าเสียดาย: มองหารูปแบบการรับส่งข้อมูลที่คุณเชื่อว่าบ่งบอกถึงการคัดลอกและห้ามที่อยู่ IP ของพวกเขา

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


4
การปิดกั้น IP จะทำให้เครื่องขูดช้าลง แต่ก็ทำงานได้ดีกับเซิร์ฟเวอร์ของคุณเช่นกัน สมมติว่าฉันขูดคุณด้วยผู้รับมอบฉันทะ 1,000 รายฉันยังมีข้อมูลที่ฉันต้องการและตอนนี้ไฟร์วอลล์ของคุณรก
pguardiario

1
เมื่อคุณทำเช่นนั้นพวกเขาจะไปในแนวนอนกับคุณ ที่อยู่ 100000 วันนี้ไม่มีค่าใช้จ่ายสำหรับพวกเขา แต่ทำให้ไซต์ของคุณช้าลงหากคุณพยายามที่จะห้ามพวกเขาทั้งหมด - และพวกเขาจะหมุนเวียน IP เพื่อไม่ให้เยี่ยมชมมากกว่าหนึ่งครั้งหรือสองครั้ง
mplungjan

6

แน่นอนมันเป็นไปได้ เพื่อความสำเร็จ 100% ให้ออฟไลน์ไซต์ของคุณ

ในความเป็นจริงคุณสามารถทำบางสิ่งที่ทำให้ขูดเล็ก ๆ น้อย ๆ ที่ยากขึ้น Google ทำการตรวจสอบเบราว์เซอร์เพื่อให้แน่ใจว่าคุณไม่ใช่หุ่นยนต์ที่คัดลอกผลการค้นหา (แม้ว่านี่จะเป็นสิ่งอื่นที่เหมือนกันทุกอย่าง)

คุณสามารถทำสิ่งต่าง ๆ เช่นต้องใช้เวลาหลายวินาทีระหว่างการเชื่อมต่อครั้งแรกกับเว็บไซต์ของคุณและการคลิกที่ตามมา ฉันไม่แน่ใจว่าเวลาที่เหมาะจะเป็นอย่างไรหรือทำอย่างไร แต่เป็นความคิดอื่น

ฉันแน่ใจว่ามีคนอื่นอีกหลายคนที่มีประสบการณ์มากกว่านี้ แต่ฉันหวังว่าความคิดเหล่านั้นมีประโยชน์อย่างน้อย


6

มีบางสิ่งที่คุณสามารถทำได้เพื่อพยายามป้องกันการคัดลอกหน้าจอ บางอย่างไม่ได้ผลมากในขณะที่คนอื่น (CAPTCHA) มี แต่ขัดขวางการใช้งาน คุณต้องจำไว้เช่นกันว่าอาจเป็นอุปสรรคต่อไซต์ที่ถูกกฎหมายเช่นดัชนีเครื่องมือค้นหา

อย่างไรก็ตามฉันคิดว่าถ้าคุณไม่ต้องการคัดลอกมันหมายความว่าคุณไม่ต้องการให้เสิร์ชเอ็นจิ้นจัดทำดัชนีเช่นกัน

นี่คือบางสิ่งที่คุณสามารถลองได้:

  • แสดงข้อความในภาพ สิ่งนี้ค่อนข้างเชื่อถือได้และมีความเจ็บปวดน้อยกว่าผู้ใช้มากกว่า CAPTCHA แต่หมายความว่าพวกเขาจะไม่สามารถตัดและวางได้
  • ใช้ CAPTCHA และกำหนดให้เสร็จก่อนส่งคืนหน้า นี่เป็นวิธีการที่เชื่อถือได้ แต่ยังเป็นความเจ็บปวดที่ใหญ่ที่สุดที่จะกำหนดผู้ใช้
  • กำหนดให้ผู้ใช้ลงทะเบียนบัญชีก่อนดูหน้าและยืนยันที่อยู่อีเมลของพวกเขา สิ่งนี้จะมีประสิทธิภาพ แต่ไม่ทั้งหมด - เครื่องมือขูดหน้าจออาจตั้งค่าบัญชีและอาจตั้งโปรแกรมสคริปต์ให้เข้าสู่ระบบได้อย่างชาญฉลาด
  • หากสตริงตัวแทนผู้ใช้ของลูกค้าว่างเปล่าให้ปิดกั้นการเข้าถึง สคริปต์ไซต์การขูดมักจะตั้งโปรแกรมอย่างขี้เกียจและจะไม่ตั้งค่าสตริงตัวแทนผู้ใช้ในขณะที่เว็บเบราว์เซอร์ทั้งหมดจะ
  • คุณสามารถตั้งค่ารายการสตริงผู้ใช้ตัวแทนเอเจนต์มีดโกนหน้าจอที่รู้จักได้ในขณะที่คุณค้นหาสตริง อีกครั้งนี้จะช่วยให้รหัสที่ขี้เกียจ; โปรแกรมเมอร์ที่รู้ว่าเขากำลังทำอะไรสามารถตั้งค่าสตริงตัวแทนผู้ใช้เพื่อปลอมตัวเป็นเว็บเบราว์เซอร์
  • เปลี่ยนเส้นทาง URL บ่อยครั้ง เมื่อคุณทำการเปลี่ยนแปลงตรวจสอบให้แน่ใจว่าอันเก่านั้นทำงานได้ แต่ตราบใดที่ผู้ใช้รายหนึ่งมีแนวโน้มที่จะเปิดเบราว์เซอร์ ทำให้ยากที่จะคาดการณ์ว่าเส้นทาง URL ใหม่จะเป็นอย่างไร วิธีนี้จะทำให้สคริปต์จับได้ยากหาก URL ของพวกเขาถูกเข้ารหัสไว้ มันเป็นการดีที่สุดที่จะทำสิ่งนี้กับสคริปต์บางประเภท

หากฉันต้องทำสิ่งนี้ฉันอาจใช้ทั้งสามอย่างรวมกันเพราะพวกเขาลดความไม่สะดวกให้กับผู้ใช้ที่ถูกกฎหมาย อย่างไรก็ตามคุณต้องยอมรับว่าคุณจะไม่สามารถปิดกั้นทุกคนด้วยวิธีนี้และเมื่อมีคนรู้วิธีที่จะหลีกเลี่ยงมันพวกเขาจะสามารถขูดมันได้ตลอดไป จากนั้นคุณสามารถลองปิดกั้นที่อยู่ IP ของพวกเขาในขณะที่คุณค้นพบพวกเขาฉันเดา


6
  1. ไม่ไม่สามารถหยุดได้ (ไม่ว่าทางใดทางหนึ่ง)
  2. ยอมรับมัน ทำไมไม่เผยแพร่เป็น RDFa และกลายเป็นเครื่องมือค้นหาขั้นสูงที่เป็นมิตรและกระตุ้นการใช้ข้อมูลซ้ำ ผู้คนจะขอบคุณและให้เครดิตเมื่อถึงกำหนด (ดูตัวอย่าง musicbrainz)

มันไม่ใช่คำตอบที่คุณอาจต้องการ แต่ทำไมซ่อนสิ่งที่คุณพยายามเปิดเผยต่อสาธารณะ


5

วิธีที่หนึ่ง (ไซต์ขนาดเล็กเท่านั้น): ให้
บริการข้อมูลที่เข้ารหัส / เข้ารหัส
ฉัน 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"
}

2

แทนที่จะบอทขึ้นบัญชีดำคุณอาจจะอนุญาตพวกมันในรายการที่ปลอดภัย หากคุณไม่ต้องการที่จะฆ่าผลการค้นหาสำหรับเอ็นจินไม่กี่อันดับแรกคุณสามารถทำรายการที่อนุญาตพิเศษให้กับสตริงตัวแทนผู้ใช้ซึ่งได้รับการเผยแพร่อย่างดี บอตทางจริยธรรมที่น้อยลงมักจะปลอมแปลงสตริงตัวแทนผู้ใช้ของเว็บเบราว์เซอร์ยอดนิยม เสิร์ชเอนจิ้นอันดับสองสามอันดับควรสูงกว่า 95% ของปริมาณการเข้าชม

การระบุบอทนั้นควรตรงไปตรงมาพอสมควรโดยใช้เทคนิคที่ผู้โพสต์คนอื่น ๆ แนะนำไว้


2

วิธีที่รวดเร็วในการนี้ก็คือการตั้งค่ากับดักบูบี /

  1. สร้างหน้าเว็บที่หากเปิดขึ้นมาเป็นระยะเวลาหนึ่งหรือเปิดตลอดเวลาจะรวบรวมข้อมูลบางอย่างเช่น IP และอะไรก็ตาม (คุณสามารถพิจารณาความผิดปกติหรือรูปแบบได้ แต่หน้านี้ไม่ควรเปิดเลย)

  2. ทำลิงค์ไปยังสิ่งนี้ในหน้าของคุณที่ถูกซ่อนไว้ด้วย CSS display: none; หรือซ้าย: -9999px; positon: absolute; พยายามวางไว้ในที่ที่ไม่น่าจะถูกเพิกเฉยเช่นเนื้อหาของคุณอยู่ด้านล่างและไม่ใช่ส่วนท้ายของคุณเพราะบางครั้งบอทสามารถเลือกที่จะลืมบางส่วนของหน้า

  3. ในไฟล์ robots.txt ของคุณตั้งกฎการไม่อนุญาตทั้งกลุ่มไว้ที่หน้าเว็บที่คุณไม่ต้องการบอตที่เป็นมิตร (LOL เหมือนพวกเขามีใบหน้าที่มีความสุข!) เพื่อรวบรวมข้อมูลและตั้งหน้านี้เป็นหนึ่งในนั้น

  4. ทีนี้ถ้าบอทที่เป็นมิตรเข้ามามันควรจะข้ามหน้านั้นไป ใช่ แต่ก็ยังไม่ดีพอ ทำให้หน้าเหล่านี้เพิ่มขึ้นอีกสองสามหน้าหรือเปลี่ยนเส้นทางหน้าใหม่เพื่อยอมรับชื่อ differnt จากนั้นวางกฎการไม่อนุญาตเพิ่มเติมให้กับหน้า Trap เหล่านี้ในไฟล์ robots.txt ของคุณพร้อมกับหน้าที่คุณต้องการข้าม

  5. รวบรวม IP ของบ็อตเหล่านี้หรือใครก็ตามที่เข้ามาในหน้าเหล่านี้ห้ามแบน แต่ทำหน้าที่ในการแสดงข้อความที่ไม่มีข้อความในเนื้อหาของคุณเช่นตัวเลขสุ่มประกาศลิขสิทธิ์สตริงข้อความเฉพาะแสดงภาพที่น่ากลัว เนื้อหาที่ดี คุณสามารถตั้งค่าลิงค์ที่ชี้ไปยังหน้าซึ่งจะใช้เวลาตลอดไปในการโหลดเช่น ใน php คุณสามารถใช้ฟังก์ชั่น sleep () วิธีนี้จะต่อสู้กับซอฟต์แวร์รวบรวมข้อมูลหากมีการตรวจจับบางอย่างเพื่อข้ามหน้าเว็บซึ่งใช้เวลาในการโหลดนานเกินไปเนื่องจากบอตที่เขียนอย่างดีบางตัวถูกตั้งค่าให้ประมวลผลจำนวนลิงก์ X ในแต่ละครั้ง

  6. หากคุณได้กำหนดสตริงข้อความ / ประโยคที่เฉพาะเจาะจงว่าทำไมไม่ไปที่เสิร์ชเอ็นจิ้นที่คุณชื่นชอบและค้นหามันอาจจะแสดงให้คุณทราบว่าเนื้อหาของคุณสิ้นสุดที่ใด

อย่างไรก็ตามถ้าคุณคิดอย่างมีกลยุทธ์และสร้างสรรค์สิ่งนี้อาจเป็นจุดเริ่มต้นที่ดี สิ่งที่ดีที่สุดที่ควรทำคือเรียนรู้วิธีการทำงานของบอท

ฉันยังคิดเกี่ยวกับการ 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"

1
คุณไม่เพียง แต่ต้องการแบนพวกเขา แต่คุณต้องการตะครุบพวกเขาอย่างสมบูรณ์ ... ฉันรักมัน!
Zoidberg

การลักลอบแบนนิ่งเป็นสิ่งที่ฉันคิดอยู่ (อาคา shadowbanning นรกห้าม)
ErikE

1

คุณไม่สามารถหยุดการขูดหน้าจอปกติได้ ดีกว่าหรือแย่กว่านั้นคือลักษณะของเว็บ

คุณสามารถทำให้มันไม่มีใครสามารถเข้าถึงบางสิ่ง (รวมถึงไฟล์เพลง) เว้นแต่ว่าพวกเขาจะเข้าสู่ระบบในฐานะผู้ใช้ที่ลงทะเบียน มันไม่ยากเกินไปที่จะทำใน Apache ฉันคิดว่าคงไม่ยากเกินไปที่จะทำใน IIS เช่นกัน


1

วิธีหนึ่งคือการแสดงเนื้อหาเป็นแอตทริบิวต์ XML, สตริงที่เข้ารหัส URL, ข้อความที่จัดรูปแบบล่วงหน้าด้วย JSON ที่เข้ารหัส HTML หรือ URI ข้อมูลจากนั้นแปลงเป็น HTML บนไคลเอนต์ นี่คือบางเว็บไซต์ที่ทำสิ่งนี้:

  • Skechers : XML

    <document 
     filename="" 
     height="" 
     width="" 
     title="SKECHERS" 
     linkType="" 
     linkUrl="" 
     imageMap="" 
     href=&quot;http://www.bobsfromskechers.com&quot; 
     alt=&quot;BOBS from Skechers&quot; 
     title=&quot;BOBS from Skechers&quot; 
    />
  • 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>
       {&quot;tiddlers&quot;: 
        {
        &quot;GettingStarted&quot;: 
          {
          &quot;title&quot;: &quot;GettingStarted&quot;,
          &quot;text&quot;: &quot;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>

หากคุณดูที่มาของข้อมูลใด ๆ ข้างต้นคุณจะเห็นว่าการคัดลอกจะส่งคืนข้อมูลเมตาและการนำทาง


ดังนั้น ... วิธีการดังกล่าวทำให้การขูดทำได้ง่ายขึ้นเนื่องจากเนื้อหาอยู่ในรูปแบบที่สม่ำเสมอ ในความเป็นจริงมันจะไม่ถูกเรียกว่าการขูดอีกต่อไป: มันเรียกว่าการแยกวิเคราะห์และง่ายมากที่จะเขียนโปรแกรม
jpaugh

1

ส่วนใหญ่มีการพูดไปแล้ว แต่คุณได้พิจารณาการป้องกัน CloudFlare หรือไม่ ฉันหมายถึงสิ่งนี้:

คำอธิบายภาพ

บริษัท อื่นอาจทำเช่นนี้ CloudFlare เป็น บริษัท เดียวที่ฉันรู้

ฉันค่อนข้างแน่ใจว่ามันจะทำให้งานของพวกเขาซับซ้อนขึ้น ฉันยังได้รับแบน IP โดยอัตโนมัติเป็นเวลา 4 เดือนเมื่อฉันพยายามที่จะคัดลอกข้อมูลของไซต์ที่ป้องกันโดย CloudFlare เนื่องจากอัตรา จำกัด


1

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


0

การวางเนื้อหาของคุณไว้ด้านหลังแคปช่าอาจหมายถึงว่าโรบ็อตอาจพบว่ายากที่จะเข้าถึงเนื้อหาของคุณ อย่างไรก็ตามมนุษย์จะไม่สะดวกดังนั้นอาจไม่เป็นที่ต้องการ


0

หากคุณต้องการที่จะเห็นเป็นตัวอย่างที่ดีให้ตรวจสอบhttp://www.bkstr.com/ พวกเขาใช้อัลกอริทึม aj / s เพื่อตั้งค่าคุกกี้จากนั้นโหลดหน้าซ้ำเพื่อให้สามารถใช้คุกกี้เพื่อตรวจสอบว่าคำขอกำลังทำงานอยู่ในเบราว์เซอร์ แอปเดสก์ท็อปที่สร้างขึ้นเพื่อขูดสามารถทำได้โดยแน่นอน แต่มันจะหยุดการขูดประเภท cURL ส่วนใหญ่


0

เครื่องขูดหน้าจอทำงานโดยการประมวลผล HTML และหากพวกเขามุ่งมั่นที่จะรับข้อมูลของคุณมีไม่มากที่คุณสามารถทำได้ในทางเทคนิคเพราะลูกตามนุษย์ประมวลผลอะไร ถูกต้องตามกฎหมายแล้วชี้ให้เห็นว่าคุณอาจมีการขอความช่วยเหลือบางส่วนและนั่นจะเป็นคำแนะนำของฉัน

อย่างไรก็ตามคุณสามารถซ่อนส่วนที่สำคัญของข้อมูลของคุณโดยใช้ตรรกะการนำเสนอที่ไม่ใช่ HTML

  • สร้างไฟล์Flashสำหรับศิลปิน / อัลบั้มแต่ละคน ฯลฯ
  • สร้างภาพสำหรับเนื้อหาศิลปินแต่ละรายการ อาจจะเป็นแค่ภาพสำหรับชื่อศิลปิน ฯลฯ ก็เพียงพอแล้ว ทำได้โดยการแสดงข้อความไปยังไฟล์ JPEG / PNGบนเซิร์ฟเวอร์และเชื่อมโยงไปยังภาพนั้น

โปรดทราบว่าสิ่งนี้อาจส่งผลต่อการจัดอันดับการค้นหาของคุณ


0

สร้าง HTML, CSS และ JavaScript การเขียนตัวสร้างจะง่ายกว่าตัวแยกวิเคราะห์ดังนั้นคุณสามารถสร้างแต่ละหน้าที่แสดงแตกต่างกันได้ คุณไม่สามารถใช้แคชหรือเนื้อหาคงที่ได้อีกต่อไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.