Python Web Scraping - เว็บไซต์แบบฟอร์ม
ในบทที่แล้วเราได้เห็นการขูดเว็บไซต์แบบไดนามิก ในบทนี้ให้เราทำความเข้าใจเกี่ยวกับการคัดลอกเว็บไซต์ที่ทำงานโดยใช้อินพุตจากผู้ใช้นั่นคือเว็บไซต์ที่ใช้รูปแบบ
บทนำ
ทุกวันนี้ WWW (เวิลด์ไวด์เว็บ) กำลังก้าวไปสู่โซเชียลมีเดียและเนื้อหาที่ผู้ใช้สร้างขึ้น จึงเกิดคำถามว่าเราจะเข้าถึงข้อมูลประเภทที่อยู่นอกเหนือจากหน้าจอล็อกอินได้อย่างไร? สำหรับสิ่งนี้เราจำเป็นต้องจัดการกับแบบฟอร์มและการเข้าสู่ระบบ
ในบทก่อนหน้านี้เราได้ใช้เมธอด HTTP GET เพื่อขอข้อมูล แต่ในบทนี้เราจะทำงานร่วมกับวิธี HTTP POST ที่ส่งข้อมูลไปยังเว็บเซิร์ฟเวอร์เพื่อจัดเก็บและวิเคราะห์
การโต้ตอบกับแบบฟอร์มการเข้าสู่ระบบ
ในขณะที่ทำงานบนอินเทอร์เน็ตคุณต้องโต้ตอบกับแบบฟอร์มการเข้าสู่ระบบหลายครั้ง อาจจะง่ายมากเช่นใส่ช่อง HTML เพียงไม่กี่ช่องปุ่มส่งและหน้าการดำเนินการหรืออาจซับซ้อนและมีช่องเพิ่มเติมเช่นอีเมลฝากข้อความไว้พร้อมกับ captcha เพื่อความปลอดภัย
ในส่วนนี้เราจะจัดการกับแบบฟอร์มการส่งแบบธรรมดาด้วยความช่วยเหลือของไลบรารีคำขอ Python
ขั้นแรกเราต้องนำเข้าไลบรารีคำขอดังนี้ -
import requests
ตอนนี้เราจำเป็นต้องให้ข้อมูลสำหรับฟิลด์ของแบบฟอร์มการเข้าสู่ระบบ
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
ในบรรทัดถัดไปของโค้ดเราจำเป็นต้องระบุ URL ที่จะเกิดการทำงานของแบบฟอร์ม
r = requests.post(“enter the URL”, data = parameters)
print(r.text)
หลังจากเรียกใช้สคริปต์สคริปต์จะส่งคืนเนื้อหาของหน้าที่มีการดำเนินการเกิดขึ้น
สมมติว่าคุณต้องการส่งภาพใด ๆ พร้อมแบบฟอร์มก็ทำได้ง่ายมากโดยใช้ request.post () คุณสามารถเข้าใจได้ด้วยความช่วยเหลือของการทำตามสคริปต์ Python -
import requests
file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)}
r = requests.post(“enter the URL”, files = file)
print(r.text)
กำลังโหลดคุกกี้จากเว็บเซิร์ฟเวอร์
คุกกี้บางครั้งเรียกว่าคุกกี้เว็บหรือคุกกี้อินเทอร์เน็ตเป็นข้อมูลชิ้นเล็ก ๆ ที่ส่งมาจากเว็บไซต์และคอมพิวเตอร์ของเราเก็บไว้ในไฟล์ที่อยู่ในเว็บเบราว์เซอร์ของเรา
ในบริบทของการติดต่อกับแบบฟอร์มการเข้าสู่ระบบคุกกี้สามารถมีได้สองประเภท หนึ่งเราจัดการในส่วนก่อนหน้านี้ที่อนุญาตให้เราส่งข้อมูลไปยังเว็บไซต์และอย่างที่สองซึ่งช่วยให้เราอยู่ในสถานะ“ เข้าสู่ระบบ” แบบถาวรตลอดการเยี่ยมชมเว็บไซต์ สำหรับรูปแบบที่สองเว็บไซต์จะใช้คุกกี้เพื่อติดตามว่าใครเข้าสู่ระบบและใครไม่ใช่ใคร
คุกกี้ทำอะไร?
ทุกวันนี้เว็บไซต์ส่วนใหญ่ใช้คุกกี้ในการติดตาม เราสามารถเข้าใจการทำงานของคุกกี้ด้วยความช่วยเหลือของขั้นตอนต่อไปนี้ -
Step 1- ขั้นแรกไซต์จะตรวจสอบข้อมูลรับรองการเข้าสู่ระบบของเราและเก็บไว้ในคุกกี้ของเบราว์เซอร์ของเรา โดยทั่วไปคุกกี้นี้จะมีข้อมูลโทคการหมดเวลาและการติดตามที่สร้างโดยเซิร์ฟเวอร์
Step 2- ต่อไปเว็บไซต์จะใช้คุกกี้เป็นหลักฐานการรับรองความถูกต้อง การรับรองความถูกต้องนี้จะแสดงเสมอทุกครั้งที่เราเยี่ยมชมเว็บไซต์
คุกกี้เป็นปัญหาอย่างมากสำหรับผู้คัดลอกเว็บเนื่องจากหากเครื่องขูดเว็บไม่ติดตามคุกกี้แบบฟอร์มที่ส่งจะถูกส่งกลับไปและในหน้าถัดไปดูเหมือนว่าจะไม่เคยเข้าสู่ระบบการติดตามคุกกี้ทำได้ง่ายมากด้วยความช่วยเหลือของ Python requests ห้องสมุดดังที่แสดงด้านล่าง -
import requests
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = requests.post(“enter the URL”, data = parameters)
ในบรรทัดโค้ดด้านบน URL จะเป็นหน้าที่ทำหน้าที่เป็นตัวประมวลผลสำหรับฟอร์มล็อกอิน
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
หลังจากเรียกใช้สคริปต์ข้างต้นเราจะดึงคุกกี้จากผลลัพธ์ของคำขอล่าสุด
มีปัญหาอื่นเกี่ยวกับคุกกี้ที่บางครั้งเว็บไซต์มักแก้ไขคุกกี้โดยไม่มีการเตือน สถานการณ์แบบนี้สามารถจัดการได้requests.Session() ดังต่อไปนี้ -
import requests
session = requests.Session()
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = session.post(“enter the URL”, data = parameters)
ในบรรทัดโค้ดด้านบน URL จะเป็นหน้าที่ทำหน้าที่เป็นตัวประมวลผลสำหรับฟอร์มล็อกอิน
print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)
สังเกตว่าคุณสามารถเข้าใจความแตกต่างระหว่างสคริปต์ที่มีเซสชันและไม่มีเซสชันได้อย่างง่ายดาย
สร้างแบบฟอร์มอัตโนมัติด้วย Python
ในส่วนนี้เราจะจัดการกับโมดูล Python ชื่อ Mechanize ซึ่งจะลดงานของเราและทำให้ขั้นตอนการกรอกแบบฟอร์มเป็นไปโดยอัตโนมัติ
กลไกโมดูล
โมดูล Mechanize มอบอินเทอร์เฟซระดับสูงสำหรับการโต้ตอบกับแบบฟอร์ม ก่อนเริ่มใช้งานเราจำเป็นต้องติดตั้งด้วยคำสั่งต่อไปนี้ -
pip install mechanize
โปรดทราบว่าจะใช้ได้เฉพาะใน Python 2.x.
ตัวอย่าง
ในตัวอย่างนี้เราจะดำเนินการกรอกแบบฟอร์มเข้าสู่ระบบโดยอัตโนมัติโดยมีสองช่อง ได้แก่ อีเมลและรหัสผ่าน -
import mechanize
brwsr = mechanize.Browser()
brwsr.open(Enter the URL of login)
brwsr.select_form(nr = 0)
brwsr['email'] = ‘Enter email’
brwsr['password'] = ‘Enter password’
response = brwsr.submit()
brwsr.submit()
โค้ดด้านบนเข้าใจง่ายมาก ขั้นแรกเรานำเข้าโมดูลเครื่องจักรกล จากนั้นวัตถุเบราว์เซอร์ Mechanize ถูกสร้างขึ้น จากนั้นเราไปที่ URL การเข้าสู่ระบบและเลือกแบบฟอร์ม หลังจากนั้นชื่อและค่าจะถูกส่งไปยังวัตถุเบราว์เซอร์โดยตรง