Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

Làm thế nào để phát hiện chuỗi chứa HTML (có thể là HTML4, HTML5, chỉ là một phần của HTML trong văn bản)? Tôi không cần một phiên bản HTML, mà là nếu chuỗi chỉ là một văn bản hoặc nó chứa HTML. Văn bản thường là đa dòng với các dòng trống

Update:

Ví dụ đầu vào:

html:

I'm title
Hello, world

không html:

<
 head  html

Đã hỏi ngày 20 tháng 7 năm 2014 lúc 23:54Jul 20, 2014 at 23:54

Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

tĩnhstatic

7.82615 Huy hiệu vàng62 Huy hiệu bạc88 Huy hiệu đồng15 gold badges62 silver badges88 bronze badges

2

Bạn có thể sử dụng trình phân tích cú pháp HTML, như

<
 head  html
1. Lưu ý rằng nó thực sự cố gắng hết sức để phân tích HTML, thậm chí HTML bị hỏng, nó có thể rất và không khoan dung tùy thuộc vào trình phân tích cú pháp cơ bản:

>>> from bs4 import BeautifulSoup
>>> html = """
... I'm title
... """
>>> non_html = "This is not an html"
>>> bool(BeautifulSoup(html, "html.parser").find())
True
>>> bool(BeautifulSoup(non_html, "html.parser").find())
False

Điều này về cơ bản cố gắng tìm bất kỳ phần tử HTML nào bên trong chuỗi. Nếu tìm thấy - kết quả là

<
 head  html
2.

Một ví dụ khác với đoạn HTML:

>>> html = "Hello, world"
>>> bool(BeautifulSoup(html, "html.parser").find())
True

Ngoài ra, bạn có thể sử dụng

<
 head  html
3:

>>> import lxml.html
>>> html = 'Hello, world'
>>> non_html = "<"
>>> lxml.html.fromstring(html).find('.//*') is not None
True
>>> lxml.html.fromstring(non_html).find('.//*') is not None
False

Đã trả lời ngày 21 tháng 7 năm 2014 lúc 0:23Jul 21, 2014 at 0:23

Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

Alecxealecxealecxe

449K114 Huy hiệu vàng1043 Huy hiệu bạc1167 Huy hiệu đồng114 gold badges1043 silver badges1167 bronze badges

8

Một cách tôi nghĩ là để giao nhau các thẻ bắt đầu và kết thúc được tìm thấy bằng cách cố gắng phân tích văn bản là HTML và giao nhau tập hợp này với một tập hợp các phần tử HTML có thể chấp nhận được.

Example:

#!/usr/bin/env python

from __future__ import print_function

from HTMLParser import HTMLParser


from html5lib.sanitizer import HTMLSanitizerMixin


class TestHTMLParser(HTMLParser):

    def __init__(self, *args, **kwargs):
        HTMLParser.__init__(self, *args, **kwargs)

        self.elements = set()

    def handle_starttag(self, tag, attrs):
        self.elements.add(tag)

    def handle_endtag(self, tag):
        self.elements.add(tag)


def is_html(text):
    elements = set(HTMLSanitizerMixin.acceptable_elements)

    parser = TestHTMLParser()
    parser.feed(text)

    return True if parser.elements.intersection(elements) else False


