Featured image of post Lập trình Python cho Bot thu thập dữ liệu, tự động hóa và ứng dụng Robot QQ - j88bet

Lập trình Python cho Bot thu thập dữ liệu, tự động hóa và ứng dụng Robot QQ - j88bet

Trải nghiệm cảm giác đỉnh cao cùng j88bet - Trang cá cược trực tuyến hàng đầu

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.
    • 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ấp click, 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ặc lxml: Phân tích nội dung HTML từ requests hoặc page_source của Selenium, 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.
  • 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.

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:

  1. Lấy tên người dùng và mật khẩu.
  2. 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.
  3. 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.
  4. Lưu giá trị đã mã hóa vào phần tử encoded.
  5. Lưu giá trị phần tử encoded vào phần tử jzmmid.
  6. Xóa giá trị ô mật khẩu.
  7. Nếu LoginToXkLdap không bằng logonLdap, xóa giá trị ô tên người dùng và mật khẩu.
  8. 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:

1
123456789101112131415

| ``` 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22

Sau khi phân tích, chúng ta thấy rằng `userAccount`  `userPassword`  tên người dùng  mật khẩu, `RANDOMCODE`   xác nhận, `encoded`  tên người dùng  mật khẩu đã được  hóa.
 xác nhận  thể được nhận diện qua thư viện `ddddocr`. Sau khi nhận diện,  xác nhận cùng tên người dùng  mật khẩu sẽ được  hóa base64  ghép nối để gửi yêu cầu  phỏng tới máy chủ.
! đăng nhập  phỏng
Sau khi đăng nhập thành công, bạn  thể truy cập dữ liệu từ hệ thống giáo vụ như thời khóa biểu, điểm số, thông tin  nhân, thậm chí  thể tự động đăng  lớp học.
Hệ thống này được viết khá lộn xộn, chẳng hạn đường dẫn  xác nhận không nhất quán  hai nơi  API/gọi hàm không  ràng, dưới đây  một đoạn  minh họa.
!Gói yêu cầu lớp công cộng
!Gói [j88bet](/hy/450391f2.html)  yêu cầu danh sách đăng  lớp

### Ví dụ 3 – Kết nối Robot QQ để tra cứu phòng trống trong hệ thống Giáo vụ
 hệ thống tra cứu phòng trống của trường chỉ áp dụng cho khu vực  tại Quế Phủ  thường xuyên gặp lỗi, việc vào hệ thống giáo vụ mỗi ngày để kiểm tra rất phiền phức.  vậy, tôi đã tự viết một chương trình kết nối vào QQ.
Ý tưởng chính  sử dụng danh sách các phòng  lớp, sau đó loại bỏ khỏi danh sách tất cả các phòng, những phòng còn lại sẽ  phòng trống.
#### Đăng nhập mô phỏng (đã minh họa ở ví dụ 2)
#### Tra cứu phòng có lớp
Thông qua việc bắt gói, chúng ta  thể lấy nội dung yêu cầu  phản hồi.
!Gói yêu cầu tra cứu phòng  lớp
!Nội dung phản hồi
Chúng ta thấy phản hồi  một đoạn HTML. Sau khi phân tích bằng `BeautifulSoup`, danh sách phòng  thể được trích xuất.
#### Kết nối Robot QQ
Sau khi kết nối với Robot QQ, bạn  thể tra cứu phòng trống ngay trong QQ, rất hữu ích cho những ai đang ôn thi đại học.
Tôi cũng đã tối ưu hóa logic tìm kiếm, hỗ trợ chỉ định số ngày  khoảng tiết cụ thể.
!Tra cứu phòng trống
Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack thiết kế bởi Jimmy