Hướng dẫn how do you parse a table in html in python? - làm thế nào để bạn phân tích cú pháp một bảng trong html trong python?

Nếu HTML không phải là XML, bạn không thể làm điều đó với Etree. Nhưng ngay cả sau đó, bạn không phải sử dụng thư viện bên ngoài để phân tích bảng HTML. Trong Python 3, bạn có thể đạt được mục tiêu của mình với

[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]
6 từ
[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]
7. Tôi đã mã của lớp htmlparser có nguồn gốc đơn giản ở đây trong một repo github.not XML you can't do it with etree. But even then, you don't have to use an external library for parsing a HTML table. In python 3 you can reach your goal with
[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]
6 from
[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]
7. I've the code of the simple derived HTMLParser class here in a github repo.

Bạn có thể sử dụng lớp đó [ở đây có tên

[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]
8] theo cách sau:

import urllib.request
from html_table_parser import HTMLTableParser

target = '//www.twitter.com'

# get website content
req = urllib.request.Request[url=target]
f = urllib.request.urlopen[req]
xhtml = f.read[].decode['utf-8']

# instantiate the parser and feed it
p = HTMLTableParser[]
p.feed[xhtml]
print[p.tables]

Đầu ra của điều này là danh sách các danh sách 2D đại diện cho các bảng. Nó có thể như thế này:

[[['   ', ' Anmelden ']],
 [['Land', 'Code', 'Für Kunden von'],
  ['Vereinigte Staaten', '40404', '[beliebig]'],
  ['Kanada', '21212', '[beliebig]'],
  ...
  ['3424486444', 'Vodafone'],
  ['  Zeige SMS-Kurzwahlen für andere Länder ']]]

Một cái gì đó có vẻ khó khăn lúc đầu khi chuyển từ R sang Python đang thay thế tất cả các chức năng làm sẵn R có. Ví dụ, R có một đầu đọc CSV đẹp khỏi hộp. Người dùng Python cuối cùng sẽ tìm thấy gấu trúc, nhưng còn các thư viện R khác như đầu đọc bảng HTML của họ từ gói XML thì sao? Điều đó rất hữu ích cho việc cạo các trang web, nhưng trong Python, nó có thể mất thêm một chút công việc. Vì vậy, trong bài đăng này, chúng tôi sẽ viết một trình phân tích cú pháp bảng HTML ngắn gọn nhưng mạnh mẽ.

Viết một cái cạp bàn

Trình phân tích cú pháp của chúng tôi sẽ được xây dựng trên đầu gói Python Beautifulsoup. Nó có một gói tiện lợi và dễ sử dụng. Việc chúng tôi sử dụng sẽ tập trung vào chức năng Find Find_all, nhưng trước khi chúng tôi bắt đầu phân tích cú pháp, bạn cần hiểu những điều cơ bản của thuật ngữ HTML.

Một đối tượng HTML bao gồm một vài mảnh cơ bản: một thẻ. Định dạng xác định thẻ là

   

và nó có thể có các thuộc tính bao gồm một thuộc tính và một giá trị. Một thẻ chúng tôi quan tâm là thẻ bảng, xác định một bảng trong một trang web. Thẻ bảng này có nhiều yếu tố. Một phần tử là một thành phần của trang thường chứa nội dung. Đối với một bảng trong HTML, chúng bao gồm các hàng được chỉ định bởi các phần tử trong các thẻ TR và sau đó nội dung cột bên trong các thẻ TD. Một ví dụ điển hình là

Hello! Table

Nó chỉ ra rằng hầu hết các trang web giữ dữ liệu mà bạn muốn cạo trong các bảng, và vì vậy chúng tôi sẽ học cách phân tích chúng.

Phân tích bàn trong một cái bàn đẹp

Để phân tích bảng, chúng tôi sẽ sử dụng Thư viện Python BeautifulSoup. Nó xây dựng một cây từ HTML và cung cấp cho bạn một API để truy cập các yếu tố khác nhau của trang web.

Hãy nói rằng chúng tôi đã có đối tượng bảng của chúng tôi được trả về từ BeautifulSoup. Để phân tích bảng, chúng tôi muốn lấy một hàng, lấy dữ liệu từ các cột của nó và sau đó chuyển sang hàng quảng cáo tiếp theo. Trong bit tiếp theo của mã, chúng tôi xác định một trang web chỉ đơn giản là HTML cho một bảng. Chúng tôi tải nó vào BeautifulSoup và phân tích nó, trả lại khung dữ liệu gấu trúc của nội dung.

Như bạn có thể thấy, chúng tôi lấy tất cả các phần tử TR từ bảng, theo sau là lấy các phần tử TD một lần. Chúng tôi sử dụng phương thức get get_text [] từ phần tử TD [được gọi là một cột trong mỗi lần lặp] và đặt nó vào đối tượng Python của chúng tôi đại diện cho một bảng [cuối cùng nó sẽ là một khung dữ liệu pandas].

Sử dụng các yêu cầu để truy cập một nội dung web

Bây giờ, chúng tôi có kế hoạch phân tích một bảng, có lẽ chúng tôi cần phải tìm ra cách để đi đến điểm đó. Điều đó thực sự dễ dàng hơn! Chúng tôi sẽ sử dụng gói yêu cầu trong Python.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    import pandas as pd
    from bs4 import BeautifulSoup
    
    html_string = '''
      
Hello! Table
'''
soup = BeautifulSoup[html_string, 'lxml'] # Parse the HTML as a string table = soup.find_all['table'][0] # Grab the first table new_table = pd.DataFrame[columns=range[0,2], index = [0]] # I know the size row_marker = 0 for row in table.find_all['tr']: column_marker = 0 columns = row.find_all['td'] for column in columns: new_table.iat[row_marker,column_marker] = column.get_text[] column_marker += 1 new_table

'\r\n\n\n\n\n    Fantasy Football Leaders Weeks 1 to 17 - QB

Bài Viết Liên Quan

Chủ Đề

1
2
3
4
    import requests
    url = "//www.fantasypros.com/nfl/reports/leaders/qb.php?year=2015"
    response = requests.get[url]
    response.text[:100] # Access the HTML with the text property