print(is_html("foo bar"))
print(is_html("

Hello World!

")) print(is_html("Title

Hello!

")) # noqa

Output:

$ python foo.py
False
True
True

Điều này hoạt động cho văn bản một phần chứa một tập hợp con của các phần tử HTML.

NB: Điều này sử dụng HTML5LIB để nó có thể không hoạt động cho các loại tài liệu khác nhất thiết nhưng kỹ thuật có thể được điều chỉnh dễ dàng. This makes use of the html5lib so it may not work for other document types necessarily but the technique can be adapted easily.

Đã trả lời ngày 21 tháng 7 năm 2014 lúc 0:19Jul 21, 2014 at 0:19

James Millsjames MillsJames Mills

18.1k3 Huy hiệu vàng46 Huy hiệu bạc59 Huy hiệu Đồng3 gold badges46 silver badges59 bronze badges

2

Nếu tất cả những gì bạn cần biết là một chuỗi có chứa văn bản HTML thì một giải pháp khác không được liệt kê ở đây sẽ là sử dụng biểu thức regex như sau:

<
 head  html
4

Hãy nhớ rằng mặc dù đây sẽ là một giải pháp nhanh hơn nhiều so với việc sử dụng trình phân tích cú pháp HTML, nhưng nó có thể không chính xác tùy thuộc vào sự phức tạp của đánh dấu HTML mà bạn đang mong đợi.

Dưới đây là một bài kiểm tra về Regex ở trên cho một ý tưởng chung về phạm vi bảo hiểm của nó.

Đã trả lời ngày 4 tháng 1 lúc 22:06Jan 4 at 22:06

Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

UllauriulauriUllauri

1.38714 Huy hiệu bạc13 Huy hiệu đồng14 silver badges13 bronze badges

Bạn có thể dễ dàng mở rộng htmlparser tích hợp đã xử lý phân tích cú pháp và thu thập (bắt đầu/kết thúc)

<
 head  html
5,
<
 head  html
6 và
<
 head  html
7. Để khẳng định liệu tài liệu có hợp lệ hay không, số lượng thẻ bắt đầu phải khớp với số lượng thẻ cuối:

from html.parser import HTMLParser


class MyHTMLParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.start_tags = list()
        self.end_tags = list()
        self.attributes = list()
    
    def is_text_html(self):
        return len(self.start_tags) == len(self.end_tags)

    def handle_starttag(self, tag, attrs):
        self.start_tags.append(tag)
        self.attributes.append(attrs)

    def handle_endtag(self, tag):
        self.end_tags.append(tag)

    def handle_data(self, data):
        print("Encountered some data  :", data)

sau đó

>>> parser = MyHTMLParser()
>>> parser.feed("I'm title"
                "Hello, world")
>>> parser.is_text_html()

True

>>> parser.feed("<"
                " head  html")
>>> parser.is_text_html()

False

Đã trả lời ngày 3 tháng 12 năm 2021 lúc 12:07Dec 3, 2021 at 12:07

Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

Stefano Messinastefano MessinaStefano Messina

1.6261 Huy hiệu vàng17 Huy hiệu bạc22 Huy hiệu đồng1 gold badge17 silver badges22 bronze badges

Kiểm tra các thẻ kết thúc. Đây là đơn giản nhất và mạnh mẽ nhất tôi tin.

"" in possibly_html

Nếu có thẻ HTML kết thúc, thì có vẻ như HTML, nếu không thì không quá nhiều.

Đã trả lời ngày 21 tháng 7 năm 2014 lúc 0:06Jul 21, 2014 at 0:06

Andrew Johnsonandrew JohnsonAndrew Johnson

3.0201 Huy hiệu vàng17 Huy hiệu bạc23 Huy hiệu đồng1 gold badge17 silver badges23 bronze badges

3

Mở rộng trên bài viết trước, tôi sẽ làm một cái gì đó như thế này cho một cái gì đó nhanh chóng và đơn giản:

<
 head  html
0

Đã trả lời ngày 21 tháng 7 năm 2014 lúc 0:37Jul 21, 2014 at 0:37

Hướng dẫn check if string is html python - kiểm tra xem chuỗi có phải là html python không

2

Làm thế nào để bạn kiểm tra xem một chuỗi là HTML?

You could check if the string contains at least one < and at least one > and call it HTML, or you could check that it is strictly valid with correct HTML syntax, or anything from between. For the simplest of cases a HTML parser is not necessary.

Làm thế nào để Python phát hiện thẻ HTML?

Giải pháp - Phát hiện thẻ HTML, thuộc tính và giá trị thuộc tính..
# Nhập mã của bạn ở đây. Đọc đầu vào từ Stdin. ....
từ html.parser nhập Htmlparser ..
lớp myhtmlparser (htmlparser):.
DEF Tay cầm_starttag (self, Tag, attrs):.
print(tag).
[print ('-> {}> {}'. định dạng (*attr)) cho attr trong attrs].
html = '\ n'. ....
trình phân tích cú pháp = myhtmlparser ().

Làm cách nào để nhận dữ liệu HTML từ Python?

Gửi HTTP Nhận yêu cầu đến URL của trang web mà bạn muốn cạo, sẽ trả lời với nội dung HTML.Chúng tôi có thể làm điều này bằng cách sử dụng thư viện yêu cầu của Python.Tìm nạp và phân tích dữ liệu bằng cách sử dụng BeautifulSoup và duy trì dữ liệu trong một số cấu trúc dữ liệu như Dict hoặc Danh sách.. We can do this by using the Request library of Python. Fetching and parsing the data using Beautifulsoup and maintain the data in some data structure such as Dict or List.

Chuỗi HTML là gì?

Không giống như hầu hết các trình phân tích cú pháp HTML tạo ra các cấu trúc cây, HTMLString tạo ra một chuỗi các ký tự với bộ thẻ riêng.Cấu trúc phẳng này giúp dễ dàng điều khiển các phạm vi (ví dụ - văn bản được chọn bởi người dùng) vì mỗi ký tự độc lập và không dựa vào cấu trúc thẻ phân cấp.generates a string of characters each with its own set of tags. This flat structure makes it easy to manipulate ranges (for example - text selected by a user) as each character is independent and doesn't rely on a hierarchical tag structure.