Hướng dẫn python find text on web page - python tìm văn bản trên trang web

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

Hướng dẫn python find text on web page - python tìm văn bản trên trang web

1

Bạn có thể làm một cái gì đó đơn giản như:


import urllib2
import re

html_content = urllib2.urlopen('http://www.domain.com').read()

matches = re.findall('regex of string to find', html_content);

if len(matches) == 0: 
   print 'I did not find anything'
else:
   print 'My string is in the html'

Đã 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:

  • Phân tích dữ liệu trang web sử dụng các phương thức chuỗi và biểu thức thông thườngstring methods and regular expressions
  • Phân tích dữ liệu trang web sử dụng trình phân tích cú pháp HTMLHTML parser
  • Tương tác với các biểu mẫu và các thành phần trang web khácforms and other website components

Scrape và Parse văn bản từ các trang web

Thu 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ể:

  1. Trang web có một lý do chính đáng để bảo vệ dữ liệu của nó. Chẳng hạn, Google Maps không cho phép bạn yêu cầu quá nhiều kết quả quá nhanh.
  2. Thực hiện nhiều yêu cầu lặp đi lặp lại đến máy chủ trang web có thể sử dụng băng thông, làm chậm trang web cho người dùng khác và có khả năng quá tải máy chủ sao cho trang web ngừng phản hồi hoàn toàn.

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ạn

Mộ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à

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
5, chứa các công cụ để làm việc với các URL. Cụ thể, mô -đun
>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
6 chứa một hàm gọi là
>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
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

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
7:

>>>

>>> from urllib.request import urlopen

Trang web mà bạn sẽ mở ở URL sau:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"

Trang web mà bạn sẽ mở ở URL sau:

>>>

>>> page = urlopen(url)

Trang web mà bạn sẽ mở ở URL sau:

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>

Trang web mà bạn sẽ mở ở URL sau:

>>>

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")

Trang web mà bạn sẽ mở ở URL sau:

>>>

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

Trang web mà bạn sẽ mở ở URL sau:

Hướng dẫn python find text on web page - python tìm văn bản trên trang web

Để mở trang web, chuyển

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
9 đến
>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
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

>>> 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 đối tượng ____ ____64, trả về một chuỗi byte. Sau đó 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>
5 để giải mã byte thành chuỗi bằng UTF-8:
—or regexes for short—are patterns that you can use to search for text within a string. Python supports regular expressions through the standard library’s
>>> 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 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

>>> 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>
6:metacharacters to denote different patterns. For instance, the asterisk character (
>>> re.findall("ab*c", "ac")
['ac']
0) stands for zero or more instances of whatever comes just before the asterisk.

Trong ví dụ sau, bạn sử dụng

>>> re.findall("ab*c", "ac")
['ac']
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:

>>>

>>> re.findall("ab*c", "ac")
['ac']

Đối số đầu tiên của

>>> re.findall("ab*c", "ac")
['ac']
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
>>> re.findall("ab*c", "ac")
['ac']
3 trong chuỗi
>>> re.findall("ab*c", "ac")
['ac']
4.

Biểu thức thông thường

>>> re.findall("ab*c", "ac")
['ac']
3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng
>>> re.findall("ab*c", "ac")
['ac']
6, kết thúc bằng
>>> re.findall("ab*c", "ac")
['ac']
7 và có số lượng hoặc nhiều phiên bản là
>>> re.findall("ab*c", "ac")
['ac']
8 giữa hai.
>>> re.findall("ab*c", "ac")
['ac']
2 Trả về một danh sách tất cả các trận đấu. Chuỗi
>>> re.findall("ab*c", "ac")
['ac']
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:

>>>

>>> re.findall("ab*c", "abcd")
['abc']

>>> re.findall("ab*c", "acc")
['ac']

>>> re.findall("ab*c", "abcac")
['abc', 'ac']

>>> re.findall("ab*c", "abdc")
[]

Đối số đầu tiên của

>>> re.findall("ab*c", "ac")
['ac']
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
>>> re.findall("ab*c", "ac")
['ac']
3 trong chuỗi
>>> re.findall("ab*c", "ac")
['ac']
4.

Biểu thức thông thường

>>> re.findall("ab*c", "ac")
['ac']
3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng
>>> re.findall("ab*c", "ac")
['ac']
6, kết thúc bằng
>>> re.findall("ab*c", "ac")
['ac']
7 và có số lượng hoặc nhiều phiên bản là
>>> re.findall("ab*c", "ac")
['ac']
8 giữa hai.
>>> re.findall("ab*c", "ac")
['ac']
2 Trả về một danh sách tất cả các trận đấu. Chuỗi
>>> re.findall("ab*c", "ac")
['ac']
4 phù hợp với mẫu này, do đó, nó đã được trả lại trong danh sách.

