Chú ý quan trọng: Nội dung khóa học chỉ dành cho mục đích học tập, nghiên cứu và trao đổi công nghệ. Tất cả các hoạt động thử nghiệm phải được thực hiện trên các nguồn tài nguyên mạng đã được ủy quyền hoặc công khai.
- Không được phép thu thập dữ liệu hoặc thực hiện tự động hóa trên các trang web hoặc hệ thống không có sự chấp thuận.
- Không sử dụng các kỹ thuật đã học vào bất kỳ mục đích bất hợp pháp hoặc vì lợi ích thương mại.
- Tuân thủ các quy định của tệp
robots.txt
và điều khoản người dùng của trang web đích. - Kiểm soát hợp lý tần suất yêu cầu để tránh gây áp lực quá lớn lên máy chủ đích (tấn công DDoS).
Tất cả các hậu quả pháp lý phát sinh từ việc lạm dụng công nghệ sẽ do người sử dụng chịu trách nhiệm hoàn toàn.
Giới thiệu: Chúng ta sẽ khám phá điều gì hôm nay?
- Bot thu thập dữ liệu Python (Web Crawler/Spider): Một “người thợ mỏ dữ liệu” tự động giúp bạn lấy thông tin từ internet.
- Kịch bản tự động hóa (Automation Script/Bot): Một “trợ lý thông minh” mô phỏng hành động của con người để hoàn thành các nhiệm vụ lặp đi lặp lại.
- Sự liên kết và khác biệt giữa hai công cụ này.
- Tại sao Python lại là một công cụ iwin68 club mạnh mẽ để triển khai những tính năng này?
Khái niệm về Bot thu thập dữ liệu Python là gì?
- Định nghĩa: Đây là chương trình hoặc kịch bản được viết bằng ngôn ngữ lập trình Python, nhằm tự động và có hệ thống thu thập thông tin từ các trang web trên internet.
- Hãy tưởng tượng một con “bọ mạng” (Spider) di chuyển trên “mạng lưới toàn cầu” (Web), tuân theo một số quy tắc nhất định để thu thập thông tin.
- Mục tiêu chính:
- Thu thập dữ liệu: Ví dụ như giá thị trường, tin tức, đánh giá của người dùng, v.v.
- Tích hợp thông tin: Ví dụ như tổng hợp nội dung, tạo chỉ mục (cốt lõi của công cụ tìm kiếm).
- Phân tích dữ liệu: Cung cấp dữ liệu gốc cho phân tích và khai thác dữ liệu sau này.
- Lý do chọn Python?
- Cú pháp đơn giản, dễ làm quen: Hiệu quả cao khi phát triển.
- Thư viện mở rộng mạnh mẽ:
requests
: Gửi yêu cầu HTTP một cách thuận tiện.BeautifulSoup
,lxml
: Phân tích tài liệu HTML/XML hiệu quả và trích xuất dữ liệu.Scrapy
: Khung爬虫 mạnh mẽ hỗ trợ dự án lớn với khả năng đồng bộ.
- nohu95 Cộng đồng sôi động: Dễ dàng tìm thấy tài liệu học tập và giải pháp.
Khái niệm về Kịch bản Tự động hóa là gì?
- Định nghĩa: Đây là chương trình được viết bằng ngôn ngữ lập trình (như Python), nhằm mô phỏng hành động của người dùng tương tác với hệ thống máy tính (đặc biệt là giao diện Web) để hoàn thành tự động các nhiệm vụ cụ thể và lặp đi lặp lại.
- Mục tiêu chính:
- Tự động hóa công việc: Thay thế việc thực hiện bằng tay các thao tác phức tạp, mất thời gian.
- Nâng cao hiệu quả: Ví dụ như đăng ký lớp học, mua vé, hoặc chấm công nhanh chóng tại thời điểm xác định.
- Thực thi quy trình: Đăng nhập tự động, điền biểu mẫu, nhấp chuột, gửi dữ liệu, v.v.
- Liên kết với bot thu thập dữ liệu:
- Thường cũng cần tương tác với máy chủ Web (gửi yêu cầu, nhận phản hồi).
- Có thể sử dụng các thư viện giống như bot thu thập dữ liệu (ví dụ
requests
,Selenium
). - Công cụ tự động hóa trình duyệt như
Selenium
rất phổ biến trong các kịch bản tương tác phức tạp.
So sánh Bot thu thập dữ liệu và Kịch bản Tự động hóa: Những điểm khác biệt cốt lõi
Đặc tính | Bot thu thập dữ liệu Python | Kịch bản Tự động hóa (Bot) |
---|---|---|
Mục tiêu chính | Thu thập dữ liệu (Information Retrieval) | Thực thi nhiệm vụ (Task Execution) |
Hoạt động chính | Đọc nội dung trang web (Read) | Mô phỏng tương tác của người dùng (Interact/Write) |
Phạm vi | Thông thường khá rộng, có thể duyệt qua nhiều trang/mạng | Thông thường hẹp hơn, tập trung vào quy trình/nhiệm vụ cụ thể |
Điểm nhấn | Tải về, phân tích và lưu trữ dữ liệu hiệu quả | Mô phỏng hoạt động chính xác, xử lý trạng thái đăng nhập, gửi dữ liệu |
Tóm tắt: Bot thu thập dữ liệu tập trung vào “xem” và “lưu”, trong khi kịch bản tự động hóa tập trung vào “làm” và “tương tác”. |
Demo Bot thu thập dữ liệu Python
Vì mọi người đã học qua môn Python trong kỳ trước, bài tập cuối kỳ là về bot thu thập dữ liệu, nên phần này sẽ không đi sâu giải thích thêm.
Demo Kịch bản Tự động hóa Python – Ví dụ từ một hệ thống trường học
Các kiến thức cốt lõi
Những kiến thức quan trọng cần nắm:
- Cơ sở HTTP:
- Hiểu sự khác biệt giữa yêu cầu GET và POST.
- Biết vai trò của Header yêu cầu, Cookies, và dữ liệu biểu mẫu (Form Data).
- Công cụ Phát triển Trình duyệt (F12):
- Xem xét phần tử (Inspect Element): Định vị phần tử HTML, lấy ID, Name, Class, XPath, CSS Selector để định danh.
- Phân tích mạng (Network Tab): Xem quá trình yêu cầu mạng thực tế (URL, phương thức yêu cầu, Headers, Payload, nội dung phản hồi), phân tích chi tiết các yêu cầu quan trọng như đăng nhập hoặc gửi biểu mẫu.
- Thư viện Python cốt lõi:
requests
Thư viện:- Gửi yêu cầu GET/POST (
requests.get
,requests.post
). - Quản lý phiên làm việc (
requests.Session
) để duy trì trạng thái đăng nhập (xử lý Cookies tự động). - Tùy chỉnh Header yêu cầu.
- Gửi dữ liệu biểu mẫu.
- Gửi yêu cầu GET/POST (
Selenium
Thư viện (dùng cho tương tác phức tạp hoặc trang có JavaScript rendering):- Cài đặt và cấu hình WebDriver (ví dụ ChromeDriver).
- Khởi chạy và kiểm soát trình duyệt (
webdriver.Chrome()
). - Định vị phần tử trên trang (
find_element
). - Mô phỏng hoạt động của người dùng (nhập
send_keys
, nhấpclick
, chọn hộp thả xuống, v.v.). - Xử lý chờ đợi trang (
implicitly_wait
,WebDriverWait
,expected_conditions
). - Thực thi mã JavaScript (
execute_script
).
- Phân tích HTML/XML (nếu cần trích xuất thông tin từ trang):
BeautifulSoup
hoặclxml
: Phân tích nội dung HTML từrequests
hoặcpage_source
củaSelenium
, trích xuất thông tin trạng thái hoặc dữ liệu cần thiết cho bước tiếp theo.
- Xử lý đăng nhập và xác thực:
- Phân tích yêu cầu đăng nhập (thường là yêu cầu POST).
- Xây dựng dữ liệu biểu mẫu cần thiết để đăng nhập.
- Xử lý mã xác nhận (captcha đơn giản có thể thử dùng thư viện OCR như
ddddocr
, captcha phức tạp là một thách thức).
- Mô phỏng quy trình hoạt động:
- Theo dõi từng bước thao tác bằng tay, chuyển hóa mỗi bước thành mã code (truy cập URL cụ thể, điền biểu mẫu, nhấp nút).
- Xử lý logic chuyển trang và điều hướng.
- Xử lý ngoại lệ:
- Sử dụng câu lệnh
try...except
để xử lý lỗi mạng, phần tử không tìm thấy, đăng nhập thất bại, tăng cường độ ổn định của kịch bản.
- Sử dụng câu lệnh
- Cấu hình và tham số hóa:
- Lưu thông tin tên người dùng, mật khẩu, URL đích vào tệp cấu hình hoặc biến, thay vì mã hóa cứng trong mã nguồn.
- Kiểm soát tần suất và chuẩn mực đạo đức:
- Sử dụng
time.sleep()
để thêm độ trễ phù hợp, tránh gây áp lực quá lớn lên máy chủ. - Nhắc lại tuân thủ quy định sử dụng hệ thống của trường.
- Sử dụng
Ví dụ 1 – Giám sát Thông báo Giáo vụ
Với ví dụ trang thông báo cũ của Phòng Giáo vụ Đại học Qufu Normal University:
Để giám sát thông báo giáo vụ, trước tiên hãy truy cập trang thông báo.
!Trang thông báo
Bằng cách mở công cụ F12 và xem xét phần tử, bạn có thể định vị phần tử chính chứa thông báo.
!Xem xét phần tử
Từ đây, chúng ta có thể xây dựng một chiến lược: Chạy kịch bản định kỳ để lấy và lưu nội dung phần tử này. Khi phát hiện nội dung mới khác với nội dung đã lưu, điều đó chứng tỏ có thông báo mới.
Với sự hỗ trợ của thư viện requests
, chúng ta có thể dễ dàng gửi yêu cầu HTTP để lấy nội dung trang, sau đó sử dụng BeautifulSoup
để phân tích và trích xuất thông tin thông báo.
!Hàm lấy nội dung trang web
!Trích xuất thông tin thông báo từ nội dung trang
Đã có hệ thống giám sát, nhưng làm sao để nhận được thông báo? Bạn có thể tích hợp robot nhắn tin từ Feishu, Dingtalk, hoặc QQ để gửi thông báo chủ động.
!Demo gửi thông báo qua QQ
Ví dụ 2 – Đăng nhập mô phỏng Hệ thống Giáo vụ
Với địa chỉ ví dụ:
Tại sao cần nhấn mạnh về địa chỉ này? Vì hệ thống giáo vụ được viết khá lộn xộn, đường dẫn jsxsd
có hay không ảnh hưởng trực tiếp đến đường dẫn mã xác nhận và yêu cầu đăng nhập.
!Phân tích trang
Qua phân tích, khi nhấn nút đăng nhập sẽ kích hoạt sự kiện onclick
, gọi hàm login
, biểu mẫu sẽ kích hoạt sự kiện onsubmit
, gọi hàm submitForm1
.
!Hình ảnh phân tích
Thực tế kiểm tra cho thấy hàm login
không quan trọng, nó có thể phối hợp với submitForm1
, chúng ta chỉ cần tập trung vào submitForm1
.
Dưới đây là phân tích hàm submitForm1
:
!Phân tích submitForm1
Hàm này thực hiện các bước sau:
- Lấy tên người dùng và mật khẩu.
- Nếu tên người dùng hoặc mật khẩu trống, hiển thị hộp thoại cảnh báo và trả về false.
- Nếu tên người dùng và mật khẩu không trống, tiến hành mã hóa chúng bằng hàm
encodeInp
. - Lưu giá trị đã mã hóa vào phần tử
encoded
. - Lưu giá trị phần tử
encoded
vào phần tửjzmmid
. - Xóa giá trị ô mật khẩu.
- Nếu
LoginToXkLdap
không bằnglogonLdap
, xóa giá trị ô tên người dùng và mật khẩu. - Trả về true.
Sau khi tìm hiểu, hàm encoded
bị mã hóa, nhưng sau khi giải mã hóa thì ra một mã base64 đơn giản. Ngay cả khi không giải mã hóa, chúng ta vẫn có thể suy luận từ gói bắt.
!Hàm encoded
Gói yêu cầu ban đầu:
|
|
| ``` POST /jsxsd/xk/LoginToXkLdap HTTP/1.1Host: zhjw.qfnu.edu.cnContent-Length: 98Cache-Control: max-age=0Origin: application/x-www-form-urlencodedUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.7Referer: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; sto-id-20480=XXXXXXXXXXXX; JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXuserAccount=&userPassword=&RANDOMCODE=xxxx&encoded=XXXXXXXXXX%3D%3D%25%25%25XXXXXXXXXX%3D
|
|