Các hướng dẫn quét web đã được đề cập trước đây, do đó, hướng dẫn này chỉ đề cập đến khía cạnh truy cập vào các trang web bằng cách đăng nhập bằng mã thay vì thực hiện thủ công bằng cách sử dụng trình duyệt
Để hiểu hướng dẫn này và có thể viết các kịch bản để đăng nhập vào các trang web, bạn cần có một số hiểu biết về HTML. Có thể không đủ để xây dựng các trang web tuyệt vời, nhưng đủ để hiểu cấu trúc của một trang web cơ bản
Cài đặtĐiều này sẽ được thực hiện với các thư viện Requests và BeautifulSoup Python. Ngoài các thư viện Python đó, bạn sẽ cần một trình duyệt tốt như Google Chrome hoặc Mozilla Firefox vì chúng rất quan trọng để phân tích ban đầu trước khi viết mã
Các thư viện Yêu cầu và BeautifulSoup có thể được cài đặt bằng lệnh pip từ thiết bị đầu cuối như bên dưới
yêu cầu cài đặt pip
pip cài đặt BeautifulSoup4
Để xác nhận sự thành công của quá trình cài đặt, hãy kích hoạt trình bao tương tác của Python, thao tác này được thực hiện bằng cách nhập python vào thiết bị đầu cuối
Sau đó nhập cả hai thư viện
nhập yêu cầu
từ bs4 nhập BeautifulSoup
Quá trình nhập thành công nếu không có lỗi
Quá trình
Đăng nhập vào một trang web bằng tập lệnh yêu cầu kiến thức về HTML và ý tưởng về cách thức hoạt động của trang web. Hãy xem xét ngắn gọn cách thức hoạt động của web
Các trang web được tạo thành từ hai phần chính, phía máy khách và phía máy chủ. Phía máy khách là một phần của trang web mà người dùng tương tác, trong khi phía máy chủ là một phần của trang web nơi logic nghiệp vụ và các hoạt động máy chủ khác như truy cập cơ sở dữ liệu được thực thi
Khi bạn thử mở một trang web thông qua liên kết của nó, bạn đang yêu cầu phía máy chủ tìm nạp cho bạn các tệp HTML và các tệp tĩnh khác như CSS và JavaScript. Yêu cầu này được gọi là yêu cầu GET. Tuy nhiên, khi bạn đang điền vào biểu mẫu, tải lên tệp phương tiện hoặc tài liệu, tạo bài đăng và nhấp vào nút gửi, giả sử bạn đang gửi thông tin đến phía máy chủ. Yêu cầu này được gọi là yêu cầu POST
Việc hiểu hai khái niệm đó sẽ rất quan trọng khi viết kịch bản của chúng tôi
Kiểm tra trang web
Để thực hành các khái niệm của bài viết này, chúng tôi sẽ sử dụng trang web Quotes To Scrape
Đăng nhập vào các trang web yêu cầu thông tin như tên người dùng và mật khẩu
Tuy nhiên, vì trang web này chỉ được sử dụng như một bằng chứng về khái niệm, mọi thứ đều ổn. Do đó, chúng tôi sẽ sử dụng quản trị viên làm tên người dùng và 12345 làm mật khẩu
Đầu tiên, điều quan trọng là phải xem nguồn trang vì điều này sẽ cung cấp tổng quan về cấu trúc của trang web. Điều này có thể được thực hiện bằng cách nhấp chuột phải vào trang web và nhấp vào “Xem nguồn trang”. Tiếp theo, bạn kiểm tra biểu mẫu đăng nhập. Bạn làm điều này bằng cách nhấp chuột phải vào một trong các hộp đăng nhập và nhấp vào kiểm tra phần tử. Khi kiểm tra phần tử, bạn sẽ thấy các thẻ đầu vào và sau đó là thẻ biểu mẫu gốc ở đâu đó phía trên nó. Điều này cho thấy rằng các thông tin đăng nhập về cơ bản là các biểu mẫu được đăng lên phía máy chủ của trang web
Bây giờ, lưu ý thuộc tính tên của các thẻ đầu vào cho hộp tên người dùng và mật khẩu, chúng sẽ cần thiết khi viết mã. Đối với trang web này, thuộc tính tên cho tên người dùng và mật khẩu lần lượt là tên người dùng và mật khẩu
Tiếp theo, chúng ta phải biết liệu có các tham số khác quan trọng để đăng nhập hay không. Hãy nhanh chóng giải thích điều này. Để tăng tính bảo mật của các trang web, mã thông báo thường được tạo để ngăn chặn các cuộc tấn công giả mạo trang web chéo
Do đó, nếu những mã thông báo đó không được thêm vào yêu cầu POST thì đăng nhập sẽ không thành công. Vì vậy, làm thế nào để chúng ta biết về các thông số như vậy?
Chúng tôi sẽ cần sử dụng tab Mạng. Để có được tab này trên Google Chrome hoặc Mozilla Firefox, hãy mở Công cụ dành cho nhà phát triển và nhấp vào tab Mạng
Khi bạn đang ở trong tab mạng, hãy thử làm mới trang hiện tại và bạn sẽ nhận thấy các yêu cầu đến. Bạn nên cố gắng coi chừng các yêu cầu POST được gửi khi chúng tôi thử đăng nhập
Đây là những gì chúng tôi sẽ làm tiếp theo, trong khi mở tab Mạng. Nhập chi tiết đăng nhập và thử đăng nhập, yêu cầu đầu tiên bạn thấy phải là yêu cầu POST
Nhấp vào yêu cầu POST và xem các tham số biểu mẫu. Bạn sẽ nhận thấy trang web có tham số csrf_token có giá trị. Giá trị đó là một giá trị động, do đó, chúng tôi cần nắm bắt các giá trị đó bằng cách sử dụng yêu cầu GET trước khi sử dụng yêu cầu POST
Đối với các trang web khác mà bạn sẽ làm việc, có thể bạn không thấy csrf_token nhưng có thể có các mã thông báo khác được tạo động. Theo thời gian, bạn sẽ hiểu rõ hơn về các tham số thực sự quan trọng khi thực hiện đăng nhập
Mật mã
Đầu tiên, chúng ta cần sử dụng Requests và BeautifulSoup để truy cập vào nội dung trang của trang đăng nhập
từ nhập phiên
từ bs4 import BeautifulSoup as bs
with Session[] as s:
trang web = s. lấy["http. //dấu ngoặc kép. để cạo. com/login"]
in[site.nội dung]
Điều này sẽ in ra nội dung của trang đăng nhập trước khi chúng tôi đăng nhập và nếu bạn tìm kiếm từ khóa “Đăng nhập”. Từ khóa sẽ được tìm thấy trong nội dung trang cho thấy chúng tôi chưa đăng nhập
Tiếp theo, chúng tôi sẽ tìm kiếm từ khóa csrf_token được tìm thấy như một trong các tham số khi sử dụng tab mạng trước đó. Nếu từ khóa hiển thị khớp với thẻ đầu vào, thì giá trị có thể được trích xuất mỗi khi bạn chạy tập lệnh bằng BeautifulSoup
từ nhập phiên
từ bs4 import BeautifulSoup as bs
with Session[] as s:
trang web = s. lấy["http. //dấu ngoặc kép. để cạo. com/login"]
bs_content = bs [site.nội dung, "html. trình phân tích cú pháp"]
mã thông báo = . tìm["đầu vào", {"name":"csrf_token"}]["value"]
login_data = {"username":"quản trị","mật khẩu" . "12345", "csrf_token" . mã thông báo}
s. đăng["http. //dấu ngoặc kép. để cạo. com/login", login_data ]
home_page = s.lấy["http. //dấu ngoặc kép. để cạo. com"]
in[ . nội dung]
Thao tác này sẽ in nội dung của trang sau khi đăng nhập và nếu bạn tìm kiếm từ khóa “Đăng xuất”. Từ khóa sẽ được tìm thấy trong nội dung trang cho thấy rằng chúng tôi đã có thể đăng nhập thành công
Hãy xem xét từng dòng mã
từ nhập phiên
từ bs4 import BeautifulSoup as bs
Các dòng mã trên được sử dụng để nhập đối tượng Phiên từ thư viện yêu cầu và đối tượng BeautifulSoup từ thư viện bs4 bằng bí danh bs
với Phiên [] như s:
Phiên yêu cầu được sử dụng khi bạn có ý định giữ ngữ cảnh của yêu cầu, do đó, cookie và tất cả thông tin của phiên yêu cầu đó có thể được lưu trữ
bs_content = bs [trang web.nội dung, "html. trình phân tích cú pháp"]
mã thông báo = bs_content. tìm["đầu vào", {"name":"csrf_token"}]["value"]
Mã này ở đây sử dụng thư viện BeautifulSoup để có thể trích xuất csrf_token từ trang web rồi gán cho biến mã thông báo. Bạn có thể tìm hiểu về trích xuất dữ liệu từ các nút bằng BeautifulSoup
login_data = {"tên người dùng" . "quản trị","mật khẩu" . "12345", "csrf_token" . mã thông báo}
s. bài đăng["http. //dấu ngoặc kép. để cạo. com/login", login_data ]
Mã ở đây tạo một từ điển các tham số được sử dụng để đăng nhập. Các khóa của từ điển là thuộc tính tên của các thẻ đầu vào và các giá trị là thuộc tính giá trị của các thẻ đầu vào
Phương thức đăng được sử dụng để gửi yêu cầu đăng với các tham số và đăng nhập cho chúng tôi
home_page = s. lấy["http. //dấu ngoặc kép. để cạo. com"]
in[ home_page. nội dung]
Sau khi đăng nhập, những dòng mã trên chỉ cần trích xuất thông tin từ trang để cho biết rằng đăng nhập đã thành công
Phần kết luận
Quá trình đăng nhập vào các trang web bằng Python khá dễ dàng, tuy nhiên việc thiết lập các trang web không giống nhau nên một số trang sẽ khó đăng nhập hơn các trang khác. Còn nhiều việc có thể làm để vượt qua mọi thử thách đăng nhập mà bạn gặp phải
Điều quan trọng nhất trong tất cả những điều này là kiến thức về HTML, Yêu cầu, BeautifulSoup và khả năng hiểu thông tin nhận được từ tab Mạng trong Công cụ dành cho nhà phát triển của trình duyệt web của bạn