>>>

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']

Đối số đầu tiên của

>>> re.findall("ab*c", "ac")
['ac']
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
>>> re.findall("ab*c", "ac")
['ac']
3 trong chuỗi
>>> re.findall("ab*c", "ac")
['ac']
4.

>>>

>>> from urllib.request import urlopen
0

Đối số đầu tiên của

>>> re.findall("ab*c", "ac")
['ac']
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
>>> re.findall("ab*c", "ac")
['ac']
3 trong chuỗi
>>> re.findall("ab*c", "ac")
['ac']
4.

>>>

>>> from urllib.request import urlopen
1

Biểu thức thông thường

>>> re.findall("ab*c", "ac")
['ac']
3 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng
>>> re.findall("ab*c", "ac")
['ac']
6, kết thúc bằng
>>> re.findall("ab*c", "ac")
['ac']
7 và có số lượng hoặc nhiều phiên bản là
>>> re.findall("ab*c", "ac")
['ac']
8 giữa hai.
>>> re.findall("ab*c", "ac")
['ac']
2 Trả về một danh sách tất cả các trận đấu. Chuỗi
>>> re.findall("ab*c", "ac")
['ac']
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:

>>>

>>> from urllib.request import urlopen
2

Lưu ý rằng nếu không tìm thấy trận đấu nào, thì

>>> re.findall("ab*c", "ac")
['ac']
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ị

>>> re.findall("ab*c", "abcd")
['abc']

>>> re.findall("ab*c", "acc")
['ac']

>>> re.findall("ab*c", "abcac")
['abc', 'ac']

>>> re.findall("ab*c", "abdc")
[]
2:

>>>

>>> from urllib.request import urlopen
3

