Làm cách nào để tìm nạp nội dung html trong python?

Để có được nó, trước tiên bạn cần cài đặt Selenium và trình điều khiển web. Bạn có thể để Python kích hoạt trình duyệt web, mở URL của trang web và lấy mã nguồn HTML

khóa học liên quan

  • Khóa học & ví dụ về tự động hóa web Selenium

Cài đặt Selenium

Để bắt đầu, hãy cài đặt mô-đun Selenium cho Python

1
pip install selenium

Đối với người dùng windows, hãy làm điều này thay thế

1
pip.exe install selenium

Bạn nên làm điều đó trong môi trường ảo bằng virtualenv
Nếu bạn sử dụng IDE PyCharm, bạn có thể cài đặt mô-đun từ bên trong IDE

Đảm bảo rằng bạn đã cài đặt trình điều khiển web, nếu không nó sẽ không hoạt động

Selenium lấy HTML

Bạn có thể truy xuất nguồn HTML của một URL bằng mã được hiển thị bên dưới
Đầu tiên, nó khởi động trình duyệt web (Firefox), tải trang rồi xuất mã HTML

Đoạn mã dưới đây khởi động trình duyệt web Firefox, mở một trang web bằng phương thức get() và cuối cùng lưu trữ html của trang web bằng trình duyệt. trang_source

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#_*_coding: utf-8_*_

from selenium import webdriver
import time

# start web browser
browser=webdriver.Firefox()

# get source code
browser.get("https://en.wikipedia.org")
html = browser.page_source
time.sleep(2)
print(html)

# close web browser
browser.close()

Làm cách nào để tìm nạp nội dung html trong python?

Điều này được thực hiện trong một vài bước đầu tiên khi nhập selen và mô-đun thời gian

1
2
from selenium import webdriver
import time

Nó khởi động trình duyệt web với một dòng mã. Trong ví dụ này, chúng tôi sử dụng Firefox, nhưng bất kỳ trình duyệt nào được hỗ trợ. sẽ làm (Chrome, Edge, PhantomJS)

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ẽ

Internet có lẽ là nguồn thông tin lớn nhất trên hành tinh. Nhiều lĩnh vực, 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

  • Phân tích dữ liệu trang web bằng các phương thức chuỗi và biểu thức chính quy
  • Phân tích dữ liệu trang web bằng trình phân tích cú pháp HTML
  • Tương tác với các biểu mẫu và các thành phần trang web khác

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 web

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

  1. Trang web có lý do chính đáng để bảo vệ dữ liệu của mình. 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 lại đối với máy chủ của trang web có thể sử dụng hết băng thông, làm chậm trang web đối với những người dùng khác và có khả năng làm quá tải máy chủ khiến 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 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 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áo

Xây dựng công cụ quét web đầu tiên của bạn

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

