Này, tôi đang làm việc trên một dự án Python yêu cầu tôi xem qua một trang web. Tôi muốn xem qua để tìm một văn bản cụ thể và nếu nó tìm thấy văn bản, thì nó sẽ in một cái gì đó ra. Nếu không, nó in ra một thông báo lỗi. Tôi đã thử với các mô -đun khác nhau như libxml nhưng tôi không thể hiểu được tôi sẽ làm như thế nào. Show
Bất cứ ai có thể cho vay một số trợ giúp? Đã hỏi ngày 7 tháng 2 năm 2011 lúc 20:07Feb 7, 2011 at 20:07
1 Bạn có thể làm một cái gì đó đơn giản như:
Đã trả lời ngày 7 tháng 2 năm 2011 lúc 20:13Feb 7, 2011 at 20:13
DPLOUFFEDPLOUFFEdplouffe 5653 Huy hiệu bạc5 Huy hiệu Đồng3 silver badges5 bronze badges 3 Xóa 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ụ cạo web khá mạnh. is the process of collecting and parsing raw data from the Web, and the Python community has come up with some pretty powerful web scraping tools. Các máy chủ Internet có lẽ là nguồn thông tin lớn nhất trên hành tinh. Nhiều ngành học, chẳng hạn như khoa học dữ liệu, thông minh kinh doanh và báo cáo điều tra, có thể được 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:
Scrape và Parse văn bản từ các trang webThu thập dữ liệu từ các trang web sử dụng một quy trình tự động được gọi là cạo web. Một số trang web rõ ràng cấm người dùng cạo dữ liệu của họ bằng các công cụ tự động như những trang mà bạn sẽ tạo trong hướng dẫn này. Các 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 nên luôn kiểm tra chính sách sử dụng chấp nhận được mục tiêu của mình để xem liệu truy cập trang web với các công cụ tự động có vi phạm các điều khoản sử dụng hay không. Về mặt pháp lý, web cào vào mong muốn của một trang web là một khu vực màu xám rất nhiều. Đối với hướng dẫn này, bạn sẽ sử dụng một trang mà LỚN lưu trữ trên máy chủ Python thực sự. 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 từ chối trách nhiệm, bạn có thể nhận được những thứ 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 duy nhất. Xây dựng cái cào web đầu tiên của bạnMột gói hữu ích để cạo web mà bạn có thể tìm thấy trong thư viện tiêu chuẩn Python, là 5, chứa các công cụ để làm việc với các URL. Cụ thể, mô -đun 6 chứa một hàm gọi là 7 mà bạn có thể sử dụng để mở URL trong một chương trình.Trong cửa sổ tương tác Idle, nhập phần sau để nhập 7:>>>
Trang web mà bạn sẽ mở ở URL sau: >>>
Trang web mà bạn sẽ mở ở URL sau: >>>
Trang web mà bạn sẽ mở ở URL sau: >>>
Trang web mà bạn sẽ mở ở URL sau: >>>
Trang web mà bạn sẽ mở ở URL sau: >>>
Trang web mà bạn sẽ mở ở URL sau: Để mở trang web, chuyển 9 đến 7:>>> html_bytes = page.read() >>> html = html_bytes.decode("utf-8") 7 Trả về một đối tượng >>> print(html) <html> <head> <title>Profile: Aphrodite</title> </head> <body bgcolor="yellow"> <center> <br><br> <img src="/static/aphrodite.gif" /> <h2>Name: Aphrodite</h2> <br><br> Favorite animal: Dove <br><br> Favorite color: Red <br><br> Hometown: Mount Olympus </center> </body> </html> 2:Để trích xuất HTML từ trang, trước tiên hãy sử dụng phương thức 8 module.Bây giờ bạn có thể in HTML để xem nội dung của trang web: Đầu ra mà bạn nhìn 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 6:metacharacters to denote different patterns. For instance, the asterisk character ( 0) stands for zero or more instances of whatever comes just before the asterisk.Trong ví dụ sau, bạn sử dụng 1 để tìm bất kỳ văn bản nào trong chuỗi phù hợp với biểu thức thông thường nhất định:>>>
Đối số đầu tiên của 2 là biểu thức thông thường mà bạn muốn khớp và đối số thứ hai là chuỗi để kiểm tra. Trong ví dụ trên, bạn tìm kiếm mẫu 3 trong chuỗi 4.Biểu thức thông thường 3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng 6, kết thúc bằng 7 và có số lượng hoặc nhiều phiên bản là 8 giữa hai. 2 Trả về một danh sách tất cả các trận đấu. Chuỗi 4 phù hợp với mẫu này, do đó, nó đã được trả lại trong danh sách.Ở đây, cùng một mẫu được áp dụng cho các chuỗi khác nhau: >>>
Đối số đầu tiên của 2 là biểu thức thông thường mà bạn muốn khớp và đối số thứ hai là chuỗi để kiểm tra. Trong ví dụ trên, bạn tìm kiếm mẫu 3 trong chuỗi 4.Biểu thức thông thường 3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng 6, kết thúc bằng 7 và có số lượng hoặc nhiều phiên bản là 8 giữa hai. 2 Trả về một danh sách tất cả các trận đấu. Chuỗi 4 phù hợp với mẫu này, do đó, nó đã được trả lại trong danh sách.>>>
Đối số đầu tiên của 2 là biểu thức thông thường mà bạn muốn khớp và đối số thứ hai là chuỗi để kiểm tra. Trong ví dụ trên, bạn tìm kiếm mẫu 3 trong chuỗi 4.>>> 0Đối số đầu tiên của 2 là biểu thức thông thường mà bạn muốn khớp và đối số thứ hai là chuỗi để kiểm tra. Trong ví dụ trên, bạn tìm kiếm mẫu 3 trong chuỗi 4.>>> 1Biểu thức thông thường 3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng 6, kết thúc bằng 7 và có số lượng hoặc nhiều phiên bản là 8 giữa hai. 2 Trả về một danh sách tất cả các trận đấu. Chuỗi 4 phù hợp với mẫu này, do đó, nó đã được trả lại trong danh sách.Ở đây, cùng một mẫu được áp dụng cho các chuỗi khác nhau: >>> 2Lưu ý rằng nếu không tìm thấy trận đấu nào, thì 1 trả về một danh sách trống.Kết hợp mẫu là trường hợp nhạy cảm. Nếu bạn muốn khớp với mẫu này bất kể trường hợp nào, thì bạn có thể chuyển đối số thứ ba với giá trị 2:>>> 3Bạn có thể sử dụng một khoảng thời gian ( 3) để đứng cho bất kỳ ký tự nào trong một 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 6 và 7 được phân tách bởi một ký tự như sau:Mẫu 6 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 bất kỳ số lần nào. Chẳng hạn, bạn có thể sử dụng 7 để tìm mọi bộ nền bắt đầu bằng 6 và kết thúc bằng 7, bất kể chữ cái nào hay chữ cái nào ở giữa:Thông thường, bạn sử dụng 0 để tìm kiếm một mẫu cụ thể bên trong một chuỗi. Hàm này có phần phức tạp hơn 2 vì nó trả về một đối tượng được gọi là 2 lưu trữ các nhóm dữ liệu khác nhau. Điều này là do có thể có các trận đấu bên trong các trận đấu khác và 0 trả về mọi kết quả có thể.>>> 4Các chi tiết của 2 không liên quan ở đây. Hiện tại, chỉ cần biết rằng gọi 5 trên 2 sẽ trả về kết quả đầu tiên và toàn diện nhất, trong hầu hết các trường hợp chỉ là những gì bạn muốn:
Có một chức năng nữa trong mô -đun >>> print(html) <html> <head> <title>Profile: Aphrodite</title> </head> <body bgcolor="yellow"> <center> <br><br> <img src="/static/aphrodite.gif" /> <h2>Name: Aphrodite</h2> <br><br> Favorite animal: Dove <br><br> Favorite color: Red <br><br> Hometown: Mount Olympus </center> </body> </html> 8 mà hữu ích cho việc phân tích văn bản. >>> re.findall("ab*c", "ABC") [] >>> re.findall("ab*c", "ABC", re.IGNORECASE) ['ABC'] 8, viết tắt để thay thế, cho phép bạn thay thế văn bản trong một chuỗi phù hợp với biểu thức thông thường với văn bản mới. Nó hoạt động giống như phương thức chuỗi >>> re.findall("ab*c", "ABC") [] >>> re.findall("ab*c", "ABC", re.IGNORECASE) ['ABC'] 9.Các đối số được chuyển đến 8 là biểu thức chính quy, theo sau là văn bản thay thế, tiếp theo là chuỗi. Đây là một ví dụ:Có lẽ đó là những gì bạn mong đợi sẽ xảy ra. >>> 8 sử dụng biểu thức thông thường 02 để tìm và thay thế mọi thứ giữa lần đầu tiên ____10103 và 04 cuối cùng, kéo dài từ đầu 05 đến cuối 06. Điều này là do các biểu thức thường xuyên của Python, rất tham lam, có nghĩa là họ cố gắng tìm ra sự phù hợp lâu nhất có thể khi các nhân vật như 0 được sử dụng.Ngoài ra, bạn có thể sử dụng mẫu phù hợp không màu xanh lá cây 08, hoạt động giống như 0 ngoại trừ nó phù hợp với chuỗi văn bản ngắn nhất có thể:Lần này, 8 tìm thấy hai trận đấu, 05 và 06 và thay thế chuỗi 13 cho cả hai trận đấu.Kiểm tra việc hiểu của bạn 6Mở rộng khối dưới đây để kiểm tra sự hiểu biết của bạn. 7Viết một chương trình lấy toàn bộ HTML từ URL sau: 5Sau đó sử dụng 14 để hiển thị văn bản sau: và màu yêu thích: (không bao gồm bất kỳ không gian hàng đầu hoặc thẻ HTML 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 một giải pháp. 8Có vẻ như có rất nhiều thứ đang diễn ra trong vòng lặp 26 này, nhưng nó chỉ là một chút 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. Đi trước và phá vỡ nó:
Ở cuối vòng lặp, bạn sử dụng 48 để hiển thị văn bản được trích xuất. Đầu ra cuối cùng trông như thế này:Giả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 có cùng đầu ra 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 trong PythonMặc dù các biểu thức thông thường là tuyệt vời để khớp mẫu nói chung, nhưng đôi khi, nó dễ dàng sử dụng trình phân tích cú pháp HTML dễ dàng hơn để thiết kế rõ ràng để phân tích các trang HTML. Có rất nhiều công cụ Python được viết cho mục đích này, nhưng thư viện súp đẹp là một công cụ tốt để bắt đầu. Lắp đặt súp đẹpĐể cài đặt súp đẹp, bạn có thể chạy như sau trong thiết bị đầu cuối của mình: 9Với lệnh này, bạn đã cài đặt phiên bản mới nhất của Soup xinh đẹp vào môi trường Python toàn cầu của bạn. Tạo đối tượng >>> from urllib.request import urlopen 49Nhập chương trình sau vào cửa sổ Trình chỉnh sửa mới: 0Chương trình này thực hiện ba điều:
Đối tượng 49 được gán cho 55 được tạo bằng hai đối số. Đối số đầu tiên là HTML được phân tích cú pháp và đối số thứ hai, chuỗi 58, cho thấy đối tượng mà trình phân tích cú pháp sử dụng đằng sau hậu trường. 58 đại diện cho trình phân tích cú pháp HTML tích hợp Python.Sử dụng đối tượng >>> from urllib.request import urlopen 49Lưu và chạy chương trình trên. Khi nó chạy xong, bạn có thể sử dụng biến 55 trong cửa sổ tương tác để phân tích nội dung của 53 theo nhiều cách khác nhau.Ví dụ: các đối tượng 49 có phương thức 64 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 bất kỳ thẻ HTML nào.Nhập mã sau vào cửa sổ tương tác Idle, hoặc ở cuối mã trong trình soạn thảo của bạn: >>> 1Có rất nhiều dòng trống trong đầu ra này. Đây là kết quả của các ký tự mới trong văn bản HTML tài liệu. Bạn có thể loại bỏ chúng bằng phương thức chuỗi 9 nếu bạn cần.Thông thường, bạn chỉ cần nhận văn bản cụ thể từ một tài liệu HTML. Sử dụng súp đẹp trước tiên để trích xuất văn bản và sau đó sử dụng phương pháp chuỗi 14 đô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ường.Tuy nhiên, lần khác, 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 các 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 67 của các thẻ 68 HTML.Trong trường hợp này, bạn có thể sử dụng 69 để trả về danh sách tất cả các trường hợp của thẻ cụ thể đó:>>> 2Có rất nhiều dòng trống trong đầu ra này. Đây là kết quả của các ký tự mới trong văn bản HTML tài liệu. Bạn có thể loại bỏ chúng bằng phương thức chuỗi 9 nếu bạn cần.Thông thường, bạn chỉ cần nhận văn bản cụ thể từ một tài liệu HTML. Sử dụng súp đẹp trước tiên để trích xuất văn bản và sau đó sử dụng phương pháp chuỗi 14 đô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ường.>>> 3Có rất nhiều dòng trống trong đầu ra này. Đây là kết quả của các ký tự mới trong văn bản HTML tài liệu. Bạn có thể loại bỏ chúng bằng phương thức chuỗi 9 nếu bạn cần.Thông thường, bạn chỉ cần nhận văn bản cụ thể từ một tài liệu HTML. Sử dụng súp đẹp trước tiên để trích xuất văn bản và sau đó sử dụng phương pháp chuỗi 14 đô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ường.Tuy nhiên, lần khác, 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 các 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 67 của các thẻ 68 HTML.Để có được nguồn của hình ảnh trong trang hồ sơ Dionysus, bạn sẽ truy cập thuộc tính 67 bằng cách sử dụng ký hiệu từ điển được đề cập ở trên:>>> 4Một số thẻ nhất định 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 71. Ví dụ: để nhận thẻ 85 trong tài liệu, bạn có thể sử dụng thuộc tính 86:>>> 5Một số thẻ nhất định 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 71. Ví dụ: để nhận thẻ 85 trong tài liệu, bạn có thể sử dụng thuộc tính 86:Nếu bạn nhìn vào 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 nguồn xem trang, thì bạn sẽ nhận thấy rằng thẻ 85 được viết trong tất cả các nắp có khoảng trống:Súp đẹp tự động làm sạch các thẻ cho bạn bằng cách tháo thêm không gian trong thẻ mở và dấu gạch chéo bên ngoài ( 88) trong thẻ đóng.>>> 6Một số thẻ nhất định 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 71. Ví dụ: để nhận thẻ 85 trong tài liệu, bạn có thể sử dụng thuộc tính 86:>>> 7Một số thẻ nhất định 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 71. Ví dụ: để nhận thẻ 85 trong tài liệu, bạn có thể sử dụng thuộc tính 86:Nếu bạn nhìn vào 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 nguồn xem trang, thì bạn sẽ nhận thấy rằng thẻ 85 được viết trong tất cả các nắp có khoảng trống:Súp đẹp tự động làm sạch các thẻ cho bạn bằng cách tháo thêm không gian trong thẻ mở và dấu gạch chéo bên ngoài ( 88) trong thẻ đóng.Bạn cũng có thể chỉ truy xuất chuỗi giữa các thẻ tiêu đề với thuộc tính 89 của đối tượng 71:Một trong những tính năng của súp đẹp là khả năng tìm kiếm các loại thẻ cụ thể có thuộc tính phù hợ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ẻ 68 có thuộc tính 67 bằng với giá trị 93, thì bạn có thể cung cấp đối số bổ sung sau đây cho 94:Ví dụ này có phần 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 các nguồn trang của họ, 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 lấy dữ liệu từ các trang web có Python, bạn đã thường quan tâm đến các phần cụ thể của trang. Bằng cách dành một chút thời gian để xem qua tài liệu HTML, bạn có thể xác định các thẻ với các thuộc tính duy nhất mà bạn có thể sử dụng để trích xuất dữ liệu bạn cần. Sau đó, thay vì dựa vào các biểu thức thông thường phức tạp hoặc sử dụng 14 để tìm kiếm thông qua tài liệu, bạn có thể truy cập trực tiếp thẻ cụ thể mà bạn quan tâm và trích xuất dữ liệu bạn cần.Trong một số trường hợp, bạn có thể thấy rằng súp đẹp không cung cấp chức năng bạn cần. Thư viện LXML có phần khó khăn hơn để bắt đầu nhưng mang đến sự linh hoạt hơn nhiều so với súp đẹp để phân tích các tài liệu HTML. Bạn có thể muốn kiểm tra nó khi bạn thoải mái sử dụng súp đẹp. Súp đẹp là tuyệt vời để lấy dữ liệu từ một trang web HT HTML, nhưng nó không cung cấp bất kỳ cách nào để làm việc với các hình thức HTML. Ví dụ: nếu bạn cần tìm kiếm một trang web cho một số truy vấn và sau đó xóa kết quả, thì một mình súp đẹp đã giành được bạn rất xa. 8Kiểm tra việc hiểu của bạn Mở rộng khối dưới đây để kiểm tra sự hiểu biết của bạn. Viết một chương trình lấy toàn bộ HTML từ trang tại URL 96. 9Sử dụng súp đẹp, in ra một danh sách tất cả các liên kết trên trang bằng cách tìm kiếm các thẻ HTML có tên 97 và lấy giá trị được thực hiện bởi thuộc tính 81 của mỗi thẻ.relative URL, so create a 05 variable with the base URL of the website: 0Đầu ra cuối cùng sẽ trông như thế này: Hãy chắc chắn rằng bạn chỉ có một dấu gạch chéo ( 88) giữa URL cơ sở và URL tương đối. 1Bạn có thể mở rộng khối bên dưới để xem giải pháp: 2Đầu tiên, nhập chức năng 15 từ mô -đun 16 và lớp 49 từ gói 03: 3Mỗi URL liên kết trên trang 04 là một URL tương đối, vì vậy hãy tạo biến 05 với URL cơ sở của trang web:Bạn có thể xây dựng một URL đầy đủ bằng cách kết hợp 05 với URL tương đối.Bây giờ hãy mở trang >>> url = "http://olympus.realpython.org/profiles/aphrodite" 04 với >>> html_bytes = page.read() >>> html = html_bytes.decode("utf-8") 7 và sử dụng >>> print(html) <html> <head> <title>Profile: Aphrodite</title> </head> <body bgcolor="yellow"> <center> <br><br> <img src="/static/aphrodite.gif" /> <h2>Name: Aphrodite</h2> <br><br> Favorite animal: Dove <br><br> Favorite color: Red <br><br> Hometown: Mount Olympus </center> </body> </html> 4 để lấy nguồn HTML:Với nguồn HTML được tải xuống và giải mã, bạn có thể tạo một đối tượng 49 mới để phân tích HTML: 11 Trả về một danh sách tất cả các liên kết trong nguồn HTML. Bạn có thể lặp qua danh sách này để in tất cả các liên kết trên trang web:Về bản chất, MechanicalSoup cài đặt những gì đượ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 kiểm soát theo chương trình thông qua chương trình Python.headless browser, which is a web browser with no graphical user interface. This browser is controlled programmatically via a Python program. Cài đặt MechanicalSoupBạn có thể cài đặt MechanicalSoup với 16 trong thiết bị đầu cuối của mình: 4Bạn cần phải đóng và khởi động lại phiên nhàn rỗi của mình cho cơ khí để tải và được công nhận sau khi nó được cài đặt. Tạo đối tượng >>> url = "http://olympus.realpython.org/profiles/aphrodite" 17Nhập phần sau vào cửa sổ tương tác Idle: >>> 5 17 Các đối tượng đạ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 sang phương thức 19 của họ:>>> 6 17 Các đối tượng đạ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 sang phương thức 19 của họ:>>> 7 17 Các đối tượng đạ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 sang phương thức 19 của họ: 20 là đối tượng 21 lưu trữ phản hồi yêu cầu URL từ trình duyệt:>>> 8 17 Các đối tượng đạ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 sang phương thức 19 của họ:>>> 9 17 Các đối tượng đạ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 sang phương thức 19 của họ:>>> url = "http://olympus.realpython.org/profiles/aphrodite" 20 là đối tượng >>> url = "http://olympus.realpython.org/profiles/aphrodite" 21 lưu trữ phản hồi yêu cầu URL từ trình duyệt:Số 22 đại diện cho mã trạng thái được trả về theo yêu cầu. Mã trạng thái của 22 có nghĩa là yêu cầu đã thành công. Một yêu cầu không thành công có thể hiển thị mã trạng thái của 24 nếu URL không tồn tại hoặc 25 nếu có lỗi máy chủ khi đưa ra yêu cầu.MechanicalSoup sử dụng súp đẹp để phân tích HTML khỏi yêu cầu và 20 có thuộc tính 27 đại diện cho một đối tượng 49:Bạn có thể xem HTML bằng cách kiểm tra thuộc tính 27:
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 04:tên tài khoản Mật khẩu 34 0 35F5 to run it. To confirm that you’ve successfully logged in, type the following into the interactive window:>>> 1 17 Các đối tượng đạ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 sang phương thức 19 của họ:
Bạn có thể xem HTML bằng cách kiểm tra thuộc tính 27:Lưu ý trang này có 30 trên đó với các phần tử 31 cho tên người dùng và mật khẩu.Gửi một biểu mẫu với cơ khí >>> 2 17 Các đối tượng đạ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 sang phương thức 19 của họ:>>> 3
17 Các đối tượng đạ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 sang phương thức 19 của họ: 20 là đối tượng 21 lưu trữ phản hồi yêu cầu URL từ trình duyệt:>>> 4 17 Các đối tượng đạ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 sang phương thức 19 của họ: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 Sử dụng MechanicalSoup để cung cấp tên người dùng chính xác ( 34) và mật khẩu ( 35) cho mẫu đăng nhập nằm ở URL 45.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 04.Chương trình của bạn nên in văn bản 78.Bạn có thể mở rộng khối bên dưới để xem một giải pháp. Đầu tiên, nhập gói 79 và tạo đối tượng 80: 5Trình trình duyệt vào trang đăng nhập bằng cách chuyển URL sang 81 và lấy HTML với thuộc tính 27: 6 46 là một ví dụ 49. Vì trang chỉ có một biểu mẫu duy nhất trên đó, bạn có thể truy cập biểu mẫu thông qua 52. Sử dụng 64, chọn đầu vào tên người dùng và mật khẩu và điền chúng với tên người dùng 53 và mật khẩu 54: 7Bây giờ biểu mẫu đã được điền, bạn có thể gửi nó với 55: 8Nếu bạn điền vào biểu mẫu bằng tên người dùng và mật khẩu chính xác, thì 62 sẽ thực sự trỏ đến trang 04. 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 92 9Bạ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 93 hoặc một cái gì đó khác, thì việc gửi biểu mẫu không thành công.Khi 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ể tìm nạp dữ liệu 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. Trong những ngày đen tối trước khi bạn biết 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 nội dung được cập nhật có khả dụng không. Nhưng bây giờ bạn có thể tự động hóa quá trình này bằng phương pháp 19 của đối tượng Cơ khí 17.Mở trình duyệt của bạn lựa chọn và điều hướng đến URL 96:Trang 97 này mô phỏng một cuộn của một khuôn sáu mặt, cập nhật kết quả mỗi lần 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 xóa trang cho một 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 cuộn chết. Làm điều này ngay bây giờ bằng cách nhấp chuột phải vào bất cứ đâu trên trang và chọn nguồn xem nguồn trang. Hơn một nửa xuống mã HTML là một thẻ 98 trông như thế này:Văn bản của thẻ 98 có thể khác nhau đối với bạn, nhưng đây là phần tử trang bạn cần để lấy kết quả.Bây giờ bắt đầu bằng cách viết một chương trình đơn giản mở trang 97, xóa kết quả và in nó lên bảng điều khiển: 1Ví dụ này sử dụng phương thức 49 đối tượng 64 để tìm phần tử với 03. Chuỗi 04, mà bạn chuyển sang 64, sử dụng bộ chọn ID CSS 06 để chỉ ra rằng 07 là giá trị 08.Để định kỳ nhận được một 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, tất cả mọi thứ bên dưới dòng 09 trong mã trên cần phải đi trong phần thân của vòng lặp.Trong ví dụ này, bạn muốn có bốn cuộn xúc xắc trong khoảng thời gian mười giây. Để làm điều đó, dòng cuối cùng của mã của bạn cần nói với Python tạm dừng chạy trong mười giây. Bạn có thể làm điều này với 10 từ mô -đun Python từ ____311. Phương pháp 10 có một đối số duy nhất thể hiện lượng thời gian ngủ trong vài giây.Dưới đây, một ví dụ minh họa cách 13 hoạt động: 2Khi bạn chạy mã này, bạn sẽ thấy rằng thông báo 14 được hiển thị cho đến khi năm giây được truyền từ khi hàm 48 đầu tiên được thực thi.Đối với ví dụ cuộn chết, bạn sẽ cần chuyển số 16 cho 13. Tại đây, chương trình cập nhật: 3Khi bạn chạy chương trình, bạn sẽ ngay lập tức thấy kết quả đầu tiên được in vào bảng điều khiển. Sau mười giây, kết quả thứ hai được hiển thị, sau đó là lần thứ ba và cuối cùng là lần thứ tư. Điều gì xảy ra sau kết quả thứ tư được in? Chương trình tiếp tục chạy thêm mười giây trước khi cuối cùng nó dừng lại. Đó là một loại 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 18 để chạy 19 chỉ với ba yêu cầu đầu tiên: 4Với các kỹ thuật như thế này, bạn có thể quét dữ liệu từ các trang web cập nhật định kỳ dữ liệu của họ. Tuy nhiên, bạn nên lưu ý rằng việc yêu cầu một trang liên tiếp nhiều lần có thể được coi là đáng ngờ, hoặc thậm chí là độc hại, sử dụng một trang web. Nó thậm chí có thể làm hỏng một máy chủ với số lượng yêu cầu quá mức, vì vậy bạn có thể tưởng tượng rằng nhiều trang web lo ngại về khối lượng yêu cầu đối với máy chủ của họ! Luôn kiểm tra các điều khoản sử dụng và được tôn trọng khi gửi nhiều yêu cầu đến một trang web. Sự kết luậnMặc dù nó có thể phân tích dữ liệu từ web bằng các công cụ trong thư viện tiêu chuẩn 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 cách:
Viết các chương trình cạo web tự động là 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ớ, không phải ai cũng muốn bạn lấy dữ liệu từ các máy chủ web của họ. Luôn luôn kiểm tra một trang web Điều khoản sử dụng trước khi bạn bắt đầu cào và tôn trọng cách bạn có thời gian 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. Tài nguyên bổ sungĐể biết thêm thông tin về việc quét web với Python, hãy xem các tài nguyên sau:
|