Bạn có thể sử dụng một khoảng thời gian (

>>> re.findall("ab*c", "abcd")
['abc']

>>> re.findall("ab*c", "acc")
['ac']

>>> re.findall("ab*c", "abcac")
['abc', 'ac']

>>> re.findall("ab*c", "abdc")
[]
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
>>> re.findall("ab*c", "ac")
['ac']
6 và
>>> re.findall("ab*c", "ac")
['ac']
7 được phân tách bởi một ký tự như sau:

Mẫu

>>> re.findall("ab*c", "abcd")
['abc']

>>> re.findall("ab*c", "acc")
['ac']

>>> re.findall("ab*c", "abcac")
['abc', 'ac']

>>> re.findall("ab*c", "abdc")
[]
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
>>> re.findall("ab*c", "abcd")
['abc']

>>> re.findall("ab*c", "acc")
['ac']

>>> re.findall("ab*c", "abcac")
['abc', 'ac']

>>> re.findall("ab*c", "abdc")
[]
7 để tìm mọi bộ nền bắt đầu bằng
>>> re.findall("ab*c", "ac")
['ac']
6 và kết thúc bằng
>>> re.findall("ab*c", "ac")
['ac']
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

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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
>>> re.findall("ab*c", "ac")
['ac']
2 vì nó trả về một đối tượng được gọi là
>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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à
>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
0 trả về mọi kết quả có thể.

>>>

>>> from urllib.request import urlopen
4

Các chi tiết của

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
2 không liên quan ở đây. Hiện tại, chỉ cần biết rằng gọi
>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
5 trên
>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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.

>>>

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
8 sử dụng biểu thức thông thường
>>> from urllib.request import urlopen
02 để tìm và thay thế mọi thứ giữa lần đầu tiên ____10103 và
>>> from urllib.request import urlopen
04 cuối cùng, kéo dài từ đầu
>>> from urllib.request import urlopen
05 đến cuối
>>> from urllib.request import urlopen
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ư
>>> re.findall("ab*c", "ac")
['ac']
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

>>> from urllib.request import urlopen
08, hoạt động giống như
>>> re.findall("ab*c", "ac")
['ac']
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,

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
8 tìm thấy hai trận đấu,
>>> from urllib.request import urlopen
05 và
>>> from urllib.request import urlopen
06 và thay thế chuỗi
>>> from urllib.request import urlopen
13 cho cả hai trận đấu.

Kiểm tra việc hiểu của bạn

>>> from urllib.request import urlopen
6

Mở rộng khối dưới đây để kiểm tra sự hiểu biết của bạn.

>>> from urllib.request import urlopen
7

Viết một chương trình lấy toàn bộ HTML từ URL sau:

>>> from urllib.request import urlopen
5

Sau đó sử dụng

>>> from urllib.request import urlopen
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.

>>> from urllib.request import urlopen
8

Có vẻ như có rất nhiều thứ đang diễn ra trong vòng lặp

>>> from urllib.request import urlopen
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ó:

  1. Bạn sử dụng

    >>> from urllib.request import urlopen
    
    28 để tìm chỉ mục bắt đầu của chuỗi,
    >>> from urllib.request import urlopen
    
    23 hoặc
    >>> from urllib.request import urlopen
    
    30, sau đó gán chỉ mục cho
    >>> from urllib.request import urlopen
    
    31.

  2. Vì văn bản để trích xuất bắt đầu ngay sau đại tràng trong

    >>> from urllib.request import urlopen
    
    23 hoặc
    >>> from urllib.request import urlopen
    
    30, bạn sẽ nhận được chỉ số của ký tự ngay sau đại tràng bằng cách thêm độ dài của chuỗi vào
    >>> from urllib.request import urlopen
    
    34, sau đó gán kết quả cho
    >>> from urllib.request import urlopen
    
    35.

  3. Bạn tính toán chỉ số kết thúc của văn bản để trích xuất bằng cách xác định chỉ số của khung góc đầu tiên (

    >>> from urllib.request import urlopen
    
    03) so với
    >>> from urllib.request import urlopen
    
    35 và gán giá trị này cho
    >>> from urllib.request import urlopen
    
    38. Sau đó, bạn thêm giá trị đó vào
    >>> from urllib.request import urlopen
    
    35 và gán kết quả cho
    >>> from urllib.request import urlopen
    
    40.

  4. Bạn trích xuất văn bản bằng cách cắt

    >>> from urllib.request import urlopen
    
    22 từ
    >>> from urllib.request import urlopen
    
    35 đến
    >>> from urllib.request import urlopen
    
    40 và gán chuỗi này cho
    >>> from urllib.request import urlopen
    
    44.

  5. Bạn loại bỏ bất kỳ khoảng trắng nào từ đầu và cuối của

    >>> from urllib.request import urlopen
    
    44 bằng cách sử dụng
    >>> from urllib.request import urlopen
    
    46 và gán kết quả cho
    >>> from urllib.request import urlopen
    
    47.

Ở cuối vòng lặp, bạn sử dụng

>>> from urllib.request import urlopen
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 Python

Mặ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:

>>> from urllib.request import urlopen
9

Vớ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 49

Nhập chương trình sau vào cửa sổ Trình chỉnh sửa mới:

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
0

Chương trình này thực hiện ba điều:

  1. Mở URL

    >>> from urllib.request import urlopen
    
    50 bằng cách sử dụng
    >>> html_bytes = page.read()
    >>> html = html_bytes.decode("utf-8")
    
    7 từ mô -đun
    >>> html_bytes = page.read()
    >>> html = html_bytes.decode("utf-8")
    
    6

  2. Đọc HTML từ trang dưới dạng chuỗi và gán nó cho biến

    >>> from urllib.request import urlopen
    
    53

  3. Tạo một đối tượng

    >>> from urllib.request import urlopen
    
    49 và gán nó cho biến
    >>> from urllib.request import urlopen
    
    55

Đối tượng

>>> from urllib.request import urlopen
49 được gán cho
>>> from urllib.request import urlopen
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
>>> from urllib.request import urlopen
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.
>>> from urllib.request import urlopen
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 49

Lưu và chạy chương trình trên. Khi nó chạy xong, bạn có thể sử dụng biến

>>> from urllib.request import urlopen
55 trong cửa sổ tương tác để phân tích nội dung của
>>> from urllib.request import urlopen
53 theo nhiều cách khác nhau.

Ví dụ: các đối tượng

>>> from urllib.request import urlopen
49 có phương thức
>>> from urllib.request import urlopen
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:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
1

Có 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

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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

>>> from urllib.request import urlopen
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

>>> from urllib.request import urlopen
67 của các thẻ
>>> from urllib.request import urlopen
68 HTML.

Trong trường hợp này, bạn có thể sử dụng

>>> from urllib.request import urlopen
69 để trả về danh sách tất cả các trường hợp của thẻ cụ thể đó:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
2

Có 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

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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

>>> from urllib.request import urlopen
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.

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
3

Có 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

>>> re.findall("ab*c", "ABC")
[]

>>> re.findall("ab*c", "ABC", re.IGNORECASE)
['ABC']
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

>>> from urllib.request import urlopen
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

>>> from urllib.request import urlopen
67 của các thẻ
>>> from urllib.request import urlopen
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

>>> from urllib.request import urlopen
67 bằng cách sử dụng ký hiệu từ điển được đề cập ở trên:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
4

Mộ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

>>> from urllib.request import urlopen
71. Ví dụ: để nhận thẻ
>>> from urllib.request import urlopen
85 trong tài liệu, bạn có thể sử dụng thuộc tính
>>> from urllib.request import urlopen
86:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
5

Mộ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

>>> from urllib.request import urlopen
71. Ví dụ: để nhận thẻ
>>> from urllib.request import urlopen
85 trong tài liệu, bạn có thể sử dụng thuộc tính
>>> from urllib.request import urlopen
86:

Hướng dẫn python find text on web page - python tìm văn bản trên trang web

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ẻ

>>> from urllib.request import urlopen
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 (

>>> from urllib.request import urlopen
88) trong thẻ đóng.

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
6

Mộ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

>>> from urllib.request import urlopen
71. Ví dụ: để nhận thẻ
>>> from urllib.request import urlopen
85 trong tài liệu, bạn có thể sử dụng thuộc tính
>>> from urllib.request import urlopen
86:

>>>

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
7

Mộ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

>>> from urllib.request import urlopen
71. Ví dụ: để nhận thẻ
>>> from urllib.request import urlopen
85 trong tài liệu, bạn có thể sử dụng thuộc tính
>>> from urllib.request import urlopen
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ẻ

>>> from urllib.request import urlopen
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 (

>>> from urllib.request import urlopen
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

>>> from urllib.request import urlopen
89 của đối tượng
>>> from urllib.request import urlopen
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ẻ

>>> from urllib.request import urlopen
68 có thuộc tính
>>> from urllib.request import urlopen
67 bằng với giá trị
>>> from urllib.request import urlopen
93, thì bạn có thể cung cấp đối số bổ sung sau đây cho
>>> from urllib.request import urlopen
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

>>> from urllib.request import urlopen
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.

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
8

Kiể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

>>> from urllib.request import urlopen
96.

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
9

Sử 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

>>> from urllib.request import urlopen
97 và lấy giá trị được thực hiện bởi thuộc tính
>>> from urllib.request import urlopen
81 của mỗi thẻ.relative URL, so create a
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
05 variable with the base URL of the website:

>>> page = urlopen(url)
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 (

>>> from urllib.request import urlopen
88) giữa URL cơ sở và URL tương đối.

>>> page = urlopen(url)
1

Bạn có thể mở rộng khối bên dưới để xem giải pháp:

>>> page = urlopen(url)
2

Đầu tiên, nhập chức năng

>>> from urllib.request import urlopen
15 từ mô -đun
>>> from urllib.request import urlopen
16 và lớp
>>> from urllib.request import urlopen
49 từ gói
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
03:

>>> page = urlopen(url)
3

Mỗi URL liên kết trên trang

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
04 là một URL tương đối, vì vậy hãy tạo biến
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> from urllib.request import urlopen
49 mới để phân tích HTML:

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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 MechanicalSoup

Bạn có thể cài đặt MechanicalSoup với

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
16 trong thiết bị đầu cuối của mình:

>>> page = urlopen(url)
4

Bạ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" 17

Nhập phần sau vào cửa sổ tương tác Idle:

>>>

>>> page = urlopen(url)
5

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

>>>

>>> page = urlopen(url)
6

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

>>>

>>> page = urlopen(url)
7

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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:

>>>

>>> page = urlopen(url)
8

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

>>>

>>> page = urlopen(url)
9

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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ố

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
24 nếu URL không tồn tại hoặc
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
25 nếu có lỗi máy chủ khi đưa ra yêu cầu.

Hướng dẫn python find text on web page - python tìm văn bản trên trang web

MechanicalSoup sử dụng súp đẹp để phân tích HTML khỏi yêu cầu và

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
20 có thuộc tính
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
27 đại diện cho một đối tượng
>>> from urllib.request import urlopen
49:

Bạn có thể xem HTML bằng cách kiểm tra thuộc tính

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
27:

Lưu ý trang này có
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
30 trên đó với các phần tử
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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í
Mở trang
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
32 từ ví dụ trước trong trình duyệt và tự mình xem nó trước khi tiếp tục:
Hãy thử gõ vào 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 không chính xác, thì tin nhắn sai tên người dùng hoặc mật khẩu! được hiển thị ở cuối 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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
04:

tên tài khoản

Mật khẩu

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
34

>>> page
<http.client.HTTPResponse object at 0x105fef820>
0

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
35F5 to run it. To confirm that you’ve successfully logged in, type the following into the interactive window:

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
1

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

  1. >>> 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:

  2. Số

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    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
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    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
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    24 nếu URL không tồn tại hoặc
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    25 nếu có lỗi máy chủ khi đưa ra yêu cầu.

  3. MechanicalSoup sử dụng súp đẹp để phân tích HTML khỏi yêu cầu và

    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    20 có thuộc tính
    >>> url = "http://olympus.realpython.org/profiles/aphrodite"
    
    27 đại diện cho một đối tượng
    >>> from urllib.request import urlopen
    
    49:

Bạn có thể xem HTML bằng cách kiểm tra thuộc tính

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
27:

Lưu ý trang này có

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
30 trên đó với các phần tử
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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í

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
2

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
3

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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:

>>>

>>> page
<http.client.HTTPResponse object at 0x105fef820>
4

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của họ:

Kiểm tra việc hiểu của bạn

Mở 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 (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
34) và mật khẩu (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
35) cho mẫu đăng nhập nằm ở URL
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
04.

Chương trình của bạn nên in văn bản

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
79 và tạo đối tượng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
80:

>>> page
<http.client.HTTPResponse object at 0x105fef820>
5

Trình trình duyệt vào trang đăng nhập bằng cách chuyển URL sang

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
81 và lấy HTML với thuộc tính
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
27:

>>> page
<http.client.HTTPResponse object at 0x105fef820>
6

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
46 là một ví dụ
>>> from urllib.request import urlopen
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
52. Sử dụng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
53 và mật khẩu
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
54:

>>> page
<http.client.HTTPResponse object at 0x105fef820>
7

Bây giờ biểu mẫu đã được điền, bạn có thể gửi nó với

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
55:

>>> page
<http.client.HTTPResponse object at 0x105fef820>
8

Nế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ì

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
62 sẽ thực sự trỏ đến trang
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
92

>>> page
<http.client.HTTPResponse object at 0x105fef820>
9

Bạn sẽ thấy văn bản sau được hiển thị:

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
0

Nếu thay vào đó bạn thấy văn bản

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19 của đối tượng Cơ khí
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
17.

Mở trình duyệt của bạn lựa chọn và điều hướng đến URL

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
96:

Hướng dẫn python find text on web page - python tìm văn bản trên trang web

Trang

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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ẻ

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
98 trông như thế này:

Văn bản của thẻ

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
97, xóa kết quả và in nó lên bảng điều khiển:

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
1

Ví dụ này sử dụng phương thức

>>> from urllib.request import urlopen
49 đối tượng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
64 để tìm phần tử với
>>> page = urlopen(url)
03. Chuỗi
>>> page = urlopen(url)
04, mà bạn chuyển sang
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
64, sử dụng bộ chọn ID CSS
>>> page = urlopen(url)
06 để chỉ ra rằng
>>> page = urlopen(url)
07 là giá trị
>>> page = urlopen(url)
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

>>> page = urlopen(url)
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

>>> page = urlopen(url)
10 từ mô -đun Python từ ____311. Phương pháp
>>> page = urlopen(url)
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

>>> page = urlopen(url)
13 hoạt động:

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
2

Khi bạn chạy mã này, bạn sẽ thấy rằng thông báo

>>> page = urlopen(url)
14 được hiển thị cho đến khi năm giây được truyền từ khi hàm
>>> from urllib.request import urlopen
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ố

>>> page = urlopen(url)
16 cho
>>> page = urlopen(url)
13. Tại đây, chương trình cập nhật:

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
3

Khi 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

>>> page = urlopen(url)
18 để chạy
>>> page = urlopen(url)
19 chỉ với ba yêu cầu đầu tiên:

>>> html_bytes = page.read()
>>> html = html_bytes.decode("utf-8")
4

Vớ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ận

Mặ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:

  • Yêu cầu một trang web bằng cách sử dụng mô-đun
    >>> html_bytes = page.read()
    >>> html = html_bytes.decode("utf-8")
    
    5 tích hợp Python
    >>> html_bytes = page.read()
    >>> html = html_bytes.decode("utf-8")
    
    5
    module
  • Parse html sử dụng súp đẹpBeautiful Soup
  • Tương tác với các biểu mẫu web bằng cách sử dụng cơ khíMechanicalSoup
  • Liên tục yêu cầu dữ liệu từ một trang web để kiểm tra các bản cập nhậtcheck for updates

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:

  • Súp đẹp: Xây dựng một cái cạp web với Python
  • Tích hợp API trong Python
  • Python & API: Một combo chiến thắng để đọc dữ liệu công khai