>>> title_index = html.find(""</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>6, chứa các công cụ để làm việc với URL. Đặc biệt, mô-đun <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>7 chứa một chức năng có tên là <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8 mà bạn có thể sử dụng để mở một URL trong chương trình</p><p>Trong cửa sổ tương tác của IDLE, hãy nhập nội dung sau để nhập <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8</p><p><span>>>></span> <pre><code><span>>>> </span><span>from</span> <span>urllib.request</span> <span>import</span> <span>urlopen</span>
</code></pre></p><p>Trang web mà bạn sẽ mở nằm ở URL sau</p><p><span>>>></span> <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre></p><p>Để mở trang web, hãy chuyển <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>0 đến <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre></p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8 trả về một đối tượng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>3</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre></p><p>Để trích xuất HTML từ trang, trước tiên hãy sử dụng phương thức <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>5 của đối tượng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>3, phương thức này trả về một chuỗi byte. Sau đó, sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>6 để giải mã các byte thành một chuỗi bằng cách sử dụng</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre></p><p>Bây giờ bạn có thể in HTML để xem nội dung của trang web</p><p><span>>>></span> <pre><code><span>>>> </span><span>print</span><span>(</span><span>html</span><span>)</span>
<span><html></span>
<span><head></span>
<span><title>Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus

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

>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>7</p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvd2Vic2l0ZV9hcGhyb2RpdGUuMTBiNjcwNDdlYmMyLnBuZw==.webp" ></img></div><p>Với <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>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 nhau</p></section><section><h3 id="trich-xuat-van-ban-tu-html-bang-cac-phuong-thuc-chuoi">Trích xuất văn bản từ HTML bằng các phương thức chuỗi</h3><p>Một cách để trích xuất thông tin từ HTML của trang web là sử dụng. Chẳng hạn, bạn có thể sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>9 để tìm kiếm trong văn bản HTML cho các thẻ <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39
0 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

>>> end_index = html.find("")
>>> end_index
39
1, thì bạn có thể sử dụng a để trích xuất tiêu đề

Bởi vì

>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>9 trả về chỉ số 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 <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39
0 bằng cách chuyển chuỗi
>>> end_index = html.find("")
>>> end_index
39
4 đến
>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>9</p><p><span>>>></span> <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre></p><p>Tuy nhiên, bạn không muốn chỉ mục của thẻ <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39
0. 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
>>> end_index = html.find("")
>>> end_index
39
4 vào
>>> end_index = html.find("")
>>> end_index
39
8

>>>

>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre></p><p>Bây giờ hãy lấy chỉ mục của thẻ đóng <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39
1 bằng cách chuyển chuỗi
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
0 đến
>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>9</p><p><span>>>></span> <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39

Cuối cùng, bạn có thể trích xuất tiêu đề bằng cách cắt chuỗi

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
2

>>>

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'

HTML 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

>>>

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

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

>>>

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

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

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
3 trông tương tự như trang
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
4, nhưng có một sự khác biệt nhỏ. Thẻ mở
>>> end_index = html.find("")
>>> end_index
39
0 có thêm một khoảng trống trước dấu ngoặc nhọn đóng (
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
6), hiển thị nó thành
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
7

>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
8 trả về
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
9 vì chuỗi con chính xác
>>> end_index = html.find("")
>>> end_index
39
4 không tồn tại. Khi
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
9 được thêm vào
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
02, tức là ____13_______03, biến ___13_______04 được gán giá trị ____13_______05

Ký tự tại chỉ mục

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
05 của chuỗi
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
2 là một ký tự xuống dòng (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
08) ngay trước dấu ngoặc nhọn mở (
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
09) của thẻ
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
10. Điều này có nghĩa là
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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ẻ
>>> end_index = html.find("")
>>> end_index
39
1

Nhữ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áo

Làm quen với biểu thức chính quy

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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
13 của thư viện chuẩn

Ghi 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

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

>>>

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

Biể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ị (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15) là viết tắt của 0 hoặc nhiều trường hợp bất kỳ xuất hiện ngay trước dấu hoa thị

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

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

>>>

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

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

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
18 trong chuỗi
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
19

Biểu thức chính quy

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
18 khớp với bất kỳ phần nào của chuỗi bắt đầu bằng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21, kết thúc bằng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22 và không có hoặc nhiều phiên bản
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
23 giữa hai.
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
17 trả về một danh sách tất cả các trận đấu. Chuỗi
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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

>>>

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

Lưu ý rằng nếu không tìm thấy kết quả khớp, thì

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
16 trả về một danh sách trống

Khớ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ị

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

>>>

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

Bạn có thể sử dụng dấu chấm (

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 và
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22 được phân tách bằng một ký tự như sau

>>>

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

Mẫu

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
31 bên trong 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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
32 để tìm mọi chuỗi con bắt đầu bằng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 và kết thúc bằng
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
22, bất kể chữ cái nào—hoặc các chữ cái—nằm ở giữa

>>>

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

Thông thường, bạn sử dụng

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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 hàm
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
17 vì nó trả về một đối tượng có tên là
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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à
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
35 trả về mọi kết quả có thể

Các chi tiết của

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
37 không liên quan ở đây. Hiện tại, bạn chỉ cần biết rằng gọi ____13_______40 trên ____13_______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

>>>

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

Có thêm một chức năng trong mô-đun

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
13 hữu ích để phân tích văn bản. , 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
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
44

Các đối số được chuyển đến

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
43 là biểu thức chính quy, theo sau là văn bản thay thế, theo sau là chuỗi. Đây là một ví dụ

>>>

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

Có lẽ đó không phải là những gì bạn mong đợi sẽ xảy ra

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
43 sử dụng biểu thức chính quy
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
47 để tìm và thay thế mọi thứ giữa
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
09 đầu tiên và
>>> title = html[start_index:end_index]
>>> title
'Profile: Aphrodite'
6 cuối cùng, kéo dài từ đầu
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
50 đến cuối
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
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ư
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15 được sử dụng

Ngoài ra, bạn có thể sử dụng mẫu so khớp không tham lam

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
53, kiểu này hoạt động tương tự như
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
15 ngoại trừ việc nó khớp với chuỗi văn bản ngắn nhất có thể

>>>

>>> page = urlopen(url)
0

Lần này,

>>> url = "http://olympus.realpython.org/profiles/aphrodite"
43 tìm thấy hai kết quả trùng khớp,
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
50 và
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
51, đồng thời thay thế chuỗi
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
58 cho cả hai kết quả trùng khớp

Loại bỏ các quảng cáo

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

>>> page = urlopen(url)
1

Phương thức

>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>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ả</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>2</p><p>Hãy xem xét kỹ hơn biểu thức chính quy đầu tiên trong chuỗi <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>60 bằng cách chia nó thành ba phần</p><ol><li><p><pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>61 khớp với thẻ mở đầu <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>62 trong <pre><code><span>>>> </span><span>title</span> <span>=</span> <span>html</span><span>[</span><span>start_index</span><span>:</span><span>end_index</span><span>]</span>
<span>>>> </span><span>title</span>
<span>'Profile: Aphrodite'</span>
</code></pre>2. Phần <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>64 của mẫu khớp với <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>65 vì <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>35 được gọi với <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>27 và <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>68 khớp với bất kỳ văn bản nào sau <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>65 cho đến phiên bản đầu tiên của <pre><code><span>>>> </span><span>title</span> <span>=</span> <span>html</span><span>[</span><span>start_index</span><span>:</span><span>end_index</span><span>]</span>
<span>>>> </span><span>title</span>
<span>'Profile: Aphrodite'</span>
</code></pre>6</p></li><li><p><pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>71 đối sánh không tham lam tất cả văn bản sau phần mở đầu <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>62, dừng ở đối sánh đầu tiên cho <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>73</p></li><li><p><pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>73 chỉ khác với mẫu đầu tiên ở chỗ nó sử dụng ký tự <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>75, vì vậy nó khớp với thẻ đóng <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>76 trong <pre><code><span>>>> </span><span>title</span> <span>=</span> <span>html</span><span>[</span><span>start_index</span><span>:</span><span>end_index</span><span>]</span>
<span>>>> </span><span>title</span>
<span>'Profile: Aphrodite'</span>
</code></pre>2</p><div style="width:100%; margin:20px auto; display:block">
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid" 
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="8587332220"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></p></li></ol><p>Biểu thức chính quy thứ hai, chuỗi <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>78, cũng sử dụng giá trị không tham lam <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>71 để khớp với tất cả các thẻ HTML trong chuỗi <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>80. Bằng cách thay thế bất kỳ kết quả phù hợp nào bằng <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>81, <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>43 sẽ xóa tất cả các thẻ và chỉ trả về văn bản</p><p><p>Ghi 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 đề đó</p><p>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</p></section><section><h3 id="kiem-tra-viec-hieu-cua-ban">Kiểm tra việc hiểu của bạn</h3><p>Mở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn</p><p><p><p><span>Tập thể dục. Cạo dữ liệu từ một trang web</span><span>Hiển thị/Ẩn</span></p><p><p><p>Viết chương trình lấy toàn bộ HTML từ URL sau</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>3</p><p>Sau đó sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>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)</p><p>Bạn có thể mở rộng khối bên dưới để xem giải pháp</p><p><p><p><span>Giải pháp. Cạo dữ liệu từ một trang web</span><span>Hiển thị/Ẩn</span></p><p><p><p>Đầu tiên, nhập hàm <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>84 từ mô-đun <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>85</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>4</p><p>Sau đó mở URL và sử dụng phương thức <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>5 của đối tượng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>3 được trả về bởi <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8 để đọc HTML của trang</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>5</p><p>Phương thức <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>5 trả về một chuỗi byte, vì vậy bạn sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>6 để giải mã các byte bằng mã hóa UTF-8</p><p>Bâ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 <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>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 đó</p><p>Bạn có thể lấy tên bằng cách tìm chuỗi <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>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 (<pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>93) và trước dấu ngoặc nhọn đầu tiên (<pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>09). Bạn có thể sử dụng kỹ thuật tương tự để trích xuất màu yêu thích</p><p>Vòng lặp <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>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</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>6</p><p>Có vẻ như có rất nhiều thứ đang diễn ra trong vòng lặp <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>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. Đi trước và phá vỡ nó</p><ol><li><p>Bạn sử dụng <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>97 để tìm chỉ mục bắt đầu của chuỗi, hoặc là <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>92 hoặc là <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>99, sau đó gán chỉ mục cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>00</p></li><li><p>Vì văn bản cần trích xuất bắt đầu ngay sau dấu hai chấm trong <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>92 hoặc <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>99, nên bạn lấy chỉ mục của ký tự ngay sau dấu hai chấm bằng cách thêm độ dài của chuỗi vào <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>03, sau đó gán kết quả cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>04</p></li><li><p>Bạn tính chỉ số kết thúc của văn bản cần trích xuất bằng cách xác định chỉ số của dấu ngoặc nhọn đầu tiên (<pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>09) so với <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>04 và gán giá trị này cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>07. Sau đó, bạn thêm giá trị đó vào <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>04 và gán kết quả cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>09</p></li><li><p>Bạn trích xuất văn bản bằng cách cắt _______13_______91 từ _______16_______04 thành _______16_______09 và gán chuỗi này cho _______16_______13</p></li><li><p>Bạn xóa mọi khoảng trắng ở đầu và cuối của <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>13 bằng cách sử dụng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>15 và gán kết quả cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>16</p></li></ol><p>Ở cuối vòng lặp, bạn sử dụng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>7</p><p>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 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</p><p>Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo</p></section></section><section><h2 id="su-dung-trinh-phan-tich-cu-phap-html-de-quet-web-bang-python">Sử dụng Trình phân tích cú pháp HTML để quét web bằng Python</h2><p>Mặ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</p><section><h3 id="cai-dat-sup-dep">Cài Đặt Súp Đẹp</h3><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</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>8</p><p>Vớ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</p><p><p></p>Loại bỏ các quảng cáo</p></section><section><h3 id="tao-mot-doi-tuong-gt-gt-gt-page-urlopen-url-18">Tạo một đối tượng >>> page = urlopen(url)
18</h3><p>Nhập chương trình sau vào cửa sổ soạn thảo mới</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>9</p><p>Chương trình này thực hiện ba điều</p><ol><li><p>Mở URL <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>19 bằng cách sử dụng <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8 từ mô-đun <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>7</p></li><li><p>Đọc HTML từ trang dưới dạng chuỗi và gán nó cho biến <pre><code><span>>>> </span><span>title</span> <span>=</span> <span>html</span><span>[</span><span>start_index</span><span>:</span><span>end_index</span><span>]</span>
<span>>>> </span><span>title</span>
<span>'Profile: Aphrodite'</span>
</code></pre>2</p></li><li><p>Tạo một đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 và gán nó cho biến <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>24</p></li></ol><p>Đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 được gán cho <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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. <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>27 đại diện cho trình phân tích cú pháp HTML tích hợp sẵn của Python</p></section><section><h3 id="su-dung-mot-doi-tuong-gt-gt-gt-page-urlopen-url-18">Sử dụng một đối tượng >>> page = urlopen(url)
18</h3><p>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>24 trong cửa sổ tương tác để phân tích nội dung của <pre><code><span>>>> </span><span>title</span> <span>=</span> <span>html</span><span>[</span><span>start_index</span><span>:</span><span>end_index</span><span>]</span>
<span>>>> </span><span>title</span>
<span>'Profile: Aphrodite'</span>
</code></pre>2 theo nhiều cách khác nhau</p><p><p>Ghi 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ờ <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>32 để vào chế độ tương tác. Thứ gì đó như <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>33 trước tiên sẽ chạy chương trình của bạn và sau đó đưa bạn vào một REPL nơi bạn có thể khám phá các đối tượng của mình</p><p>Ví dụ: các đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 có phương thức <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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ẻ HTML</p><p>Nhậ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</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>0</p><p>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ự 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 <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>44 nếu cần</p><p>Thô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 thức chuỗi <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>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ường</p><p>Tuy 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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>38 của thẻ HTML <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>39</p><p>Trong trường hợp này, bạn có thể sử dụng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>40 để trả về danh sách tất cả các phiên bản của thẻ cụ thể đó</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>1</p><p>Điều này trả về một danh sách tất cả các thẻ <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>42 do Beautiful Soup cung cấp. <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>42 đối tượng cung cấp một giao diện đơn giản để làm việc với thông tin mà chúng chứa</p><p>Bạn có thể khám phá điều này một chút bằng cách lần đầu tiên giải nén các đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>42 từ danh sách</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>2</p><p>Mỗi đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>42 có một thuộc tính <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>46 trả về một chuỗi chứa loại thẻ HTML</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>3</p><p>Bạn có thể truy cập các thuộc tính HTML của đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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à khóa trong từ điển</p><p>Ví dụ: thẻ <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>48 có một thuộc tính duy nhất, <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>38, với giá trị <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>50. Tương tự như vậy, một thẻ HTML chẳng hạn như liên kết <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>51 có hai thuộc tính, <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>52 và <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>53</p><p>Để lấy nguồn của các hình ảnh trong trang hồ sơ Dionysus, bạn truy cập thuộc tính <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>38 bằng cách sử dụng ký hiệu từ điển đã đề cập ở trên</p><p><span>>>></span> <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>4</p><p>Mộ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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>42. Ví dụ: để lấy thẻ <pre><code><span>>>> </span><span>end_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"")
>>> end_index
39
0 trong tài liệu, bạn có thể sử dụng thuộc tính
>>> page = urlopen(url)
57

