การเข้าสู่ระบบเว็บไซต์ด้วย Python

Logging Into Websites With Python



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

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







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



สิ่งนี้จะทำได้ด้วยไลบรารี Requests และ BeautifulSoup Python นอกเหนือจากไลบรารี Python เหล่านั้น คุณจะต้องมีเบราว์เซอร์ที่ดี เช่น Google Chrome หรือ Mozilla Firefox เนื่องจากจะมีความสำคัญสำหรับการวิเคราะห์เบื้องต้นก่อนที่จะเขียนโค้ด



ไลบรารี Requests และ BeautifulSoup สามารถติดตั้งได้ด้วยคำสั่ง pip จากเทอร์มินัลดังที่แสดงด้านล่าง:





คำขอติดตั้ง pip
pip ติดตั้ง BeautifulSoup4

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

จากนั้นนำเข้าทั้งสองไลบรารี:



นำเข้าคำขอ
จากbs4นำเข้าซุปที่สวยงาม

การนำเข้าจะสำเร็จหากไม่มีข้อผิดพลาด

กระบวนการ

การเข้าสู่ระบบเว็บไซต์ด้วยสคริปต์ต้องใช้ความรู้เกี่ยวกับ HTML และแนวคิดเกี่ยวกับวิธีการทำงานของเว็บ มาดูกันสั้น ๆ ว่าเว็บทำงานอย่างไร

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

เมื่อคุณพยายามเปิดเว็บไซต์ผ่านลิงก์ คุณกำลังส่งคำขอไปยังฝั่งเซิร์ฟเวอร์เพื่อเรียกไฟล์ HTML และไฟล์สแตติกอื่นๆ เช่น CSS และ JavaScript คำขอนี้เรียกว่าคำขอ GET อย่างไรก็ตาม เมื่อคุณกรอกแบบฟอร์ม อัปโหลดไฟล์สื่อหรือเอกสาร สร้างโพสต์ และคลิกปุ่มส่ง แสดงว่าคุณกำลังส่งข้อมูลไปยังฝั่งเซิร์ฟเวอร์ คำขอนี้เรียกว่าคำขอ POST

การทำความเข้าใจแนวคิดทั้งสองนี้จะมีความสำคัญเมื่อเขียนสคริปต์ของเรา

การตรวจสอบเว็บไซต์

เพื่อฝึกฝนแนวคิดของบทความนี้ เราจะใช้ คำคมเพื่อขูด เว็บไซต์.

การเข้าสู่ระบบเว็บไซต์ต้องใช้ข้อมูล เช่น ชื่อผู้ใช้และรหัสผ่าน

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

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

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

ต่อไป เราต้องรู้ว่ามีพารามิเตอร์อื่นๆ ที่มีความสำคัญต่อการเข้าสู่ระบบหรือไม่ มาอธิบายเรื่องนี้กันอย่างรวดเร็ว เพื่อเพิ่มความปลอดภัยของเว็บไซต์ โทเค็นมักจะถูกสร้างขึ้นเพื่อป้องกันการโจมตี Cross Site Forgery

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

เราจะต้องใช้แท็บเครือข่าย หากต้องการใช้แท็บนี้ใน Google Chrome หรือ Mozilla Firefox ให้เปิดเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์แล้วคลิกแท็บเครือข่าย

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

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

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

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

รหัส

ประการแรก เราต้องใช้คำขอและ BeautifulSoup เพื่อเข้าถึงเนื้อหาหน้าของหน้าเข้าสู่ระบบ

จากคำขอนำเข้าการประชุม
จากbs4นำเข้าซุปที่สวยงามเช่นbs

กับการประชุม() เช่นNS:
งาน =NS.รับ('http://quotes.toscrape.com/login')
พิมพ์(งาน.เนื้อหา)

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

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

จากคำขอนำเข้าการประชุม
จากbs4นำเข้าซุปที่สวยงามเช่นbs

กับการประชุม() เช่นNS:
งาน =NS.รับ('http://quotes.toscrape.com/login')
bs_content=bs(งาน.เนื้อหา, 'html.parser')
โทเค็น =bs_content.หา('ป้อนข้อมูล', {'ชื่อ':'csrf_token'})['ค่า']
เข้าสู่ระบบ_data= {'ชื่อผู้ใช้':'ผู้ดูแลระบบ','รหัสผ่าน':'12345', 'csrf_token':โทเค็น}
NS.โพสต์('http://quotes.toscrape.com/login',เข้าสู่ระบบ_data)
home_page=NS.รับ('http://quotes.toscrape.com')
พิมพ์(หน้าแรก_เพจเนื้อหา)

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

มาดูโค้ดแต่ละบรรทัดกัน

จากคำขอนำเข้าการประชุม
จากbs4นำเข้าซุปที่สวยงามเช่นbs

บรรทัดของรหัสด้านบนใช้เพื่อนำเข้าวัตถุเซสชันจากไลบรารีการร้องขอและวัตถุ BeautifulSoup จากไลบรารี bs4 โดยใช้นามแฝงของ bs .

กับการประชุม() เช่นNS:

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

bs_content=bs(งาน.เนื้อหา, 'html.parser')
โทเค็น =bs_content.หา('ป้อนข้อมูล', {'ชื่อ':'csrf_token'})['ค่า']

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

เข้าสู่ระบบ_data= {'ชื่อผู้ใช้':'ผู้ดูแลระบบ','รหัสผ่าน':'12345', 'csrf_token':โทเค็น}
NS.โพสต์('http://quotes.toscrape.com/login',เข้าสู่ระบบ_data)

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

NS โพสต์ ใช้สำหรับส่งคำขอโพสต์พร้อมพารามิเตอร์และเข้าสู่ระบบเรา

home_page=NS.รับ('http://quotes.toscrape.com')
พิมพ์(หน้าแรก_เพจเนื้อหา)

หลังจากการเข้าสู่ระบบ บรรทัดของรหัสด้านบนนี้เพียงแค่ดึงข้อมูลจากหน้าเพื่อแสดงว่าการเข้าสู่ระบบสำเร็จ

บทสรุป

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

สิ่งที่สำคัญที่สุดในทั้งหมดนี้คือความรู้เกี่ยวกับ HTML, คำขอ, BeautifulSoup และความสามารถในการทำความเข้าใจข้อมูลที่ได้รับจากแท็บเครือข่ายของเครื่องมือสำหรับนักพัฒนาของเว็บเบราว์เซอร์ของคุณ