Hướng dẫn for loop table python - bảng vòng lặp for python

Tôi muốn làm mã bên dưới để được định dạng là HTML. Tuy nhiên, tôi đang gặp vấn đề khi định dạng nó là HTML.

Nội dung chính

  • Hiểu cấu trúc bảng HTML
  • Cán bàn HTML bằng súp đẹp Python
  • 1. Gửi yêu cầu chính của chúng tôi
  • 2. Tích hợp Scraperapi để tránh các hệ thống chống xẹp
  • 3. Xây dựng trình phân tích cú pháp bằng súp đẹp
  • 4. Vòng lặp qua bảng HTML
  • 5. Lưu trữ dữ liệu bảng vào tệp JSON
  • 6. Chạy tập lệnh và mã đầy đủ
  • Cạo bảng HTML bằng gấu trúc bằng cách sử dụng gấu trúc

cur.execute("SELECT Statement")

rows = cur.fetchall()

    html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>
    <tr>
    for row in rows:
        for col in row:
            print "<td>"
            print "%s".replace(" ", "") % col
            print "</td>"
            print "</tr>"
        </table> 
    """

Mục tiêu của tôi là làm cho nó đầu ra HTML, tuy nhiên tôi không biết làm thế nào để tạo ra đầu ra vòng lặp như HTML được định dạng.

Đã hỏi ngày 28 tháng 3 năm 2017 lúc 8:52Mar 28, 2017 at 8:52Mar 28, 2017 at 8:52

Hướng dẫn for loop table python - bảng vòng lặp for python

NadnadNaDNaD

Huy hiệu vàng 1311 Huy hiệu bạc15 Huy hiệu đồng1 gold badge1 silver badge15 bronze badges1 gold badge1 silver badge15 bronze badges

Tôi hy vọng đây là mã bạn đang tìm kiếm:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"

Mỗi thẻ HTML được nối vào biến chuỗi

f = open('temp.html','w')
f.write(html)
f.close()
4. Bạn có thể viết nội dung của biến
f = open('temp.html','w')
f.write(html)
f.close()
4 này vào tệp:
f = open('temp.html','w')
f.write(html)
f.close()

Đã trả lời ngày 28 tháng 3 năm 2017 lúc 13:58Mar 28, 2017 at 13:58Mar 28, 2017 at 13:58

2

Đối với trường hợp đó, bạn sẽ cần sử dụng jinja2.

<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>

Đã trả lời ngày 28 tháng 3 năm 2017 lúc 13:56Mar 28, 2017 at 13:56Mar 28, 2017 at 13:56

Jcc.SanabriaJcc.SanabriaJcc.SanabriaJcc.Sanabria

4861 Huy hiệu vàng10 Huy hiệu bạc21 Huy hiệu đồng1 gold badge10 silver badges21 bronze badges1 gold badge10 silver badges21 bronze badges

Dữ liệu dạng bảng là một trong những nguồn dữ liệu tốt nhất trên web. Họ có thể lưu trữ một lượng lớn thông tin hữu ích mà không mất định dạng dễ đọc, biến nó thành mỏ vàng cho các dự án liên quan đến dữ liệu.

Cho dù đó là để loại bỏ dữ liệu bóng đá hoặc trích xuất dữ liệu thị trường chứng khoán, chúng ta có thể sử dụng Python để nhanh chóng truy cập, phân tích và trích xuất dữ liệu từ các bảng HTML, nhờ các yêu cầu và súp đẹp.

Ngoài ra, chúng tôi có một chút bất ngờ đen trắng cho bạn vào cuối, vì vậy hãy tiếp tục đọc!

Hiểu cấu trúc bảng HTML

Trực quan, một bảng HTML là một tập hợp các hàng và cột hiển thị thông tin ở định dạng bảng. Đối với hướng dẫn này, chúng tôi sẽ cạo bảng trên:

Để có thể xóa dữ liệu trong bảng này, chúng tôi sẽ cần đi sâu hơn một chút vào mã hóa của nó.

Nói chung, các bảng HTML thực sự được xây dựng bằng cách sử dụng các thẻ HTML sau:

  • : Nó đánh dấu sự khởi đầu của bảng HTML
  • hoặc: định nghĩa một hàng là tiêu đề của bảng
  • : Cho biết phần nơi dữ liệu là
  • : Cho biết một hàng trong bảng
  • : Xác định một ô trong bảng

Tuy nhiên, như chúng ta sẽ thấy trong các kịch bản ngoài đời thực, không phải tất cả các nhà phát triển đều tôn trọng các quy ước này khi xây dựng bảng của họ, khiến một số dự án trở nên khó khăn hơn những dự án khác. Tuy nhiên, hiểu cách họ làm việc là rất quan trọng để tìm ra cách tiếp cận đúng đắn.

Hãy cùng nhập vào bảng URL URL (https://datatables.net/examples/styling/stripe.html) trong trình duyệt của chúng tôi và kiểm tra trang để xem những gì xảy ra dưới mui xe.

Đây là lý do tại sao đây là một trang tuyệt vời để thực hành quét dữ liệu bảng với Python. Có một cặp thẻ rõ ràng mở và đóng bảng và tất cả các dữ liệu liên quan nằm trong thẻ. Nó chỉ hiển thị mười hàng phù hợp với số lượng mục được chọn ở phía trước.

Một vài điều nữa cần biết về bảng này là nó có tổng cộng 57 mục mà chúng tôi muốn cạo và dường như có hai giải pháp để truy cập dữ liệu. Đầu tiên là nhấp vào menu thả xuống và chọn 100 100, để hiển thị tất cả các mục:

Hoặc nhấp vào nút tiếp theo để di chuyển qua phân trang.

Vậy cái nào sẽ là? Một trong hai giải pháp này sẽ thêm sự phức tạp hơn vào tập lệnh của chúng tôi, do đó, hãy để kiểm tra xem dữ liệu được rút ra từ đầu tiên.

Tất nhiên, vì đây là bảng HTML, tất cả dữ liệu phải có trên tệp HTML mà không cần tiêm AJAX. Để xác minh điều này, nhấp chuột phải> Xem nguồn trang. Tiếp theo, sao chép một vài ô và tìm kiếm chúng trong mã nguồn.

Chúng tôi đã làm điều tương tự cho một vài mục khác từ các ô được phân trang khác nhau và vâng, có vẻ như tất cả dữ liệu mục tiêu của chúng tôi đều ở đó mặc dù mặt trước không hiển thị nó.

Và với thông tin này, chúng tôi đã sẵn sàng để chuyển sang mã!

Cán bàn HTML bằng súp đẹp Python

Bởi vì tất cả dữ liệu của nhân viên mà chúng tôi đang tìm cách cạo đều nằm trên tệp HTML, chúng tôi có thể sử dụng thư viện yêu cầu để gửi yêu cầu HTTP và phân tích trả lời bằng súp đẹp.

Lưu ý: Nếu bạn mới sử dụng máy quét web, chúng tôi đã tạo ra một bản dựng web trong hướng dẫn Python cho người mới bắt đầu. Mặc dù bạn có thể theo dõi mà không cần kinh nghiệm, nhưng nó luôn luôn là một ý tưởng tốt để bắt đầu từ những điều cơ bản. If you’re new to web scraping, we’ve created a web scraping in Python tutorial for beginners. Although you’ll be able to follow along without experience, it’s always a good idea to start from the basics. If you’re new to web scraping, we’ve created a web scraping in Python tutorial for beginners. Although you’ll be able to follow along without experience, it’s always a good idea to start from the basics.

1. Gửi yêu cầu chính của chúng tôi

Hãy để tạo ra một thư mục mới cho dự án có tên Python-HTML-Table, sau đó là một thư mục mới có tên BS4-Table-SCRAPER và cuối cùng, tạo tệp python_table_scraper.py mới.54 mới.

Từ thiết bị đầu cuối, hãy để Lừa ____ ____26 và nhập chúng vào dự án của chúng tôi như sau:

import requests<br />from bs4 import BeautifulSoup

Để gửi các yêu cầu HTTP với các yêu cầu, tất cả những gì chúng tôi cần làm là đặt URL và chuyển nó qua các yêu cầu.get (), lưu trữ HTML được trả về bên trong một biến phản hồi và in phản hồi.status_code.

Lưu ý: Nếu bạn hoàn toàn mới đối với Python, bạn có thể chạy mã của mình từ thiết bị đầu cuối với lệnh python3 python_table_scraper.py.

url = 'https://datatables.net/examples/styling/stripe.html'</p><p>response = requests.get(url)</p><p>print(response.status_code)

Nếu nó hoạt động, nó sẽ trả lại mã trạng thái 200. Bất cứ điều gì khác có nghĩa là IP của bạn đang bị từ chối bởi các hệ thống chống xẹp mà trang web đã đặt. Một giải pháp tiềm năng là thêm các tiêu đề tùy chỉnh vào tập lệnh của bạn để làm cho tập lệnh của bạn trông giống con người hơn - nhưng điều đó có thể không đủ. Một giải pháp khác là sử dụng API quét web để xử lý tất cả những phức tạp này cho bạn.

2. Tích hợp Scraperapi để tránh các hệ thống chống xẹp

Scraperapi là một giải pháp thanh lịch để tránh hầu hết mọi loại kỹ thuật chống xẹp. Nó sử dụng học máy và nhiều năm phân tích thống kê để xác định các tiêu đề và kết hợp IP tốt nhất để truy cập dữ liệu, xử lý các captchas và xoay IP của bạn giữa mỗi yêu cầu.

Để bắt đầu, hãy để Lôi tạo một tài khoản miễn phí mới của Scraperapi để đổi 5000 API miễn phí và khóa API của chúng tôi. Từ bảng điều khiển tài khoản của chúng tôi, chúng tôi có thể sao chép giá trị chính của mình để xây dựng URL của yêu cầu.

http://api.scraperapi.com?api_key={Your_API_KEY}&amp;amp;amp;amp;amp;url={TARGET_URL}

Theo cấu trúc này, chúng tôi thay thế các chủ sở hữu bằng dữ liệu của chúng tôi và gửi lại yêu cầu của chúng tôi:

import requests<br />from bs4 import BeautifulSoup</p><p>url = 'http://api.scraperapi.com?api_key=51e43be283e4db2a5afbxxxxxxxxxxxx&amp;amp;amp;amp;amp;url=https://datatables.net/examples/styling/stripe.html'</p><p>response = requests.get(url)</p><p>print(response.status_code)

Tuyệt vời, nó làm việc mà không có Hiccup!

3. Xây dựng trình phân tích cú pháp bằng súp đẹp

Trước khi chúng tôi có thể trích xuất dữ liệu, chúng tôi cần biến HTML thô thành dữ liệu được định dạng hoặc phân tích cú pháp. Chúng tôi sẽ lưu trữ HTML phân tích cú pháp này vào một đối tượng súp như thế này:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
0

Từ đây, chúng ta có thể đi qua cây phân tích bằng cách sử dụng các thẻ HTML và các thuộc tính của chúng.

Nếu chúng tôi quay lại bảng trên trang, chúng tôi đã thấy rằng bảng được đặt giữa các thẻ

f = open('temp.html','w')
f.write(html)
f.close()
7 với lớp
f = open('temp.html','w')
f.write(html)
f.close()
8 mà chúng tôi có thể sử dụng để chọn bảng.
html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
3

Lưu ý: Sau khi thử nghiệm, thêm lớp thứ hai (DataTable) đã không trả về phần tử. Trên thực tế, trong các phần tử trở lại, lớp bảng Bảng chỉ là sọc. Bạn cũng có thể sử dụng ID = ‘ví dụ. After testing, adding the second class (dataTable) didn’t return the element. In fact, in the return elements, the table’s class is only stripe. You can also use id = ‘example’. After testing, adding the second class (dataTable) didn’t return the element. In fact, in the return elements, the table’s class is only stripe. You can also use id = ‘example’.

Đây là những gì nó trở lại:

Bây giờ chúng tôi đã lấy bảng, chúng tôi có thể lặp qua các hàng và lấy dữ liệu chúng tôi muốn.

4. Vòng lặp qua bảng HTML

Nghĩ lại cấu trúc bảng, mỗi hàng được biểu thị bằng phần tử

f = open('temp.html','w')
f.write(html)
f.close()
9 và trong đó có phần tử
<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>
0 chứa dữ liệu, tất cả điều này được bao bọc giữa một cặp thẻ
<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>
1.

Để trích xuất dữ liệu, chúng tôi sẽ tạo hai cho ngoại hình, một để lấy phần

<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>
1 của bảng (nơi tất cả các hàng) và một để lưu trữ tất cả các hàng vào một biến chúng tôi có thể sử dụng:
html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
0

Trong các hàng, chúng tôi sẽ lưu trữ tất cả các yếu tố

f = open('temp.html','w')
f.write(html)
f.close()
9 được tìm thấy trong phần cơ thể của bảng. Nếu bạn theo dõi logic của chúng tôi, bước tiếp theo là lưu trữ từng hàng riêng lẻ vào một đối tượng và lặp qua chúng để tìm dữ liệu mong muốn.

Để bắt đầu, hãy để Lôi cố gắng chọn tên nhân viên đầu tiên trên bảng điều khiển trình duyệt của chúng tôi bằng cách sử dụng phương thức .QuerySelectorall (). Một tính năng thực sự sử dụng của phương pháp này là chúng ta có thể đi sâu hơn và sâu hơn vào hệ thống phân cấp thực hiện biểu tượng lớn hơn (>) để xác định phần tử cha (ở bên trái) và đứa trẻ chúng ta muốn lấy (ở bên phải).

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
1

Điều đó không thể làm việc tốt hơn. Như bạn thấy, một khi chúng ta lấy tất cả các yếu tố, chúng trở thành một gật đầu. Bởi vì chúng ta có thể dựa vào một lớp để lấy từng ô, tất cả những gì chúng ta cần biết là vị trí của họ trong chỉ mục và cái đầu tiên, tên, là 0.

Từ đó, chúng ta có thể viết mã của mình như thế này:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
2

Nói một cách đơn giản, chúng tôi sẽ thực hiện từng hàng, từng cái một và tìm tất cả các ô bên trong, một khi chúng tôi có danh sách, chúng tôi chỉ lấy cái đầu tiên trong chỉ mục (vị trí 0) và kết thúc với phương thức .text để chỉ Lấy văn bản của phần tử, bỏ qua dữ liệu HTML mà chúng ta không cần.

Họ ở đó, một danh sách với tất cả các tên nhân viên tên! Đối với phần còn lại, chúng tôi chỉ theo cùng một logic:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
3

Tuy nhiên, có tất cả dữ liệu này được in trên bảng điều khiển của chúng tôi là siêu hữu ích. Thay vào đó, hãy để lưu trữ dữ liệu này thành một định dạng mới, hữu ích hơn.

5. Lưu trữ dữ liệu bảng vào tệp JSON

Mặc dù chúng tôi có thể dễ dàng tạo một tệp CSV và gửi dữ liệu của chúng tôi ở đó, nhưng đó sẽ là định dạng quản lý nhất nếu chúng tôi có thể tạo một cái gì đó mới bằng cách sử dụng dữ liệu bị xóa.

Tuy nhiên, ở đây, một dự án mà chúng tôi đã thực hiện vài tháng trước để giải thích cách tạo tệp CSV để lưu trữ dữ liệu bị xóa.

Tin tốt là Python có mô -đun JSON của riêng mình để làm việc với các đối tượng JSON, vì vậy chúng tôi không cần phải cài đặt bất cứ thứ gì, chỉ cần nhập nó.

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
4

Nhưng, trước khi chúng tôi có thể tiếp tục và tạo tệp JSON của mình, chúng tôi sẽ cần biến tất cả dữ liệu đã bị xóa này thành một danh sách. Để làm như vậy, chúng tôi sẽ tạo ra một mảng trống bên ngoài vòng lặp của chúng tôi.

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
5

Và sau đó nối dữ liệu vào nó, với mỗi vòng lặp nối lại một đối tượng mới vào mảng.

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
6

Nếu chúng ta

<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>
4, thì đây là kết quả:

Vẫn còn một chút lộn xộn, nhưng chúng tôi có một bộ các đối tượng sẵn sàng biến thành JSON.

Lưu ý: Như một bài kiểm tra, chúng tôi đã in chiều dài

f = open('temp.html','w')
f.write(html)
f.close()
75 và nó đã trả lại 57, đây là số lượng các hàng chính xác mà chúng tôi đã cạo (các hàng hiện là đối tượng trong mảng). As a test, we printed the length of 5 và nó đã trả lại 57, đây là số lượng các hàng chính xác mà chúng tôi đã cạo (các hàng hiện là đối tượng trong mảng). As a test, we printed the length of

<!DOCTYPE html>
<html lang="en">
<head>{{ title }}</head>
<body>
  <table border='1'>
    <thead>
     <tr>
       <th>Date</th>
       <th>DPC</th>
       <th>TOTAL</th>
       <th>Success</th>
     </tr>
    </thead>
    <tbody>
       <tr>
          {% for col in rows %}
              <td>{{ col }}</td>
          {% endfor %}
       </tr>
    </tbody>
</body>
</html>
5 and it returned 57, which is the correct number of rows we scraped (rows now being objects within the array).

Nhập danh sách vào JSON chỉ yêu cầu hai dòng mã:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
7
  • Đầu tiên, chúng tôi mở một tệp mới truyền trong tên chúng tôi muốn cho tệp
    <!DOCTYPE html>
    <html lang="en">
    <head>{{ title }}</head>
    <body>
      <table border='1'>
        <thead>
         <tr>
           <th>Date</th>
           <th>DPC</th>
           <th>TOTAL</th>
           <th>Success</th>
         </tr>
        </thead>
        <tbody>
           <tr>
              {% for col in rows %}
                  <td>{{ col }}</td>
              {% endfor %}
           </tr>
        </tbody>
    </body>
    </html>
    
    6 và ‘W, vì chúng tôi muốn viết dữ liệu cho nó.
  • Tiếp theo, chúng tôi sử dụng hàm
    <!DOCTYPE html>
    <html lang="en">
    <head>{{ title }}</head>
    <body>
      <table border='1'>
        <thead>
         <tr>
           <th>Date</th>
           <th>DPC</th>
           <th>TOTAL</th>
           <th>Success</th>
         </tr>
        </thead>
        <tbody>
           <tr>
              {% for col in rows %}
                  <td>{{ col }}</td>
              {% endfor %}
           </tr>
        </tbody>
    </body>
    </html>
    
    7 để hủy dữ liệu từ mảng
    <!DOCTYPE html>
    <html lang="en">
    <head>{{ title }}</head>
    <body>
      <table border='1'>
        <thead>
         <tr>
           <th>Date</th>
           <th>DPC</th>
           <th>TOTAL</th>
           <th>Success</th>
         </tr>
        </thead>
        <tbody>
           <tr>
              {% for col in rows %}
                  <td>{{ col }}</td>
              {% endfor %}
           </tr>
        </tbody>
    </body>
    </html>
    
    8
    <!DOCTYPE html>
    <html lang="en">
    <head>{{ title }}</head>
    <body>
      <table border='1'>
        <thead>
         <tr>
           <th>Date</th>
           <th>DPC</th>
           <th>TOTAL</th>
           <th>Success</th>
         </tr>
        </thead>
        <tbody>
           <tr>
              {% for col in rows %}
                  <td>{{ col }}</td>
              {% endfor %}
           </tr>
        </tbody>
    </body>
    </html>
    
    5
    import requests<br />from bs4 import BeautifulSoup
    0 và
    import requests<br />from bs4 import BeautifulSoup
    1 để mọi đối tượng có dòng riêng của nó thay vì mọi thứ trong một dòng không thể đọc được.

6. Chạy tập lệnh và mã đầy đủ

Nếu bạn đã theo dõi, cơ sở mã của bạn sẽ trông như thế này:your codebase should look like this:your codebase should look like this:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
8

Lưu ý: Chúng tôi đã thêm một số ý kiến ​​cho bối cảnh. We added some comments for context. We added some comments for context.

Và ở đây, một cái nhìn về ba đối tượng đầu tiên từ tệp JSON:

Lưu trữ dữ liệu được cạo ở định dạng JSON cho phép chúng tôi tái sử dụng thông tin cho các ứng dụng mới hoặc

Cạo bảng HTML bằng gấu trúc bằng cách sử dụng gấu trúc

Trước khi bạn rời khỏi trang, chúng tôi muốn khám phá một cách tiếp cận thứ hai để cạo các bảng HTML. Trong một vài dòng mã, chúng ta có thể xóa tất cả dữ liệu bảng từ tài liệu HTML và lưu trữ nó vào một dataFrame bằng gấu trúc.

Tạo một thư mục mới bên trong thư mục dự án (chúng tôi đặt tên nó là Pandas-HTML-Table-SCRAPER) và tạo một tên tệp mới pandas_table_scraper.py.

Hãy để mở một thiết bị đầu cuối mới và điều hướng đến thư mục chúng tôi vừa tạo (CD PANDAS-HTML-Table-SCRAPER) và từ đó cài đặt Pandas:

html = """\
    <table border='1'>
    <tr><th>Date</th><th>DPC</th><th>TOTAL</th><th>Success</th></tr>"""
for row in rows:
    html = html + "<tr>"
    for col in row:
        html = html + "<td>" + col.replace(" ", "") + "</td>"
    html = html + "</tr>"
html = html + "</table>"
9

Và chúng tôi nhập nó ở đầu tệp.

f = open('temp.html','w')
f.write(html)
f.close()
0

Pandas có một hàm gọi là read_html () về cơ bản xóa URL mục tiêu cho chúng tôi và trả về tất cả các bảng HTML dưới dạng danh sách các đối tượng DataFrame.

Tuy nhiên, để hoạt động này, bảng HTML cần được cấu trúc ít nhất là phần nào, vì hàm sẽ tìm kiếm các yếu tố muốn xác định các bảng trên tệp.

Để sử dụng chức năng, hãy để Lôi tạo một biến mới và truyền URL mà chúng tôi đã sử dụng trước đây cho nó:

f = open('temp.html','w')
f.write(html)
f.close()
1

Khi in nó, nó sẽ trả về một danh sách các bảng HTML trong trang.

Nếu chúng ta so sánh ba hàng đầu tiên trong DataFrame, chúng là một kết hợp hoàn hảo với những gì chúng ta đã cạo với súp đẹp.

Để làm việc với JSON, Pandas có thể có một kết thúc .to_json () tích hợp. Nó sẽ chuyển đổi một danh sách các đối tượng DataFrame thành chuỗi JSON

Tất cả những gì chúng ta cần làm là gọi phương thức trên DataFrame của chúng tôi và vượt qua đường dẫn, định dạng (chia, dữ liệu, hồ sơ, chỉ mục, v.v.) và thêm thụt lề để làm cho nó dễ đọc hơn:

f = open('temp.html','w')
f.write(html)
f.close()
2

Nếu chúng tôi chạy mã của chúng tôi ngay bây giờ, thì đây là tệp kết quả:

Lưu ý rằng chúng tôi cần chọn bảng của mình từ chỉ mục ([0]) vì .read_html () trả về danh sách không phải là một đối tượng.

Tại đây, mã đầy đủ cho tài liệu tham khảo của bạn:

f = open('temp.html','w')
f.write(html)
f.close()
3

Được trang bị kiến ​​thức mới này, bạn đã sẵn sàng để bắt đầu cạo hầu như bất kỳ bảng HTML nào trên web. Chỉ cần nhớ rằng nếu bạn hiểu cách cấu trúc trang web và logic đằng sau nó, thì không có gì bạn có thể cạo.

Điều đó nói rằng, các phương pháp này sẽ chỉ hoạt động miễn là dữ liệu nằm trong tệp HTML. Nếu bạn gặp phải một bảng được tạo động, bạn sẽ cần tìm một cách tiếp cận mới. Đối với các loại bảng này, chúng tôi đã tạo ra một hướng dẫn từng bước để cạo các bảng JavaScript bằng Python mà không cần các trình duyệt không đầu.

Cho đến lần sau, hạnh phúc cào!