>>>

>>> page

5

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

>>> end_index = html.find("")
>>> end_index
39
0 được viết hoa toàn bộ và có khoảng trắng

Làm cách nào để tìm nạp nội dung html trong python?

Beautiful 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 (_______13_______75) 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

>>> page = urlopen(url)
60 của đối tượng
>>> page = urlopen(url)
42

>>>

>>> page

6

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

>>> page = urlopen(url)
39 có thuộc tính
>>> page = urlopen(url)
38 bằng với giá trị
>>> page = urlopen(url)
64, thì bạn có thể cung cấp đối số bổ sung sau cho
>>> page = urlopen(url)
65

>>>

>>> page

7

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

>>> start_index = title_index + len(""</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>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ần</p><p>Trong 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 hơi phức tạp hơn để bắt đầu 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</p><p><p>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</p><p>Trong trường hợp này, bạn thường phải sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>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ần</p><p>Beautiful 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</p><p><p></p>Loại bỏ các quảng cáo</p></section><section><h3 id="kiem-tra-viec-hieu-cua-ban">Kiểm tra việc hiểu của bạn</h3><p>Mở rộng khối bên dưới để kiểm tra sự hiểu biết của bạn</p><p><p><p><span>Tập thể dục. Phân tích cú pháp HTML bằng Beautiful Soup</span><span>Hiển thị/Ẩn</span></p><p><p><p>Viết chương trình lấy toàn bộ HTML từ trang tại URL <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>68</p><p>Sử 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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>69 và truy xuất giá trị được lấy bởi thuộc tính <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>52 của mỗi thẻ</p><p>Đầu ra cuối cùng sẽ trông như thế này</p><p><pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>8</p><p>Đảm bảo rằng bạn chỉ có một dấu gạch chéo (<pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>75) giữa URL cơ sở và URL tương đối</p><p>Bạn có thể mở rộng khối bên dưới để xem giải pháp</p><p><p><p><span>Giải pháp. Phân tích cú pháp HTML bằng Beautiful Soup</span><span>Hiển thị/Ẩn</span></p><div style="width:100%; margin:20px auto; display:block">
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid" 
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="8587332220"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></p><p><p><p>Đầu tiên, nhập hàm <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>84 từ mô-đun <pre><code><span>>>> </span><span>url</span> <span>=</span> <span>"http://olympus.realpython.org/profiles/aphrodite"</span>
</code></pre>85 và lớp <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 từ gói <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>75</p><p><pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>9</p><p>Mỗi URL liên kết trên trang <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>76 là một URL tương đối, vì vậy hãy tạo một biến <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>77 với URL cơ sở của trang web</p><p><pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>0</p><p>Bạn có thể tạo một URL đầy đủ bằng cách nối <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>77 với một URL tương đối</p><p>Bây giờ hãy mở trang <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>76 bằng <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>8 và sử dụng <pre><code><span>>>> </span><span>start_index</span> <span>=</span> <span>title_index</span> <span>+</span> <span>len</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>start_index</span>
<span>21</span>
</code></pre>5 để lấy mã nguồn HTML</p><p><pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>1</p><p>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 mới để phân tích cú pháp HTML</p><p><pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>2</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>83 trả về danh sách tất cả các liên kết trong 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</p><p><pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>3</p><p>Bạn có thể truy cập URL tương đối cho mỗi liên kết thông qua chỉ số phụ <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>84. Nối giá trị này với <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>77 để tạo ra toàn bộ <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>86</p><p>Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo</p></section></section><section><h2 id="tuong-tac-voi-cac-bieu-mau-html">Tương tác với các biểu mẫu HTML</h2><p>Mô-đun <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>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 ẩn</p><p><p>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. 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</p><p>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</p><p>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</p><section><h3 id="cai-dat-mechanicalsoup">Cài đặt MechanicalSoup</h3><p>Bạn có thể cài đặt MechanicalSoup với <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>88 trong thiết bị đầu cuối của mình</p><p><pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>4</p><p>Bạ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</p></section><section><h3 id="tao-mot-doi-tuong-gt-gt-gt-page-urlopen-url-89">Tạo một đối tượng >>> page = urlopen(url)
89</h3><p>Nhập nội dung sau vào cửa sổ tương tác của IDLE</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>5</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>89 đố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 một URL tới phương thức <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>91 của chúng</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>6</p><p><pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>92 là một đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>93 lưu trữ phản hồi từ việc yêu cầu URL từ trình duyệt</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>7</p><p>Số <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>94 đại diện cho mã trạng thái được yêu cầu trả về. Mã trạng thái là <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>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à <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>96 nếu URL không tồn tại hoặc <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>97 nếu có lỗi máy chủ khi thực hiện yêu cầu</p><p>MechanicalSoup sử dụng Beautiful Soup để phân tích cú pháp HTML từ yêu cầu và <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>92 có thuộc tính <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>99 đại diện cho đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>8</p><p>Bạn có thể xem HTML bằng cách kiểm tra thuộc tính <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>99</p><p><span>>>></span> <pre><code><span>>>> </span><span>html_bytes</span> <span>=</span> <span>page</span><span>.</span><span>read</span><span>()</span>
<span>>>> </span><span>html</span> <span>=</span> <span>html_bytes</span><span>.</span><span>decode</span><span>(</span><span>"utf-8"</span><span>)</span>
</code></pre>9</p><p>Lưu ý trang này có một <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>02 trên đó với các phần tử <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>03 cho tên người dùng và mật khẩu</p><p><p></p>Loại bỏ các quảng cáo</p></section><section><h3 id="gui-bieu-mau-voi-mechanicalsoup">Gửi biểu mẫu với MechanicalSoup</h3><p>Mở trang <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>04 từ ví dụ trước trong trình duyệt và tự mình xem trang đó trước khi tiếp tục</p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvd2Vic2l0ZV9sb2dpbi43MzlmNDg4ZmJlNzQucG5n.webp" ></img></div><p>Hã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</p><p>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>76</p><p>UsernamePassword<pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>06<pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>07</p><p>Trong 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</p><p>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ẻ <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>02. <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>02 trên trang này có thuộc tính <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>10 được đặt thành <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>11. Biểu mẫu này chứa hai phần tử <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>03, một phần tử có tên là <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>13 và phần tử kia có tên là <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>14. Phần tử <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>03 thứ ba là nút Gửi</p><p>Bâ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 đó</p><p>Trong cửa sổ soạn thảo mới, gõ vào chương trình sau</p><p><pre><code><span>>>> </span><span>print</span><span>(</span><span>html</span><span>)</span>
<span><html></span>
<span><head></span>
<span><title>Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
0

Lư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.

>>>

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
1

Bây giờ chia nhỏ ví dụ trên

  1. Bạn tạo một phiên bản

    >>> page = urlopen(url)
    
    89 và sử dụng nó để yêu cầu URL
    >>> page
    
    
    17. Bạn gán nội dung HTML của trang cho biến
    >>> page
    
    
    18 bằng cách sử dụng thuộc tính
    >>> page = urlopen(url)
    
    99

  2. >>> page
    
    
    20 trả về danh sách tất cả các phần tử
    >>> page
    
    
    02 trên trang. Vì trang chỉ có một phần tử
    >>> page
    
    
    02 nên bạn có thể truy cập biểu mẫu bằng cách truy xuất phần tử tại chỉ mục
    >>> page
    
    
    23 của danh sách. Khi chỉ có một biểu mẫu trên một trang, bạn cũng có thể sử dụng
    >>> page
    
    
    24. Hai dòng tiếp theo chọn đầu vào tên người dùng và mật khẩu và đặt giá trị của chúng lần lượt là
    >>> page
    
    
    25 và
    >>> page
    
    
    26

  3. Bạn gửi biểu mẫu với

    >>> page
    
    
    27. Lưu ý rằng bạn chuyển hai đối số cho phương thức này, đối tượng
    >>> page
    
    
    28 và URL của
    >>> page
    
    
    29 mà bạn truy cập thông qua
    >>> page
    
    
    30

Trong cửa sổ tương tác, bạn xác nhận rằng bài nộp đã được chuyển hướng thành công đến trang

>>> page = urlopen(url)
76. Nếu có gì đó không ổn, thì giá trị của
>>> page

32 sẽ vẫn là
>>> page

33

Ghi chú. Tin tặc có thể sử dụng các chương trình tự động như chương trình ở trên để bắt buộc đăng nhập 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

>>> page

34, đã đến lúc lấy URL cho mỗi liên kết trên trang
>>> page = urlopen(url)
76 theo chương trình

Để làm điều này, bạn sử dụng lại

>>> page

36, lần này chuyển chuỗi
>>> url = "http://olympus.realpython.org/profiles/aphrodite"
21 để chọn tất cả các phần tử neo
>>> page

38 trên trang

>>>

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
2

Bây giờ bạn có thể lặp qua từng liên kết và in thuộc tính

>>> page = urlopen(url)
52

>>>

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
3

Các URL có trong mỗi thuộc tính

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

>>> page

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

>>>

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
4

Bạn có thể làm được rất nhiều việc chỉ với

>>> page = urlopen(url)
91,
>>> page

36 và
>>> page

45. Đ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ức

Loại bỏ các quảng cáo

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

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 (

>>> page

06) và mật khẩu (
>>> page

07) vào biểu mẫu đăng nhập có tại URL
>>> page

17

Sau 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

>>> page = urlopen(url)
76

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

>>> page

50

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

>>> page

51 và tạo đối tượng
>>> page

52

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
5

Trỏ trình duyệt đến trang đăng nhập bằng cách chuyển URL tới

>>> page

53 và lấy HTML có thuộc tính
>>> page = urlopen(url)
99

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
6

>>> page

18 là một trường hợp
>>> page = urlopen(url)
18. Vì trang này chỉ có một biểu mẫu duy nhất nên bạn có thể truy cập biểu mẫu qua
>>> page

24. Sử dụng
>>> page

36, 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
>>> page

25 và mật khẩu
>>> page

26

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
7

Bây giờ, biểu mẫu đã được điền đầy đủ, bạn có thể gửi kèm theo

>>> page

27

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
8

Nếu bạn điền đúng tên người dùng và mật khẩu vào biểu mẫu, thì

>>> page

34 thực sự sẽ trỏ đến trang
>>> page = urlopen(url)
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
>>> page

64

>>> print(html)


Profile: Aphrodite




Làm cách nào để tìm nạp nội dung html trong python?

Name: Aphrodite



Favorite animal: Dove

Favorite color: Red

Hometown: Mount Olympus
9

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

>>> title_index = html.find(""</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>0</p><p>Nếu thay vào đó, bạn thấy văn bản <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>65 hoặc nội dung nào khác, thì việc gửi biểu mẫu không thành công</p><p>Khi bạn đã sẵn sàng, bạn có thể chuyển sang phần tiếp theo</p></section></section><section><h2 id="tuong-tac-voi-cac-trang-web-trong-thoi-gian-thuc">Tương tác với các trang web trong thời gian thực</h2><p>Đô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</p><p>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 <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>91 của đối tượng MechanicalSoup <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>89</p><p>Mở trình duyệt bạn chọn và điều hướng đến URL <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>68</p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvd2Vic2l0ZV9kaWNlLjNjZGQwOTA2MWY1NS5wbmc=.webp" ></img></div><p>Trang <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>69 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</p><p>Đ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ẻ <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>70 trông như thế này</p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>1</p><div style="width:100%; margin:20px auto; display:block">
<ins class="adsbygoogle"
     style="display:block; text-align:center;"
     data-ad-layout="in-article"
     data-ad-format="fluid" 
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="8587332220"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div></p><p>Văn bản của thẻ <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>70 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ả</p><p><p>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ó <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>72. Mặc dù thuộc tính <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>73 được cho 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ông</p><p>Bây giờ hãy bắt đầu bằng cách viết một chương trình đơn giản mở trang <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>69, loại bỏ kết quả và in nó ra bàn điều khiển</p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>2</p><p>Ví dụ này sử dụng phương thức <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>36 của đối tượng <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>18 để tìm phần tử có <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>77. Chuỗi <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>78 mà bạn chuyển đến <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>36, sử dụng bộ chọn CSS ID <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>80 để cho biết rằng <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>81 là một giá trị <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>73</p><p>Để đị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 <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>83 trong đoạn mã trên cần phải nằm trong phần thân của vòng lặp</p><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 <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>84 từ mô-đun <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>85 của Python. Phương thức <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>84 lấy một đối số duy nhất biểu thị lượng thời gian để ngủ tính bằng giây</p><p>Đây là một ví dụ minh họa cách hoạt động của <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>87</p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>3</p><p>Khi bạn chạy mã này, bạn sẽ thấy thông báo <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>88 không được hiển thị cho đến khi năm giây trôi qua kể từ khi hàm <pre><code><span>>>> </span><span>page</span> <span>=</span> <span>urlopen</span><span>(</span><span>url</span><span>)</span>
</code></pre>17 đầu tiên được thực thi</p><p>Đối với ví dụ về cuộn xúc xắc, bạn sẽ cần chuyển số <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>90 đến <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>87. Đây là chương trình cập nhật</p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>4</p><p>Khi 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?</p><p>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 <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>92 để chạy <pre><code><span>>>> </span><span>page</span>
<span><http.client.HTTPResponse object at 0x105fef820></span>
</code></pre>93 chỉ cho ba yêu cầu đầu tiên</p><p><pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>5</p><p>Vớ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</p><p><p>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</p><p>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</p><p>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</p><p>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</p><p><p></p>Loại bỏ các quảng cáo</p></section><section><h2 id="phan-ket-luan">Phần kết luận</h2><p>Mặ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</p><p>Trong hướng dẫn này, bạn đã học cách</p><ul><li>Yêu cầu một trang web bằng mô-đun <pre><code><span>>>> </span><span>title_index</span> <span>=</span> <span>html</span><span>.</span><span>find</span><span>(</span><span>"<title>"</span><span>)</span>
<span>>>> </span><span>title_index</span>
<span>14</span>
</code></pre>6 tích hợp sẵn của Python</li><li>Phân tích cú pháp HTML bằng Beautiful Soup</li><li>Tương tác với các biểu mẫu web bằng MechanicalSoup</li><li>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ật</li></ul><p>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ị</p><p>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</p><p><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</p></section><section><h2 id="tai-nguyen-bo-sung">Tài nguyên bổ sung</h2><p>Để biết thêm thông tin về quét web bằng Python, hãy xem các tài nguyên sau</p><ul><li>súp đẹp. Xây dựng một Web Scraper với Python</li><li>Tích hợp API trong Python</li><li>Python & API. Một kết hợp chiến thắng để đọc dữ liệu công khai</li></ul><p><p>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</p></section><p><p>Đánh dấu là đã hoàn thành</p><span><p></p></span></p><p><p>🐍 Thủ thuật Python 💌</p><p><p><p><p><p>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</p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vY2RuLnJlYWxweXRob24uY29tL3N0YXRpYy9weXRyaWNrLWRpY3QtbWVyZ2UuNDIwMWEwMTI1YTVlLnBuZw==.webp" ></img></div></p><p> <p></p>Gửi cho tôi thủ thuật Python »</p><p><p>Giới thiệu về David Amos</p><p><p><p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvbWUtc21hbGwuZjVmNDlmMWM0OGUxLmpwZyZ3PTQwMCZoPTQwMCZtb2RlPWNyb3Amc2lnPTUyMmViYzM3ODQ5MmZkMjIyOGY4YTk5ODBiZjg5NTQ0YjUxYWJhMmM=.webp" ></img></div><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9yb2JvY3JvcC5yZWFscHl0aG9uLm5ldC8/dXJsPWh0dHBzJTNBLy9maWxlcy5yZWFscHl0aG9uLmNvbS9tZWRpYS9tZS1zbWFsbC5mNWY0OWYxYzQ4ZTEuanBnJnc9NDAwJmg9NDAwJm1vZGU9Y3JvcCZzaWc9NTIyZWJjMzc4NDkyZmQyMjI4ZjhhOTk4MGJmODk1NDRiNTFhYmEyYw==.webp" ></img></div></p><p><p>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ã</p>» Thông tin thêm về David</p><hr><p><p><p><p>Mỗ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à</p><p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvUFAuOWI4YjAyNmY3NWI4LmpwZyZ3PTk1OSZoPTk1OSZtb2RlPWNyb3Amc2lnPTcwYmVkYzJlYWI5MGEyMjdlYjlhNjU3YzQxNTY4OWMzZWIxZWNhNGY=.webp" ></img></div></p><p><p>Aldren</p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvZ2FoamVsbGUuNDcwMTQ5ZWU3MDllLmpwZyZ3PTgwMCZoPTgwMCZtb2RlPWNyb3Amc2lnPWU5Yjc2MWM2Y2YxMzU5OTUzMDE0ZGJhMDU1NTRmNTQyNGViMTE2ZTE=.webp" ></img></div></p><p><p>Geir Arne</p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvamphYmxvbmtzaS1hdmF0YXIuZTM3YzRmODMzMDhlLmpwZyZ3PTgwMCZoPTgwMCZtb2RlPWNyb3Amc2lnPWMzNjNiNzA0ZWVjY2IzNWYyMjQ3ZGIxM2JhZmYzZDQzODM0NTk4NTg=.webp" ></img></div></p><p><p>Joanna</p><p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvcHJvZmlsZS1zbWFsbF9qcy4yZjRkMGQ4ZGExY2EuanBnJnc9NDAwJmg9NDAwJm1vZGU9Y3JvcCZzaWc9ZDEwZDlmYzM1YmE0YTY2MDg5NjllNzFiNGMyNGMxZTYxMTc2ZWUyZA==.webp" ></img></div></p><p><p>Gia-cốp</p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvVlp4RXRVb3JfNDAweDQwMC43MTY5YzY4ZTM5NTAuanBnJnc9NDAwJmg9NDAwJm1vZGU9Y3JvcCZzaWc9ZGZhOWI4MDYxMDdkNWQ0NGU5YTQ3NTBiOTYxOGEyNjE0MTUzMTY0Yg==.webp" ></img></div></p><p><p>kate</p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvbWFydGluX2JyZXVzc19weXRob25fc3F1YXJlLmVmYjJiMDdmYWY5Zi5qcGcmdz00NTYmaD00NTYmbW9kZT1jcm9wJnNpZz1mNzNmNmFlNjY4MjQ5YzdhYjlmZjc0YzYxZWE1YWU3YzVkMzYwZDU0.webp" ></img></div></p><p><p>Martin</p><p><p><div class="imgBox"><img alt="Làm cách nào để tìm nạp nội dung html trong python?" data-orgimg="https://sg.cdnki.com/lam-cach-nao-de-tim-nap-noi-dung-html-trong-python---aHR0cHM6Ly9pMC53cC5jb20vcm9ib2Nyb3AucmVhbHB5dGhvbi5uZXQvP3VybD1odHRwcyUzQS8vZmlsZXMucmVhbHB5dGhvbi5jb20vbWVkaWEvcGhpNV8yLjBlNjFiNGM2NmY2Yi5qcGcmdz00MDAmaD00MDAmbW9kZT1jcm9wJnNpZz1mZDIzY2MwZTk2MGZjODEwOTU2MGQwYjkyZjcyNjkxYzc3NjBkOWFm.webp" ></img></div></p><p><p>Philipp</p><p><p><p>Bậc thầy  <span>Kỹ năng Python trong thế giới thực</span>  Với quyền truy cập không giới hạn vào Python thực</p><p></p><p>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</p><p>Nâng cao kỹ năng Python của bạn »</p><p><p>Chuyên gia  <span>Kỹ năng Python trong thế giới thực</span><br>Với quyền truy cập không giới hạn vào Python thực</p><p></p><p>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</p><p>Nâng cao kỹ năng Python của bạn »</p><p><p>Bạn nghĩ sao?</p><p><p>Đánh giá bài viết này<p></p><span>Tweet Chia sẻ Chia sẻ Email</span></p><p><p>Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? </p><p><p>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. 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</p><div></div> <div></div></p></div>
                                    <div class="readmore_content_exists"><button id="readmore_content"><span class="arrow"><span></span></span>Đọc tiếp</button></div>
                                </td></tr></table>
																

															 <script async src="/dist/js/lazyhtml.min.js" crossorigin="anonymous"></script>
							 <div class="lazyhtml" data-lazyhtml>
								<script type="text/lazyhtml">
									<div class="youtubeVideo"><h3>Video liên quan</h3>
            <iframe width="560" height="315" src="https://www.youtube.com/embed/LD7BRciU-Sk?controls=0" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"allowfullscreen></iframe>
									</div>
								</script>
							  </div>
														
							<div class="mt-3">
								<div class="tags">
																  <a href="https://ancanmarketing.com/tags/programming" class="tag-link">programming</a>
																  <a href="https://ancanmarketing.com/tags/python" class="tag-link">python</a>
																</div>
							</div>
							
							
							<div class="post-tools">
                                    <button data-postid="lam-cach-nao-de-tim-nap-noi-dung-html-trong-python" class="btn btn-answerModalBox"><img class="mr-1" alt="Làm cách nào để tìm nạp nội dung html trong python?" src="/dist/images/svg/messages_16.svg">Reply</button>
                                    <button data-postid="lam-cach-nao-de-tim-nap-noi-dung-html-trong-python" data-vote="up"  class="btn btn-doVote"><img class="mr-1" alt="Làm cách nào để tìm nạp nội dung html trong python?"  src="/dist/images/svg/face-smile_16.svg">2</button>
                                    <button data-postid="lam-cach-nao-de-tim-nap-noi-dung-html-trong-python" data-vote="down" class="btn btn-doVote"><img class="mr-1" alt="Làm cách nào để tìm nạp nội dung html trong python?"  src="/dist/images/svg/poo_16.svg">0</button>
                                    <button class="btn"><img class="mr-1" alt="Làm cách nào để tìm nạp nội dung html trong python?"  src="/dist/images/svg/facebook_16.svg"> Chia sẻ</button>
                            </div> 	
							
                            </div><!-- end question-post-body -->
                        </div><!-- end question-post-body-wrap -->
                    </div><!-- end question -->
                    
                    <div id="answers_lam-cach-nao-de-tim-nap-noi-dung-html-trong-python" class="answers"> </div><!-- end answer-wrap -->
					
					<div class="entryFooter">
							<div class="footerLinkAds"><div style="width:100%; margin:0 auto;">
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="8199996671"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>							
							<div class="footerRelated"><div class="postRelatedWidget">
<h2>Bài Viết Liên Quan</h2>


<div class="questions-snippet layoutNews border-top border-top-gray">
  <div class="max-width:840px">					
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="fluid"
     data-ad-layout-key="-fb-44+c1-1p-ns"
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="7655066491"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/giai-hoa-9-bai-4-5-trang-108-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/zb-Z_hGfqKo/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLBk_RhanmoSrO7Bxijno2zf2Up54w" alt="Giải hóa 9 bài 4 5 trang 108 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/giai-hoa-9-bai-4-5-trang-108-nam-2024">Giải hóa 9 bài 4 5 trang 108 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/chua-thoai-hoa-xuong-khop-cua-do-ducs-ngocj-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/WBuIYvhf7YU/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAyHM3ErLcONsP49Mj2Z3ZGqvc3Hw" alt="Chữa thoái hóa xương khớp của đỗ đưcs ngocj năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/chua-thoai-hoa-xuong-khop-cua-do-ducs-ngocj-nam-2024">Chữa thoái hóa xương khớp của đỗ đưcs ngocj năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/loi-khong-background-duoc-trong-grus-4-dos-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/qJR4omZ-rbE/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAgW58UCEJqFtCq1yiXhrDN8ikmbQ" alt="Lỗi không background được trong grus 4 dos năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/loi-khong-background-duoc-trong-grus-4-dos-nam-2024">Lỗi không background được trong grus 4 dos năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/gio-trai-dat-dien-ra-vao-thoi-gian-nao-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/9fyKerouY8U/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCwpx55vVZ3dk7YxKXuod-Kmx-qnw" alt="Giờ trái đất diễn ra vào thời gian nào năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/gio-trai-dat-dien-ra-vao-thoi-gian-nao-nam-2024">Giờ trái đất diễn ra vào thời gian nào năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Khoa Học" class="tag-link">Khoa Học</a>
                                        <a href="/tags/Trái đất" class="tag-link">Trái đất</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/quan-cafe-dep-o-phan-van-tri-go-vap-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/zI-bwtUL21c/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLArhRHjpbDD6yMhx7kK3wOvdicTUg" alt="Quán cafe đẹp ở phan văn trị gò vấp năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/quan-cafe-dep-o-phan-van-tri-go-vap-nam-2024">Quán cafe đẹp ở phan văn trị gò vấp năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Khỏe Đẹp" class="tag-link">Khỏe Đẹp</a>
                                        <a href="/tags/Đẹp" class="tag-link">Đẹp</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/tuoi-tho-trung-binh-cua-meo-nuoi-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/MicUmv15MG8/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLANBdTvKLHEHbjRLwaTytEzMiBUMg" alt="Tuổi thọ trung bình của mèo nuôi năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/tuoi-tho-trung-binh-cua-meo-nuoi-nam-2024">Tuổi thọ trung bình của mèo nuôi năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/de-thi-cuoi-hoc-ki-2-mon-ngu-van-7-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/Kg0zpqoDFGk/hq720.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGAHwAQH4Af4JgALQBYoCDAgAEAEYOiBlKD4wDw==&rs=AOn4CLBeiT5tIu32vHZij8urrKF8Vu8bEg" alt="Đề thi cuối học kì 2 môn ngữ văn 7 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/de-thi-cuoi-hoc-ki-2-mon-ngu-van-7-nam-2024">Đề thi cuối học kì 2 môn ngữ văn 7 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Học Tốt" class="tag-link">Học Tốt</a>
                                        <a href="/tags/Học" class="tag-link">Học</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/cach-sua-loi-treo-logo-dien-thoai-coolpad-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/BkWxDbuSFVk/hq720_2.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGADwAQH4AZQDgALQBYoCDAgAEAEYWyBVKGUwDw==&rs=AOn4CLAPUbdrsyYDaxFxx5LskMZPtY76lA" alt="Cách sửa lỗi treo logo điện thoại coolpad năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/cach-sua-loi-treo-logo-dien-thoai-coolpad-nam-2024">Cách sửa lỗi treo logo điện thoại coolpad năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Mẹo Hay" class="tag-link">Mẹo Hay</a>
                                        <a href="/tags/Cách" class="tag-link">Cách</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/bai-tap-ve-hien-tai-tiep-dien-co-dap-an-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/L6mJGLQaslE/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLBA5kcPzVdckCo-wxU411yBbLaaIQ" alt="Bài tập về hiện tại tiếp diễn có đáp án năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/bai-tap-ve-hien-tai-tiep-dien-co-dap-an-nam-2024">Bài tập về hiện tại tiếp diễn có đáp án năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Khỏe Đẹp" class="tag-link">Khỏe Đẹp</a>
                                        <a href="/tags/Bài tập" class="tag-link">Bài tập</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/top-10-cau-thu-chay-nhanh-nhat-fo4-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/L1hnGrx-hq8/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLAugmE_ojfp_eraCarbcBQ5SlSg-Q" alt="Top 10 cau thu chay nhanh nhat fo4 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/top-10-cau-thu-chay-nhanh-nhat-fo4-nam-2024">Top 10 cau thu chay nhanh nhat fo4 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Top List" class="tag-link">Top List</a>
                                        <a href="/tags/Top" class="tag-link">Top</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	 <div class="max-width:840px">					
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="fluid"
     data-ad-layout-key="-fb-44+c1-1p-ns"
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="7655066491"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/chua-trai-sen-van-an-chi-linh-hai-duong-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/BksXvZpAsm8/hq720.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGAHwAQH4Ab4HgALQBYoCDAgAEAEYZSBhKD4wDw==&rs=AOn4CLAiNzSDx3lFSheQwci_gL0VreKoVw" alt="Chùa trại sen văn an chí linh hải dương năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/chua-trai-sen-van-an-chi-linh-hai-duong-nam-2024">Chùa trại sen văn an chí linh hải dương năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/google-bao-loi-ve-tuy-cap-dung-luong-lon-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/-jJZfErzCMY/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLC6Dzp9dYI2BPDOGUpj1BuyGkIGfA" alt="Google bao lỗi về tuy cập dung lượng lớn năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/google-bao-loi-ve-tuy-cap-dung-luong-lon-nam-2024">Google bao lỗi về tuy cập dung lượng lớn năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Công Nghệ" class="tag-link">Công Nghệ</a>
                                        <a href="/tags/Google" class="tag-link">Google</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/ban-muon-con-cua-ban-tro-thanh-nguoi-the-nao-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/BR8tn7y3ZNA/hq720.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGAHwAQH4AYwCgALgA4oCDAgAEAEYSyBIKHIwDw==&rs=AOn4CLCehzKkaMnXCG5HMer1HV8mLl4qBA" alt="Bạn muốn con của bạn trở thành người thế nào năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/ban-muon-con-cua-ban-tro-thanh-nguoi-the-nao-nam-2024">Bạn muốn con của bạn trở thành người thế nào năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Hỏi Đáp" class="tag-link">Hỏi Đáp</a>
                                        <a href="/tags/Thế nào" class="tag-link">Thế nào</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/de-tuyen-sinh-lop-10-mon-toan-thai-binh-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/5_NPqb9coSw/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLCNQG2qqdaa7pt7jZTPaVI4wfP-Lw" alt="Đề tuyển sinh lớp 10 môn toán thái bình năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/de-tuyen-sinh-lop-10-mon-toan-thai-binh-nam-2024">Đề tuyển sinh lớp 10 môn toán thái bình năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/so-dien-thoai-van-phong-dai-bac-tai-tphcm-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/4yl11xGXO1g/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDDY-rSLFov8TeKt9B1rK1Fwejsrg" alt="Số điện thoại văn phòng đài bắc tại tphcm năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/so-dien-thoai-van-phong-dai-bac-tai-tphcm-nam-2024">Số điện thoại văn phòng đài bắc tại tphcm năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/bai-tap-nang-cao-tieng-anh-lop-10-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/ENdqzqQFeO4/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCrePicksJ21AIKhWR3qQ_Wxhqa4g" alt="Bài tập nâng cao tiếng anh lớp 10 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/bai-tap-nang-cao-tieng-anh-lop-10-nam-2024">Bài tập nâng cao tiếng anh lớp 10 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Khỏe Đẹp" class="tag-link">Khỏe Đẹp</a>
                                        <a href="/tags/Bài tập" class="tag-link">Bài tập</a>
                                        <a href="/tags/Học Tốt" class="tag-link">Học Tốt</a>
                                        <a href="/tags/Tiếng anh" class="tag-link">Tiếng anh</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/ban-an-la-do-chu-the-nao-ban-hanh-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/NQpBj0zap70/hqdefault.jpg?sqp=-oaymwEjCOADEI4CSFryq4qpAxUIARUAAAAAGAElAADIQj0AgKJDeAE=&rs=AOn4CLC6I2i3pADD00dnBkdC_O2OIa-YbA" alt="Bản án là do chủ thể nào ban hành năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/ban-an-la-do-chu-the-nao-ban-hanh-nam-2024">Bản án là do chủ thể nào ban hành năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/bang-hang-hoa-chiu-thue-5-10-0-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/WgopyzmyqHI/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLDLXvwwpjBOsjXsbLPhg0IYXMLiOA" alt="Bảng hàng hóa chịu thuế 5 10 0 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/bang-hang-hoa-chiu-thue-5-10-0-nam-2024">Bảng hàng hóa chịu thuế 5 10 0 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/kien-thuc-hoa-hoc-lop-9-hoc-ki-1-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/iRxZg4ijgyw/hq720.jpg?sqp=-oaymwEXCNAFEJQDSFryq4qpAwkIARUAAIhCGAE=&rs=AOn4CLCbDa4f13aUzgK3c3sW5ctUsmkrjg" alt="Kiến thức hóa học lớp 9 học kì 1 năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/kien-thuc-hoa-hoc-lop-9-hoc-ki-1-nam-2024">Kiến thức hóa học lớp 9 học kì 1 năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                        <a href="/tags/Học Tốt" class="tag-link">Học Tốt</a>
                                        <a href="/tags/Học" class="tag-link">Học</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	<div class="media media-card  rounded-0 shadow-none mb-0 bg-transparent py-4 px-0 border-bottom border-bottom-gray">
    <div class="media-image">
       <a href="/cac-truong-hop-thanh-toan-bang-tien-mat-nam-2024"><img src="/dist/images/waiting.svg" width="200px" height="100px"  data-orgimg="https://i.ytimg.com/vi/g28SQhRPqJk/hq720.jpg?sqp=-oaymwExCNAFEJQDSFryq4qpAyMIARUAAIhCGAHwAQH4Af4JgALQBYoCDAgAEAEYWiBaKFowDw==&rs=AOn4CLAow1V7FOPV5iQfaMFz91FMz1sRrA" alt="Các trường hợp thanh toán bằng tiền mặt năm 2024"></a>
    </div>
    <div class="media-body">
        <h5 class="mb-2 fw-medium"><a href="/cac-truong-hop-thanh-toan-bang-tien-mat-nam-2024">Các trường hợp thanh toán bằng tiền mặt năm 2024</a></h5>
        <p class="mb-2 truncate lh-20 fs-15"></p>
        <div class="media media-card questionTags user-media px-0 border-bottom-0 pb-0">
            <div class="tags">
                                    <a href="/tags/mẹo hay" class="tag-link">mẹo hay</a>
                                </div>

        </div>
    </div>
</div><!-- end media -->
	

</div>
</div></div>
					</div>
                   
                </div>    
                </div><!-- end question-main-bar -->
            </div><!-- end col-lg-9 -->
            <div class="postContentRight">
                <div class="sidebar">
					<div class="ad-card">
    <h4 class="text-gray text-uppercase fs-13 pb-3 text-center">Quảng Cáo</h4>
    <div class="mb-4 mx-auto" style="text-align:center">
      <ins class="adsbygoogle"
     style="display:block"
     data-ad-client="ca-pub-4987931798153631"
     data-ad-slot="8742637402"
     data-ad-format="auto"
     data-full-width-responsive="true">
	 </ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
    </div>
</div>
                    <div class="card card-item">
    <div class="card-body">
        <h3 class="fs-17 pb-3">Có thể bạn quan tâm</h3>
        <div class="divider"><span></span></div>
        <div class="sidebar-questions pt-3">
                        <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/de-kiem-tra-ngu-van-6-hoc-ki-1-nam-2024">Đề kiểm tra ngữ văn 6 học kì 1 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">4 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/Snow-coveredAllies" class="author">Snow-coveredAllies</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/khac-phuc-loi-khong-gui-duoc-mail-trong-outlook-2010-nam-2024">Khắc phục lỗi không gửi được mail trong outlook 2010 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">4 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/ShowyDioxide" class="author">ShowyDioxide</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bai-viet-so-5-lop-12-nghi-luan-van-hoc-nam-2024">Bài viết số 5 lớp 12 nghị luận văn học năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">4 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/PerfumedAssignment" class="author">PerfumedAssignment</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/laptop-hp-pavilion-x360-14-ba065tu-2gv27pa-san-xuat-nam-nao-nam-2024">Laptop hp pavilion x360 14-ba065tu 2gv27pa sản xuất năm nào năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/High-riskOutdoors" class="author">High-riskOutdoors</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bai-tap-rewrite-cua-hoc-sinh-cap-2-nam-2024">Bài tập rewrite của học sinh cấp 2 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/ErectNursery" class="author">ErectNursery</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/hien-dai-hoa-luc-luong-hai-quan-viet-nam-nam-2024">Hiện đại hóa lực lượng hải quân việt nam năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/IndustriousMover" class="author">IndustriousMover</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/cac-bai-toan-khi-biet-tong-an-ti-lop-4-nam-2024">Các bài toán khi biết tổng ẩn tỉ lớp 4 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/PlushReader" class="author">PlushReader</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/giai-chi-tietbai-14-sgk-toan-dai-10-trang-157-nam-2024">Giải chi tiêtbài 14 sgk toán đại 10 trang 157 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/PrincipalForefront" class="author">PrincipalForefront</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bai-tap-tieng-anh-luu-hoang-tri-lop-8-violet-nam-2024">Bài tập tiếng anh lưu hoằng trí lớp 8 violet năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/Off-dutyLiner" class="author">Off-dutyLiner</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bai-23-vat-li-9-sach-bai-tap-nam-2024">Bài 23 vat li 9 sách bài tập năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/ParticipatoryEffectiveness" class="author">ParticipatoryEffectiveness</a>
                    </small>
                </div>
            </div><!-- end media -->
			        </div><!-- end sidebar-questions -->
    </div>
</div><!-- end card -->
                    <div class="card card-item cardTopList">
    <div class="card-body">
        <h3 class="fs-17 pb-3">Toplist được quan tâm</h3>
        <div class="divider"><span></span></div>
        <div class="sidebar-questions pt-3">

                        <div class="media media-card media--card media--card-2">
				<div class="topListNum">#1</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-9-review-kem-chong-nang-cho-ba-bau-2023">Top 9 review kem chống nắng cho bà bầu 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#2</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-5-tieng-anh-lop-2-unit-7-trang-46-2023">Top 5 tiếng anh lớp 2 unit 7 trang 46 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#3</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-10-tai-mau-the-nhan-vien-tren-excel-2023">Top 10 tải: mẫu the nhân viên trên excel 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#4</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-7-tuyen-dung-nhan-vien-chot-don-tai-nha-2023">Top 7 tuyển dụng nhân viên chốt đơn tại nhà 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#5</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-7-mau-nha-2-tang-chu-l-100m2-mai-bang-2023">Top 7 mẫu nhà 2 tầng chữ l 100m2 mái bằng 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#6</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-4-truyen-ngan-ve-que-huong-lop-2-2023">Top 4 truyện ngắn về quê hương lớp 2 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#7</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-6-so-do-bo-may-nha-nuoc-thoi-ho-2023">Top 6 sơ đồ bộ máy nhà nước thời hồ 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#8</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-8-truoc-viec-nhat-dao-chinh-phap-dang-ta-co-chu-truong-gi-moi-2023">Top 8 trước việc nhật đảo chính pháp, đảng ta có chủ trương gì mới 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
				<div class="topListNum">#9</div>
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/toplist-top-7-dan-so-dong-da-dem-den-cho-nuoc-ta-2023">Top 7 dân số đông đã đem đến cho nước ta 2023</a></h5>
                    <small class="meta text-right">7 tháng trước</small>
                </div>
            </div><!-- end media -->
			            
        </div><!-- end sidebar-questions -->
    </div>
</div><!-- end card -->
					<div class="ad-card">
    <h4 class="text-gray text-uppercase fs-14 pb-3 pb-3 text-center">Quảng cáo</h4>
    <div class="mb-4 mx-auto">
      <ins class="adsbygoogle"
     style="display:inline-block;width:300px;height:600px"
     data-ad-client="ca-pub-"
     data-ad-slot=""
     data-ad-format="auto"
     data-full-width-responsive="true"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
    </div>
</div>
                    
<div class="card card-item">
    <div class="card-body">
        <h3 class="fs-17 pb-3">Xem Nhiều</h3>
        <div class="divider"><span></span></div>
        <div class="sidebar-questions pt-3">

                        <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/castlevania-lords-of-shadow-2-viet-hoa-fshare-nam-2024">Castlevania lords of shadow 2 việt hóa fshare năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/MasterfulMailing" class="author">MasterfulMailing</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/dat-ban-tho-ong-tao-nhu-the-nao-nam-2024">Đặt bàn thờ ông táo như thế nào năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">1 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/FuturisticPatriotism" class="author">FuturisticPatriotism</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/phan-mem-thi-nghiem-hoa-hoc-tren-dien-thoai-nam-2024">Phần mềm thí nghiệm hóa học trên điện thoại năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">1 tuần trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/UnresponsivePoliceman" class="author">UnresponsivePoliceman</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/cach-fix-loi-ko-vao-tran-dc-lol-nam-2024">Cach fix lỗi ko vào trân dc lol năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">6 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/UntimelyCelebrity" class="author">UntimelyCelebrity</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bai-tap-tieng-anh-luu-hoang-tri-lop-8-violet-nam-2024">Bài tập tiếng anh lưu hoằng trí lớp 8 violet năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/Off-dutyLiner" class="author">Off-dutyLiner</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/bi-loi-khong-thanh-hoa-trong-word-2023-nam-2024">Bị lỗi không thành hoa trong word 2023 năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">3 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/DenseSnark" class="author">DenseSnark</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/nen-dung-bien-phap-tranh-thai-nao-sau-sinh-nam-2024">Nên dùng biện pháp tránh thai nào sau sinh năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">5 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/GleamingTransmitter" class="author">GleamingTransmitter</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/loi-khong-dang-nhap-duoc-dong-bo-hoa-coccoc-nam-2024">Lỗi không đang nhập được đồng bộ hóa coccoc năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">2 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/OccupiedCross-examination" class="author">OccupiedCross-examination</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/chua-thoai-hoa-xuong-khop-cua-do-ducs-ngocj-nam-2024">Chữa thoái hóa xương khớp của đỗ đưcs ngocj năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">3 giờ trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/AffectedHacker" class="author">AffectedHacker</a>
                    </small>
                </div>
            </div><!-- end media -->
			            <div class="media media-card media--card media--card-2">
                <div class="media-body">
                    <h5><a href="https://ancanmarketing.com/tim-loi-sai-eggs-are-taken-to-the-maket-fridays-nam-2024">Tìm lỗi sai eggs are taken to the mảket fridays năm 2024</a></h5>
                    <small class="meta">
                        <span class="pr-1">1 ngày trước</span>
                        <span class="pr-1">. bởi</span>
                        <a href="https://ancanmarketing.com/author/BluntKangaroo" class="author">BluntKangaroo</a>
                    </small>
                </div>
            </div><!-- end media -->
			            
        </div><!-- end sidebar-questions -->
    </div>
</div><!-- end card -->					<div class="ad-card">
    <h4 class="text-gray text-uppercase fs-14 pb-3 pb-3 text-center">Quảng cáo</h4>
    <div class="mb-4 mx-auto" style=" text-align: center">
<div id='div-gpt-ad-1657246837997-0' style='min-width: 300px; min-height: 600px;'>
  <script>
    googletag.cmd.push(function() { googletag.display('div-gpt-ad-1657246837997-0'); });
  </script>
</div>
	  
    </div>
</div>
                    										
					
			
                   
                </div><!-- end sidebar -->
            </div><!-- end col-lg-3 -->
        </div><!-- end row -->
    </div><!-- end container -->
</section><!-- end question-area -->

<!-- ================================
         END QUESTION AREA
================================= -->
<script>var questionId ='lam-cach-nao-de-tim-nap-noi-dung-html-trong-python'</script>
<script>var postTime ='2023-01-15T12:59:48.609Z'</script>
<script>var siteDomain ='ancanmarketing.com'</script>
<script type="text/javascript" src="https://ancanmarketing.com/dist/js/pages/comment.js"></script>

<!-- ================================
         END FOOTER AREA
================================= -->
<section class="footer-area pt-80px bg-dark position-relative">
    <span class="vertical-bar-shape vertical-bar-shape-1"></span>
    <span class="vertical-bar-shape vertical-bar-shape-2"></span>
    <span class="vertical-bar-shape vertical-bar-shape-3"></span>
    <span class="vertical-bar-shape vertical-bar-shape-4"></span>
    <div class="container">
        <div class="row">
            <div class="col-lg-3 responsive-column-half">
                <div class="footer-item">
                    <h3 class="fs-18 fw-bold pb-2 text-white">Chúng tôi</h3>
                    <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white">
                        <li><a href="/about.html">Giới thiệu</a></li>
                        <li><a href="/contact.html">Liên hệ</a></li>
                        <li><a href="/contact.html">Tuyển dụng</a></li>
                        <li><a href="/contact.html">Quảng cáo</a></li>
                    </ul>
                </div><!-- end footer-item -->
            </div><!-- end col-lg-3 -->
            <div class="col-lg-3 responsive-column-half">
                <div class="footer-item">
                    <h3 class="fs-18 fw-bold pb-2 text-white">Điều khoản</h3>
                    <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white">
                        <li><a href="/privacy-statement.html">Điều khoản hoạt động</a></li>
                        <li><a href="/terms-and-conditions.html">Điều kiện tham gia</a></li>
                        <li><a href="/privacy-statement.html">Quy định cookie</a></li>
                    </ul>
                </div><!-- end footer-item -->
            </div><!-- end col-lg-3 -->
            <div class="col-lg-3 responsive-column-half">
                <div class="footer-item">
                    <h3 class="fs-18 fw-bold pb-2 text-white">Trợ giúp</h3>
                    <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white">
                        <li><a href="/contact.html">Hướng dẫn</a></li>
                        <li><a href="/contact.html">Loại bỏ câu hỏi</a></li>
                        <li><a href="/contact.html">Liên hệ</a></li>
                    </ul>
                </div><!-- end footer-item -->
            </div><!-- end col-lg-3 -->
            <div class="col-lg-3 responsive-column-half">
                <div class="footer-item">
                    <h3 class="fs-18 fw-bold pb-2 text-white">Mạng xã hội</h3>
                    <ul class="generic-list-item generic-list-item-hover-underline pt-3 generic-list-item-white">
                        <li><a href="#"><i class="fab fa-facebook-f mr-1"></i> Facebook</a></li>
                        <li><a href="#"><i class="fab fa-twitter mr-1"></i> Twitter</a></li>
                        <li><a href="#"><i class="fab fa-linkedin mr-1"></i> LinkedIn</a></li>
                        <li><a href="#"><i class="fab fa-instagram mr-1"></i> Instagram</a></li>
                    </ul>
                </div><!-- end footer-item -->
            </div><!-- end col-lg-3 -->
        </div><!-- end row -->
    </div><!-- end container -->
    <hr class="border-top-gray my-5">
    <div class="container">
        <div class="row align-items-center pb-4 copyright-wrap">
           
            <div class="col-6">
               <a href="//www.dmca.com/Protection/Status.aspx?ID=33e5dca6-f8c5-4c6f-b8e6-a247229d2953" title="DMCA.com Protection Status" class="dmca-badge"> <img src ="https://images.dmca.com/Badges/dmca_protected_sml_120am.png?ID=33e5dca6-f8c5-4c6f-b8e6-a247229d2953"  width="123px" height="21px" alt="DMCA.com Protection Status" /></a>  <script src="https://images.dmca.com/Badges/DMCABadgeHelper.min.js"> </script>
            </div>
			<!-- end col-lg-6 --><div class="col-6">
				
                <div class="copyright-desc text-right fs-14">
					<div>Bản quyền © 2021 <a href="https://ancanmarketing.com"><strong style="font-size:18px;color:#ff0000">Marketing</strong><strong style="font-size:18px">Blog</strong></a> Inc.</div>
				</div>
            </div><!-- end col-lg-6 -->
        </div><!-- end row -->
    </div><!-- end container -->
</section><!-- end footer-area -->

<!-- ================================
          END FOOTER AREA
================================= --><script>
  $( document ).ready(function() {
    setTimeout(showMoreButton, 3000);
    function showMoreButton(){
      let minheight = 1000;
      minheight = parseInt($("#entryContent").innerHeight())/3;
      $("#entryContent").css('min-height', minheight).css('max-height', minheight).css('overflow', 'hidden');
      $("#readmore_content").click(function(){
        $("#entryContent").css('min-height', '').css('max-height', '').css('overflow', '');
        $(".readmore_content_exists").css('display', 'none');
      })
    }
});
</script>

<!-- template js files -->
<!-- start back to top -->
<div id="back-to-top" data-toggle="tooltip" data-placement="top" title="Lên đầu trang">
    <img alt="" src="/dist/images/svg/arrow-up_20.svg">
</div>
<!-- end back to top -->
<script src="https://ancanmarketing.com/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://ancanmarketing.com/dist/js/moment.js"></script>
<script src="https://ancanmarketing.com/dist/js/read-more.min.js"></script>
<script src="https://ancanmarketing.com/dist/js/main.js?v=6"></script>
<!-- Google Tag Manager (noscript) -->

<script type="text/javascript">
    (function(c,l,a,r,i,t,y){
        c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
        t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
        y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
    })(window, document, "clarity", "script", "jxuz46z39u");
</script>

</body>
</html>