Xử lí logins và cookies
Trước đây, chúng ta đã thảo luận về forms cái cho phép bạn đệ trình thông tin tới một site hay để bạn xem thông
tin được cần trên trang ngay lập tức sau form. Cái này khác nhau như thế nào so với một login form, cái để
bạn tồn tại trong một trạng thái logged in ổn định xuyên suốt ghé thăm của bạn tới site?
Hầu hết các websites hiện đại sử dụng cookies để theo dấu ai đã log vào và ai không. Sau khi một site xác thực
login credentials của bạn, nó lưu giữ chúng trong cookie của trình duyệt của bạn, cái thường chứa một token
do máy chủ khởi tạo, timeout, và thông tin theo dấu. Site sau đó sử dụng cookie này như loại bằng chứng xác
thực, cái được thể hiện đối với mỗi trang bạn ghé thăm suốt thời gian của bạn trên site. Trước sử dụng rộng rãi
cookies giữa năm 90s, giữ người dùng an toàn xác thực và theo dấu họ là một vấn đề lớn cho các websites.
Mặc dù, cookies là một giải pháp cực tốt cho các nhà phát triển web, chúng có thể là vấn đề cho các web scrapers.
Bạn có thể đệ trình một login form dài một ngày, nhưng bạn không theo dấu cookie form gửi quay trở lại bạn sau
đó, trang tiếp theo bạn ghé thăm sẽ là hành động như thể bạn chưa bao giờ log vào chút nào.
Tôi đã tạo một login form đơn giản tại http://pythonscraping.com/pages/cookies/login.html (username có thể là
bất cứ gì, password là “password”). Form này được xử lí tại http://pythonscraping.com/pages/cookies/welcome.php
cái chứa một link tới trang chính, http://pythonscraping.com/pages/cookies/profile.php.
Nếu bạn thử truy cập welcome page hay profile page mà không log vào trước, bạn sẽ nhận một thông điệp lỗi và
các hướng dẫn đểl log vào trước tiên trước khi tiếp tục. Trên profile page, một kiểm tra được thực hiện trên
cookies trình duyệt của bạn để xem liệu cookie của nó đã được thiết lập trên login page.
Theo dấu cookies là dễ với thư viện Requests:
import requests
params = {‘username’: ‘Ryan’, ‘password’: ‘password’}
r = requests.post(
‘https://pythonscraping.com/pages/cookies/welcome.php’,
params)
print(r.text)
print(‘Cookie is set to:’)
print(r.cookies.get_dict())
print(‘Going to profile page…’)
r = requests.get(‘https://pythonscraping.com/pages/cookies/profile.php’,
cookies=r.cookies)
print(r.text)