Quét web HTML là gì?
Quét web là quá trình thu thập và phân tích dữ liệu thô từ Web và cộng đồng Python đã đưa ra một số công cụ quét web khá mạnh mẽ Show
Internet có lẽ là nguồn thông tin lớn nhất trên hành tinh. Nhiều ngành, chẳng hạn như khoa học dữ liệu, kinh doanh thông minh và báo cáo điều tra, có thể hưởng lợi rất nhiều từ việc thu thập và phân tích dữ liệu từ các trang web Trong hướng dẫn này, bạn sẽ học cách
Ghi chú. Hướng dẫn này được chuyển thể từ chương “Tương tác với Web” trong Python Basics. Giới thiệu thực tế về Python 3 Cuốn sách sử dụng trình soạn thảo IDLE tích hợp sẵn của Python để tạo và chỉnh sửa các tệp Python cũng như tương tác với trình bao Python, vì vậy, thỉnh thoảng bạn sẽ thấy các tham chiếu đến IDLE trong suốt hướng dẫn này. Tuy nhiên, bạn sẽ không gặp vấn đề gì khi chạy mã ví dụ từ trình chỉnh sửa và môi trường bạn chọn Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để thu thập và phân tích dữ liệu từ Web Cạo và phân tích văn bản từ các trang webThu thập dữ liệu từ các trang web bằng quy trình tự động được gọi là quét web. Một số trang web nghiêm cấm người dùng lấy dữ liệu của họ bằng các công cụ tự động như những công cụ mà bạn sẽ tạo trong hướng dẫn này. Trang web làm điều này vì hai lý do có thể
Trước khi sử dụng các kỹ năng Python của bạn để quét web, bạn phải luôn kiểm tra chính sách sử dụng được chấp nhận của trang web mục tiêu của mình để xem việc truy cập trang web bằng các công cụ tự động có vi phạm điều khoản sử dụng của trang web hay không. Về mặt pháp lý, việc tìm kiếm trang web trái với mong muốn của một trang web là một khu vực màu xám Quan trọng. Xin lưu ý rằng các kỹ thuật sau đây có thể là bất hợp pháp khi được sử dụng trên các trang web cấm quét web Đối với hướng dẫn này, bạn sẽ sử dụng một trang được lưu trữ trên máy chủ của Real Python. Trang mà bạn sẽ truy cập đã được thiết lập để sử dụng với hướng dẫn này Bây giờ bạn đã đọc tuyên bố từ chối trách nhiệm, bạn có thể xem nội dung thú vị. Trong phần tiếp theo, bạn sẽ bắt đầu lấy tất cả mã HTML từ một trang web Loại bỏ các quảng cáoXây dựng công cụ quét web đầu tiên của bạnMột gói hữu ích để quét web mà bạn có thể tìm thấy trong thư viện chuẩn của Python là 6, chứa các công cụ để làm việc với URL. Đặc biệt, mô-đun 7 chứa một chức năng có tên là 8 mà bạn có thể sử dụng để mở một URL trong chương trìnhTrong cửa sổ tương tác của IDLE, hãy nhập nội dung sau để nhập 8>>>
Trang web mà bạn sẽ mở nằm ở URL sau >>>
Để mở trang web, chuyển 0 đến 8>>>
8 trả về một đối tượng 3>>> 1Để trích xuất HTML từ trang, trước tiên hãy sử dụng phương thức 5 của đối tượng 3, phương thức này trả về một chuỗi byte. Sau đó, sử dụng 6 để giải mã các byte thành chuỗi bằng UTF-8>>> 5Bây giờ bạn có thể in HTML để xem nội dung của trang web >>> 6Đầu ra mà bạn đang thấy là mã HTML của trang web mà trình duyệt của bạn hiển thị khi bạn truy cập 7Với 6, bạn đã truy cập trang web tương tự như cách bạn làm trong trình duyệt của mình. Tuy nhiên, thay vì hiển thị nội dung một cách trực quan, bạn đã lấy mã nguồn dưới dạng văn bản. Bây giờ bạn đã có HTML dưới dạng văn bản, bạn có thể trích xuất thông tin từ nó theo một số cách khác nhauTrích xuất văn bản từ HTML bằng các phương thức chuỗiMột cách để trích xuất thông tin từ HTML của trang web là sử dụng các phương thức chuỗi. Chẳng hạn, bạn có thể sử dụng 9 để tìm kiếm trong văn bản HTML cho các thẻ 00 và trích xuất tiêu đề của trang webĐể bắt đầu, bạn sẽ trích xuất tiêu đề của trang web mà bạn đã yêu cầu trong ví dụ trước. Nếu bạn biết chỉ mục của ký tự đầu tiên của tiêu đề và chỉ mục của ký tự đầu tiên của thẻ đóng 01, thì bạn có thể sử dụng một lát cắt chuỗi để trích xuất tiêu đềBởi vì 9 trả về chỉ mục của lần xuất hiện đầu tiên của một chuỗi con, nên bạn có thể lấy chỉ mục của thẻ mở đầu 00 bằng cách chuyển chuỗi 04 tới 9>>>
Tuy nhiên, bạn không muốn chỉ mục của thẻ 00. Bạn muốn chỉ mục của chính tiêu đề. Để lấy chỉ mục của chữ cái đầu tiên trong tiêu đề, bạn có thể thêm độ dài của chuỗi 04 vào 08>>>
Bây giờ hãy lấy chỉ mục của thẻ đóng 01 bằng cách chuyển chuỗi 20 đến 9>>> 0Cuối cùng, bạn có thể trích xuất tiêu đề bằng cách cắt chuỗi 22>>> 2HTML trong thế giới thực có thể phức tạp hơn nhiều và khó dự đoán hơn nhiều so với HTML trên trang hồ sơ Aphrodite. Đây là một trang hồ sơ khác với một số HTML lộn xộn hơn mà bạn có thể cạo >>> 0Hãy thử trích xuất tiêu đề từ URL mới này bằng phương pháp tương tự như trong ví dụ trước >>> 1Rất tiếc. Có một chút HTML trộn lẫn với tiêu đề. Tại sao vậy? HTML cho trang 23 trông tương tự như trang 24, nhưng có một sự khác biệt nhỏ. Thẻ mở đầu 00 có thêm một khoảng trống trước dấu ngoặc nhọn đóng ( 26), hiển thị nó thành 27 28 trả về 29 vì chuỗi con chính xác 04 không tồn tại. Khi 29 được thêm vào 02, tức là 03, biến 04 được gán giá trị 05Ký tự tại chỉ mục 05 của chuỗi 22 là ký tự xuống dòng ( 08) ngay trước dấu ngoặc nhọn mở ( 09) của thẻ 10. Điều này có nghĩa là 11 trả về tất cả HTML bắt đầu bằng dòng mới đó và kết thúc ngay trước thẻ 01Những loại vấn đề này có thể xảy ra theo vô số cách không thể đoán trước. Bạn cần một cách đáng tin cậy hơn để trích xuất văn bản từ HTML Loại bỏ các quảng cáoLàm quen với biểu thức chính quyCụm từ thông dụng—hay gọi tắt là biểu thức chính quy—là các mẫu mà bạn có thể sử dụng để tìm kiếm văn bản trong một chuỗi. Python hỗ trợ các biểu thức chính quy thông qua mô-đun 13 của thư viện chuẩnGhi chú. Biểu thức chính quy không dành riêng cho Python. Chúng là một khái niệm lập trình chung và được hỗ trợ trong nhiều ngôn ngữ lập trình Để làm việc với các biểu thức chính quy, điều đầu tiên bạn cần làm là nhập mô-đun 13>>> 2Biểu thức chính quy sử dụng các ký tự đặc biệt được gọi là siêu ký tự để biểu thị các mẫu khác nhau. Chẳng hạn, ký tự dấu hoa thị (_______515) là viết tắt của 0 hoặc nhiều trường hợp của bất kỳ thứ gì xuất hiện ngay trước dấu hoa thị Trong ví dụ sau, bạn sử dụng 16 để tìm bất kỳ văn bản nào trong một chuỗi khớp với một biểu thức chính quy đã cho>>> 3Đối số đầu tiên của 17 là biểu thức chính quy mà bạn muốn đối sánh và đối số thứ hai là chuỗi cần kiểm tra. Trong ví dụ trên, bạn tìm kiếm mẫu 18 trong chuỗi 19Biểu thức chính quy 18 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng 21, kết thúc bằng 22 và không có hoặc nhiều phiên bản của 23 giữa hai. 17 trả về danh sách tất cả các trận đấu. Chuỗi 19 khớp với mẫu này, vì vậy nó được trả về trong danh sáchĐây là cùng một mẫu được áp dụng cho các chuỗi khác nhau >>> 4Lưu ý rằng nếu không tìm thấy kết quả khớp, thì 16 sẽ trả về một danh sách trốngKhớp mẫu có phân biệt chữ hoa chữ thường. Nếu bạn muốn khớp mẫu này bất kể trường hợp nào, thì bạn có thể chuyển đối số thứ ba có giá trị 27>>> 5Bạn có thể sử dụng dấu chấm ( 28) để thay thế cho bất kỳ ký tự đơn lẻ nào trong biểu thức chính quy. Chẳng hạn, bạn có thể tìm thấy tất cả các chuỗi chứa các chữ cái 21 và 22 được phân tách bằng một ký tự như sau>>> 6Mẫu 31 bên trong một biểu thức chính quy là viết tắt của bất kỳ ký tự nào được lặp lại nhiều lần. Chẳng hạn, bạn có thể sử dụng 32 để tìm mọi chuỗi con bắt đầu bằng 21 và kết thúc bằng 22, bất kể chữ cái—hoặc các chữ cái—ở giữa>>> 7Thông thường, bạn sử dụng 35 để tìm kiếm một mẫu cụ thể bên trong một chuỗi. Hàm này hơi phức tạp hơn 17 vì nó trả về một đối tượng có tên là 37 lưu trữ các nhóm dữ liệu khác nhau. Điều này là do có thể có các kết quả khớp bên trong các kết quả khớp khác và 35 trả về mọi kết quả có thểCác chi tiết của 37 không liên quan ở đây. Hiện tại, chỉ cần biết rằng việc gọi 40 trên 37 sẽ trả về kết quả đầu tiên và bao quát nhất, trong hầu hết các trường hợp, đó chính là kết quả bạn muốn>>> 8Có thêm một chức năng trong mô-đun 13 hữu ích để phân tích văn bản. 43, viết tắt của từ thay thế, cho phép bạn thay thế văn bản trong một chuỗi khớp với biểu thức chính quy bằng văn bản mới. Nó hoạt động giống như phương thức chuỗi 44Các đối số được truyền cho 43 là biểu thức chính quy, tiếp theo là văn bản thay thế, tiếp theo là chuỗi. Đây là một ví dụ>>> 9Có lẽ đó không phải là những gì bạn mong đợi sẽ xảy ra 43 sử dụng biểu thức chính quy 47 để tìm và thay thế mọi thứ giữa 09 đầu tiên và 26 cuối cùng, kéo dài từ đầu 50 đến cuối 51. Điều này là do các biểu thức chính quy của Python rất tham lam, nghĩa là chúng cố gắng tìm từ khớp dài nhất có thể khi các ký tự như 15 được sử dụngNgoài ra, bạn có thể sử dụng mẫu so khớp không tham lam 53, kiểu này hoạt động giống như 15 ngoại trừ việc nó khớp với chuỗi văn bản ngắn nhất có thể>>> 0Lần này, 43 tìm thấy hai kết quả phù hợp, 50 và 51, đồng thời thay chuỗi 58 cho cả hai kết quả phù hợpLoại bỏ các quảng cáoTrích xuất văn bản từ HTML bằng biểu thức chính quyĐược trang bị tất cả những kiến thức này, bây giờ hãy thử phân tích tiêu đề từ một trang hồ sơ khác, bao gồm dòng HTML được viết khá cẩu thả này 1Phương thức 9 sẽ gặp khó khăn khi xử lý sự không nhất quán ở đây, nhưng với việc sử dụng thông minh các biểu thức chính quy, bạn có thể xử lý mã này một cách nhanh chóng và hiệu quả 2Hãy xem xét kỹ hơn biểu thức chính quy đầu tiên trong chuỗi 60 bằng cách chia nó thành ba phần
Biểu thức chính quy thứ hai, chuỗi 78, cũng sử dụng 71 không tham lam để khớp với tất cả các thẻ HTML trong chuỗi 80. Bằng cách thay thế bất kỳ kết quả phù hợp nào bằng 81, 43 sẽ xóa tất cả các thẻ và chỉ trả về văn bảnGhi chú. Quét web bằng Python hoặc bất kỳ ngôn ngữ nào khác có thể rất tẻ nhạt. Không có hai trang web nào được tổ chức theo cùng một cách và HTML thường lộn xộn. Hơn nữa, các trang web thay đổi theo thời gian. Công cụ quét web hoạt động ngày hôm nay không được bảo đảm sẽ hoạt động vào năm tới—hoặc tuần tới, vì vấn đề đó Biểu thức chính quy là một công cụ mạnh mẽ khi được sử dụng đúng cách. Trong phần giới thiệu này, bạn hầu như không làm trầy xước bề mặt. Để biết thêm về biểu thức chính quy và cách sử dụng chúng, hãy xem loạt bài gồm hai phần Biểu thức chính quy. Regex trong Python Kiểm tra việc hiểu của bạnMở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn Tập thể dục. Cạo dữ liệu từ một trang webHiển thị/Ẩn Viết chương trình lấy toàn bộ HTML từ URL sau >>> 3Sau đó sử dụng 9 để hiển thị văn bản sau Tên. và Màu yêu thích. (không bao gồm bất kỳ dấu cách nào ở đầu hoặc thẻ HTML ở cuối có thể xuất hiện trên cùng một dòng)Bạn có thể mở rộng khối bên dưới để xem giải pháp Giải pháp. Cạo dữ liệu từ một trang webHiển thị/Ẩn Đầu tiên, nhập hàm 84 từ mô-đun 85 4Sau đó mở URL và sử dụng phương thức 5 của đối tượng 3 được trả về bởi 8 để đọc HTML của trang 5Phương thức 5 trả về một chuỗi byte, vì vậy bạn sử dụng 6 để giải mã các byte bằng mã hóa UTF-8Bây giờ bạn đã có mã nguồn HTML của trang web dưới dạng một chuỗi được gán cho biến 91, bạn có thể trích xuất tên và màu sắc yêu thích của Dionysus từ hồ sơ của anh ấy. Cấu trúc HTML cho hồ sơ của Dionysus giống như hồ sơ của Aphrodite mà bạn đã xem trước đóBạn có thể lấy tên bằng cách tìm chuỗi 92 trong văn bản và trích xuất mọi thứ xuất hiện sau lần xuất hiện đầu tiên của chuỗi và trước thẻ HTML tiếp theo. Tức là bạn cần trích xuất mọi thứ sau dấu hai chấm ( 93) và trước dấu ngoặc nhọn đầu tiên ( 09). Bạn có thể sử dụng kỹ thuật tương tự để trích xuất màu yêu thíchVòng lặp 95 sau trích xuất văn bản này cho cả tên và màu sắc yêu thích 6Có vẻ như có rất nhiều thứ đang diễn ra trong vòng lặp 95 này, nhưng chỉ cần một chút tính toán số học để tính toán các chỉ số phù hợp để trích xuất văn bản mong muốn. Hãy tiếp tục và phá vỡ nó
Khi kết thúc vòng lặp, bạn sử dụng 17 để hiển thị văn bản được trích xuất. Đầu ra cuối cùng trông như thế này 7Giải pháp này là một trong nhiều giải pháp giải quyết vấn đề này, vì vậy nếu bạn nhận được kết quả tương tự với một giải pháp khác, thì bạn đã làm rất tốt Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo Sử dụng Trình phân tích cú pháp HTML để quét web bằng PythonMặc dù các biểu thức chính quy rất phù hợp để khớp mẫu nói chung, nhưng đôi khi việc sử dụng trình phân tích cú pháp HTML được thiết kế rõ ràng để phân tích các trang HTML sẽ dễ dàng hơn. Có nhiều công cụ Python được viết cho mục đích này, nhưng thư viện Beautiful Soup là một công cụ tốt để bắt đầu Cài Đặt Súp ĐẹpĐể cài đặt Beautiful Soup, bạn có thể chạy lệnh sau trong thiết bị đầu cuối của mình 8Với lệnh này, bạn đang cài đặt phiên bản Beautiful Soup mới nhất vào môi trường Python toàn cầu của mình Loại bỏ các quảng cáoTạo đối tượng >>> page = urlopen(url) 18Nhập chương trình sau vào cửa sổ soạn thảo mới 9Chương trình này thực hiện ba điều
Đối tượng 18 được gán cho 24 được tạo với hai đối số. Đối số đầu tiên là HTML sẽ được phân tích cú pháp và đối số thứ hai, chuỗi 27, cho đối tượng biết trình phân tích cú pháp nào sẽ sử dụng ở hậu trường. 27 đại diện cho trình phân tích cú pháp HTML tích hợp của PythonSử dụng đối tượng >>> page = urlopen(url) 18Lưu và chạy chương trình trên. Khi chạy xong, bạn có thể sử dụng biến 24 trong cửa sổ tương tác để phân tích nội dung của 22 theo nhiều cách khác nhauGhi chú. Nếu bạn không sử dụng IDLE, thì bạn có thể chạy chương trình của mình với cờ 32 để vào chế độ tương tác. Một cái gì đó như 33 trước tiên sẽ chạy chương trình của bạn và sau đó để bạn ở REPL nơi bạn có thể khám phá các đối tượng của mìnhVí dụ: các đối tượng 18 có phương thức 35 mà bạn có thể sử dụng để trích xuất tất cả văn bản khỏi tài liệu và tự động xóa mọi thẻ HTMLNhập mã sau vào cửa sổ tương tác của IDLE hoặc ở cuối mã trong trình chỉnh sửa của bạn >>> 10Có rất nhiều dòng trống trong đầu ra này. Đây là kết quả của các ký tự xuống dòng trong văn bản của tài liệu HTML. Bạn có thể xóa chúng bằng phương thức chuỗi 44 nếu cầnThông thường, bạn chỉ cần lấy văn bản cụ thể từ tài liệu HTML. Trước tiên, sử dụng Beautiful Soup để trích xuất văn bản và sau đó sử dụng phương pháp chuỗi 9 đôi khi dễ dàng hơn so với làm việc với các biểu thức thông thườngTuy nhiên, những lần khác, chính các thẻ HTML là các yếu tố chỉ ra dữ liệu bạn muốn truy xuất. Chẳng hạn, có lẽ bạn muốn truy xuất URL cho tất cả các hình ảnh trên trang. Các liên kết này được chứa trong thuộc tính 38 của thẻ HTML 39Trong trường hợp này, bạn có thể sử dụng 40 để trả về danh sách tất cả các phiên bản của thẻ cụ thể đó>>> 11Điều này trả về một danh sách tất cả các thẻ 39 trong tài liệu HTML. Các đối tượng trong danh sách trông giống như chúng có thể là các chuỗi đại diện cho các thẻ, nhưng chúng thực sự là các phiên bản của đối tượng 42 do Beautiful Soup cung cấp. Các đối tượng 42 cung cấp một giao diện đơn giản để làm việc với thông tin mà chúng chứaBạn có thể khám phá điều này một chút trước tiên bằng cách giải nén các đối tượng 42 từ danh sách>>> 12Mỗi đối tượng 42 có một thuộc tính 46 trả về một chuỗi chứa loại thẻ HTML>>> 13Bạn có thể truy cập các thuộc tính HTML của đối tượng 42 bằng cách đặt tên của chúng giữa các dấu ngoặc vuông, giống như thể các thuộc tính là các khóa trong từ điểnVí dụ: thẻ 48 có một thuộc tính duy nhất, 38, với giá trị 50. Tương tự như vậy, một thẻ HTML chẳng hạn như liên kết 51 có hai thuộc tính, 52 và 53Để lấy nguồn ảnh trong trang hồ sơ Dionysus, bạn truy cập thuộc tính 38 bằng cách sử dụng ký hiệu từ điển nêu trên>>> 14Một số thẻ trong tài liệu HTML có thể được truy cập bởi các thuộc tính của đối tượng 42. Ví dụ: để lấy thẻ 00 trong tài liệu, bạn có thể sử dụng thuộc tính 57>>> 15Nếu bạn xem nguồn của hồ sơ Dionysus bằng cách điều hướng đến trang hồ sơ, nhấp chuột phải vào trang và chọn Xem nguồn trang, thì bạn sẽ nhận thấy rằng thẻ 00 được viết hoa toàn bộ và có khoảng trắngBeautiful Soup tự động dọn sạch các thẻ cho bạn bằng cách loại bỏ khoảng trống thừa trong thẻ mở và dấu gạch chéo lên phía trước không liên quan ( 75) trong thẻ đóngBạn cũng có thể chỉ truy xuất chuỗi giữa các thẻ tiêu đề với thuộc tính 60 của đối tượng 42>>> 16Một trong những tính năng của Beautiful Soup là khả năng tìm kiếm các loại thẻ cụ thể có thuộc tính khớp với các giá trị nhất định. Ví dụ: nếu bạn muốn tìm tất cả các thẻ 39 có thuộc tính 38 bằng giá trị 64, thì bạn có thể cung cấp đối số bổ sung sau cho 65>>> 17Ví dụ này hơi tùy ý và tính hữu ích của kỹ thuật này có thể không rõ ràng từ ví dụ. Nếu bạn dành thời gian duyệt các trang web khác nhau và xem nguồn trang của chúng, thì bạn sẽ nhận thấy rằng nhiều trang web có cấu trúc HTML cực kỳ phức tạp Khi cạo dữ liệu từ các trang web bằng Python, bạn thường quan tâm đến các phần cụ thể của trang. Bằng cách dành thời gian xem qua tài liệu HTML, bạn có thể xác định các thẻ có thuộc tính duy nhất mà bạn có thể sử dụng để trích xuất dữ liệu mình cần Sau đó, thay vì dựa vào các biểu thức chính quy phức tạp hoặc sử dụng 9 để tìm kiếm trong tài liệu, bạn có thể truy cập trực tiếp vào thẻ cụ thể mà bạn quan tâm và trích xuất dữ liệu bạn cầnTrong một số trường hợp, bạn có thể thấy rằng Beautiful Soup không cung cấp chức năng mà bạn cần. Thư viện lxml hơi khó bắt đầu hơn nhưng cung cấp tính linh hoạt hơn nhiều so với Beautiful Soup để phân tích tài liệu HTML. Bạn có thể muốn kiểm tra nó sau khi cảm thấy thoải mái khi sử dụng Beautiful Soup Ghi chú. Các trình phân tích cú pháp HTML như Beautiful Soup có thể giúp bạn tiết kiệm rất nhiều thời gian và công sức khi định vị dữ liệu cụ thể trong các trang web. Tuy nhiên, đôi khi HTML được viết kém và lộn xộn đến mức ngay cả một trình phân tích cú pháp tinh vi như Beautiful Soup cũng không thể diễn giải đúng các thẻ HTML Trong trường hợp này, bạn thường phải sử dụng 9 và các kỹ thuật biểu thức chính quy để cố gắng phân tích thông tin mà bạn cầnBeautiful Soup rất tốt để thu thập dữ liệu từ HTML của trang web, nhưng nó không cung cấp bất kỳ cách nào để làm việc với biểu mẫu HTML. Ví dụ: nếu bạn cần tìm kiếm một số truy vấn trên một trang web và sau đó thu thập kết quả, thì một mình Beautiful Soup sẽ không giúp bạn tiến xa được Loại bỏ các quảng cáoKiểm tra việc hiểu của bạnMở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn Tập thể dục. Phân tích cú pháp HTML bằng Beautiful SoupHiển thị/Ẩn Viết chương trình lấy toàn bộ HTML từ trang tại URL 68Sử dụng Beautiful Soup, in ra danh sách tất cả các liên kết trên trang bằng cách tìm các thẻ HTML có tên 69 và truy xuất giá trị được lấy bởi thuộc tính 52 của mỗi thẻĐầu ra cuối cùng sẽ trông như thế này 18Đảm bảo rằng bạn chỉ có một dấu gạch chéo ( 75) giữa URL cơ sở và URL tương đốiBạn có thể mở rộng khối bên dưới để xem giải pháp Giải pháp. Phân tích cú pháp HTML bằng Beautiful SoupHiển thị/Ẩn Đầu tiên, nhập hàm 84 từ mô-đun 85 và lớp 18 từ gói 75 19Mỗi URL liên kết trên trang 76 là một URL tương đối, vì vậy hãy tạo một biến 77 với URL cơ sở của trang web 50Bạn có thể tạo một URL đầy đủ bằng cách nối 77 với một URL tương đốiBây giờ hãy mở trang 76 bằng 8 và sử dụng 5 để lấy mã nguồn HTML 51Với nguồn HTML được tải xuống và giải mã, bạn có thể tạo một đối tượng 18 mới để phân tích cú pháp HTML 52 83 trả về danh sách tất cả các liên kết trong mã nguồn HTML. Bạn có thể lặp lại danh sách này để in ra tất cả các liên kết trên trang web 53Bạn có thể truy cập URL tương đối cho mỗi liên kết thông qua chỉ số phụ 84. Nối giá trị này với 77 để tạo toàn bộ 86Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo Tương tác với các biểu mẫu HTMLMô-đun 6 mà bạn đã làm việc cho đến nay trong hướng dẫn này rất phù hợp để yêu cầu nội dung của một trang web. Tuy nhiên, đôi khi bạn cần tương tác với một trang web để lấy nội dung bạn cần. Ví dụ: bạn có thể cần gửi biểu mẫu hoặc nhấp vào nút để hiển thị nội dung ẩnGhi chú. Hướng dẫn này được chuyển thể từ chương “Tương tác với Web” trong Python Basics. Giới thiệu thực tế về Python 3. Nếu bạn thích những gì bạn đang đọc, thì hãy nhớ xem phần còn lại của cuốn sách Thư viện chuẩn Python không cung cấp phương tiện tích hợp sẵn để làm việc với các trang web một cách tương tác, nhưng nhiều gói của bên thứ ba có sẵn từ PyPI. Trong số này, MechanicalSoup là một gói phổ biến và tương đối dễ sử dụng Về bản chất, MechanicalSoup cài đặt cái được gọi là trình duyệt không đầu, là trình duyệt web không có giao diện người dùng đồ họa. Trình duyệt này được điều khiển theo chương trình thông qua chương trình Python Cài đặt MechanicalSoupBạn có thể cài đặt MechanicalSoup với 88 trong thiết bị đầu cuối của mình 54Bạn sẽ cần đóng và khởi động lại phiên IDLE của mình để MechanicalSoup tải và được nhận dạng sau khi cài đặt Tạo đối tượng >>> page = urlopen(url) 89Nhập nội dung sau vào cửa sổ tương tác của IDLE >>> 55Các đối tượng 89 đại diện cho trình duyệt web không đầu. Bạn có thể sử dụng chúng để yêu cầu một trang từ Internet bằng cách chuyển URL tới phương thức 91 của chúng>>> 56 92 là một đối tượng 93 lưu trữ phản hồi từ việc yêu cầu URL từ trình duyệt>>> 57Số 94 đại diện cho mã trạng thái được yêu cầu trả về. Mã trạng thái của 94 có nghĩa là yêu cầu đã thành công. Yêu cầu không thành công có thể hiển thị mã trạng thái là 96 nếu URL không tồn tại hoặc 97 nếu có lỗi máy chủ khi thực hiện yêu cầuMechanicalSoup sử dụng Beautiful Soup để phân tích cú pháp HTML từ yêu cầu và 92 có thuộc tính 99 đại diện cho đối tượng 18>>> 58Bạn có thể xem HTML bằng cách kiểm tra thuộc tính 99>>> 59Lưu ý rằng trang này có một 102 trên đó với các phần tử 103 cho tên người dùng và mật khẩuLoại bỏ các quảng cáoGửi biểu mẫu với MechanicalSoupMở trang 104 từ ví dụ trước trong trình duyệt và tự xem trang đó trước khi tiếp tụcHãy thử nhập kết hợp tên người dùng và mật khẩu ngẫu nhiên. Nếu bạn đoán sai, thì thông báo Sai tên người dùng hoặc mật khẩu. được hiển thị ở dưới cùng của trang Tuy nhiên, nếu bạn cung cấp thông tin đăng nhập chính xác thì bạn sẽ được chuyển hướng đến trang 76Tên người dùngMật khẩu 106 107Trong ví dụ tiếp theo, bạn sẽ thấy cách sử dụng MechanicalSoup để điền và gửi biểu mẫu này bằng Python Phần quan trọng của mã HTML là biểu mẫu đăng nhập—nghĩa là mọi thứ bên trong thẻ 102. 102 trên trang này có thuộc tính 110 được đặt thành 111. Biểu mẫu này chứa hai phần tử 103, một phần tử có tên là 113 và phần tử kia có tên là 114. Phần tử 103 thứ ba là nút GửiBây giờ bạn đã biết cấu trúc cơ bản của biểu mẫu đăng nhập, cũng như thông tin đăng nhập cần thiết để đăng nhập, hãy xem một chương trình điền vào biểu mẫu và gửi biểu mẫu đó Trong cửa sổ soạn thảo mới, gõ vào chương trình sau 60Lưu tệp và nhấn F5 để chạy tệp. Để xác nhận rằng bạn đã đăng nhập thành công, hãy nhập thông tin sau vào cửa sổ tương tác. >>> 61Bây giờ chia nhỏ ví dụ trên
Trong cửa sổ tương tác, bạn xác nhận rằng nội dung gửi đã được chuyển hướng thành công đến trang 76. Nếu có gì đó không ổn, thì giá trị của 132 vẫn sẽ là 133Ghi chú. Tin tặc có thể sử dụng các chương trình tự động như chương trình ở trên để đăng nhập bằng vũ lực bằng cách nhanh chóng thử nhiều tên người dùng và mật khẩu khác nhau cho đến khi chúng tìm thấy sự kết hợp hoạt động Bên cạnh việc điều này rất bất hợp pháp, hầu hết tất cả các trang web ngày nay đều khóa bạn và báo cáo địa chỉ IP của bạn nếu họ thấy bạn thực hiện quá nhiều yêu cầu không thành công, vì vậy đừng thử Bây giờ bạn đã có bộ biến 134, đã đến lúc lấy URL cho mỗi liên kết trên trang 76 theo chương trìnhĐể làm điều này, bạn sử dụng lại 136, lần này chuyển chuỗi 21 để chọn tất cả các phần tử neo 138 trên trang>>> 62Bây giờ bạn có thể lặp qua từng liên kết và in thuộc tính 52>>> 63Các URL có trong mỗi thuộc tính 52 là các URL tương đối, không hữu ích lắm nếu bạn muốn điều hướng đến chúng sau này bằng MechanicalSoup. Nếu bạn tình cờ biết URL đầy đủ, thì bạn có thể chỉ định phần cần thiết để tạo URL đầy đủTrong trường hợp này, URL cơ sở chỉ là 141. Sau đó, bạn có thể nối URL cơ sở với các URL tương đối được tìm thấy trong thuộc tính 38>>> 64Bạn có thể làm được rất nhiều việc chỉ với 91, 136 và 145. Điều đó nói rằng, MechanicalSoup có khả năng nhiều hơn nữa. Để tìm hiểu thêm về MechanicalSoup, hãy xem tài liệu chính thứcLoại bỏ các quảng cáoKiểm tra việc hiểu của bạnMở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn Tập thể dục. Gửi biểu mẫu bằng MechanicalSoupHiển thị/Ẩn Sử dụng MechanicalSoup để cung cấp đúng tên người dùng ( 106) và mật khẩu ( 107) cho biểu mẫu đăng nhập có tại URL 117Sau khi biểu mẫu được gửi, hãy hiển thị tiêu đề của trang hiện tại để xác định rằng bạn đã được chuyển hướng đến trang 76Chương trình của bạn sẽ in văn bản 150Bạn có thể mở rộng khối bên dưới để xem giải pháp Giải pháp. Gửi biểu mẫu bằng MechanicalSoupHiển thị/Ẩn Đầu tiên, nhập gói 151 và tạo đối tượng 152 65Trỏ trình duyệt đến trang đăng nhập bằng cách chuyển URL tới 153 và lấy HTML có thuộc tính 99 66 118 là một phiên bản 18. Vì trang chỉ có một biểu mẫu duy nhất trên đó nên bạn có thể truy cập biểu mẫu qua 124. Sử dụng 136, chọn đầu vào tên người dùng và mật khẩu và điền chúng bằng tên người dùng 125 và mật khẩu 126 67Bây giờ biểu mẫu đã được điền đầy đủ, bạn có thể gửi kèm theo 127 68Nếu bạn điền đúng tên người dùng và mật khẩu vào biểu mẫu, thì 134 thực sự sẽ trỏ đến trang 76. Bạn có thể xác nhận điều này bằng cách in tiêu đề của trang được gán cho 164 69Bạn sẽ thấy văn bản sau được hiển thị 0Nếu thay vào đó, bạn thấy văn bản 165 hoặc nội dung khác, thì việc gửi biểu mẫu không thành côngKhi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo Tương tác với các trang web trong thời gian thựcĐôi khi bạn muốn có thể lấy dữ liệu theo thời gian thực từ một trang web cung cấp thông tin được cập nhật liên tục Vào những ngày đen tối trước khi bạn học lập trình Python, bạn phải ngồi trước trình duyệt, nhấp vào nút Làm mới để tải lại trang mỗi khi bạn muốn kiểm tra xem có nội dung cập nhật hay không. Nhưng bây giờ bạn có thể tự động hóa quy trình này bằng cách sử dụng phương thức 91 của đối tượng MechanicalSoup 89Mở trình duyệt bạn chọn và điều hướng đến URL 168Trang 169 này mô phỏng trò tung xúc xắc sáu mặt, cập nhật kết quả mỗi khi bạn làm mới trình duyệt. Dưới đây, bạn sẽ viết một chương trình liên tục quét trang để có kết quả mớiĐiều đầu tiên bạn cần làm là xác định phần tử nào trên trang chứa kết quả của việc tung xúc xắc. Thực hiện việc này ngay bây giờ bằng cách nhấp chuột phải vào bất kỳ đâu trên trang và chọn Xem nguồn trang. Hơn một nửa mã HTML là một thẻ 170 trông như thế này 1Văn bản của thẻ 170 có thể khác đối với bạn, nhưng đây là thành phần trang bạn cần để trích xuất kết quảGhi chú. Đối với ví dụ này, bạn có thể dễ dàng kiểm tra xem chỉ có một phần tử trên trang có 172. Mặc dù thuộc tính 173 được coi là duy nhất, nhưng trên thực tế, bạn phải luôn kiểm tra xem phần tử bạn quan tâm có được xác định duy nhất khôngBây giờ hãy bắt đầu bằng cách viết một chương trình đơn giản mở trang 169, loại bỏ kết quả và in nó ra bàn điều khiển 2Ví dụ này sử dụng phương thức 136 của đối tượng 18 để tìm phần tử có 177. Chuỗi 178 mà bạn chuyển đến 136, sử dụng bộ chọn ID CSS 180 để cho biết rằng 181 là một giá trị 173Để định kỳ nhận được kết quả mới, bạn sẽ cần tạo một vòng lặp tải trang ở mỗi bước. Vì vậy, mọi thứ bên dưới dòng 183 trong đoạn mã trên cần phải nằm trong phần thân của vòng lặpĐối với ví dụ này, bạn muốn tung xúc xắc bốn lần cách nhau mười giây. Để làm điều đó, dòng mã cuối cùng của bạn cần yêu cầu Python tạm dừng chạy trong mười giây. Bạn có thể làm điều này với 184 từ mô-đun 185 của Python. Phương thức 184 lấy một đối số duy nhất biểu thị lượng thời gian để ngủ tính bằng giâyĐây là một ví dụ minh họa cách hoạt động của 187 3Khi bạn chạy mã này, bạn sẽ thấy rằng thông báo 188 không được hiển thị cho đến khi năm giây trôi qua kể từ khi hàm 17 đầu tiên được thực thiĐối với ví dụ về cuộn xúc xắc, bạn sẽ cần chuyển số 190 đến 187. Đây là chương trình cập nhật 4Khi chạy chương trình, bạn sẽ thấy ngay kết quả đầu tiên được in ra bàn điều khiển. Sau mười giây, kết quả thứ hai được hiển thị, sau đó là kết quả thứ ba và cuối cùng là kết quả thứ tư. Điều gì xảy ra sau khi kết quả thứ tư được in ra? Chương trình tiếp tục chạy thêm mười giây nữa trước khi dừng lại. Đó là một sự lãng phí thời gian. Bạn có thể ngăn nó làm điều này bằng cách sử dụng câu lệnh 192 để chạy 193 chỉ cho ba yêu cầu đầu tiên 5Với các kỹ thuật như thế này, bạn có thể thu thập dữ liệu từ các trang web cập nhật dữ liệu của họ theo định kỳ. Tuy nhiên, bạn nên lưu ý rằng việc yêu cầu một trang nhiều lần liên tiếp có thể bị coi là hành vi sử dụng trang web đáng ngờ hoặc thậm chí là độc hại Quan trọng. Hầu hết các trang web xuất bản tài liệu Điều khoản sử dụng. Bạn thường có thể tìm thấy một liên kết đến nó ở chân trang của trang web Luôn đọc tài liệu này trước khi cố gắng lấy dữ liệu từ một trang web. Nếu bạn không thể tìm thấy Điều khoản sử dụng, hãy thử liên hệ với chủ sở hữu trang web và hỏi họ xem họ có bất kỳ chính sách nào liên quan đến khối lượng yêu cầu không Việc không tuân thủ Điều khoản sử dụng có thể dẫn đến việc IP của bạn bị chặn, vì vậy hãy cẩn thận Thậm chí có thể làm sập máy chủ với số lượng yêu cầu quá nhiều, vì vậy bạn có thể tưởng tượng rằng nhiều trang web lo ngại về số lượng yêu cầu đến máy chủ của họ. Luôn kiểm tra Điều khoản sử dụng và tôn trọng khi gửi nhiều yêu cầu đến một trang web Loại bỏ các quảng cáoPhần kết luậnMặc dù có thể phân tích cú pháp dữ liệu từ Web bằng các công cụ trong thư viện chuẩn của Python, nhưng có nhiều công cụ trên PyPI có thể giúp đơn giản hóa quy trình Trong hướng dẫn này, bạn đã học cách
Viết các chương trình quét web tự động rất thú vị và Internet không thiếu nội dung có thể dẫn đến tất cả các loại dự án thú vị Chỉ cần nhớ rằng, không phải ai cũng muốn bạn lấy dữ liệu từ máy chủ web của họ. Luôn kiểm tra Điều khoản sử dụng của trang web trước khi bạn bắt đầu thu thập dữ liệu và tôn trọng cách bạn tính thời gian cho các yêu cầu web của mình để bạn không làm ngập máy chủ với lưu lượng truy cập Mã nguồn. Nhấp vào đây để tải xuống mã nguồn miễn phí mà bạn sẽ sử dụng để thu thập và phân tích dữ liệu từ Web Tài nguyên bổ sungĐể biết thêm thông tin về quét web bằng Python, hãy xem các tài nguyên sau
Ghi chú. Nếu bạn thích những gì bạn học được trong ví dụ này từ Python Basics. Giới thiệu thực tế về Python 3, thì hãy nhớ xem phần còn lại của cuốn sách Đánh dấu là đã hoàn thành 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về David Amos David là một nhà văn, lập trình viên và nhà toán học đam mê khám phá toán học thông qua mã » Thông tin thêm về DavidMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Joanna Gia-cốp kate Martin Philipp Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi web cạo với ví dụ là gì?Tìm kiếm web đề cập đến việc trích xuất dữ liệu web sang định dạng hữu ích hơn cho người dùng . Ví dụ: bạn có thể lấy thông tin sản phẩm từ trang web thương mại điện tử vào bảng tính excel. Mặc dù việc quét web có thể được thực hiện thủ công, nhưng trong hầu hết các trường hợp, bạn nên sử dụng công cụ tự động sẽ tốt hơn.
Mục đích của cạo là gì?Cạo là kỹ thuật điều trị sử dụng các công cụ cho phép bác sĩ lâm sàng xác định vị trí và điều trị hiệu quả tình trạng căng và tổn thương mô mềm . Các dụng cụ cạo giúp phá vỡ các chất kết dính này và khôi phục khả năng vận động bình thường của mô, giống như bất kỳ hình thức vận động mô mềm hoặc xoa bóp mô sâu nào khác.
Kỹ thuật cạo web là gì?Tìm kiếm dữ liệu hoặc quét web là quá trình nhập dữ liệu từ trang web vào tệp hoặc bảng tính . Nó được sử dụng để trích xuất dữ liệu từ web, cho mục đích sử dụng cá nhân của người điều hành cạo hoặc để sử dụng lại dữ liệu trên các trang web khác. Có rất nhiều ứng dụng phần mềm để tự động cạo dữ liệu. |