Python biểu thức chính quy HTML

Lượng thông tin có sẵn trên internet cho con người là đáng kinh ngạc. Tuy nhiên, nếu dữ liệu này không ở dạng API REST chuyên dụng, thì việc truy cập theo chương trình có thể gặp khó khăn. Kỹ thuật thu thập và xử lý dữ liệu thô từ internet được gọi là web scraping. Có một số cách sử dụng để quét web trong phát triển phần mềm. Dữ liệu được thu thập thông qua quét web có thể được áp dụng trong nghiên cứu thị trường, tạo khách hàng tiềm năng‍, trí thông minh cạnh tranh, so sánh giá sản phẩm, theo dõi tâm lý người tiêu dùng, kiểm toán thương hiệu, AI và máy học, tạo bảng công việc, v.v.

Sử dụng trình phân tích cú pháp HTML được tạo riêng để phân tích cú pháp các trang HTML đơn giản hơn so với phân tích cú pháp bằng logic lập trình được viết tùy chỉnh. Có một số công cụ có sẵn để quét web bằng trình phân tích cú pháp HTML. Beautiful Soup là một trong những thư viện như vậy hoạt động với trình phân tích cú pháp HTML mà bạn chọn để quét web. Một số thích phân tích cú pháp các trang HTML bằng regex, vì nó nhẹ và đi kèm với nhiều ngôn ngữ lập trình—bạn không phải cài đặt bất kỳ phụ thuộc riêng biệt nào. Ngoài ra, nếu bạn xử lý các trang HTML đơn giản, được định dạng tốt, thì việc triển khai giải pháp phân tích cú pháp dựa trên regex khá đơn giản

Biểu thức chính quy (thường được viết tắt là biểu thức chính quy) là một chuỗi các chữ cái chỉ định mẫu tìm kiếm văn bản. Cụm từ thông dụng được sử dụng trong phân tích từ vựng, hộp thoại tìm kiếm và thay thế của bộ xử lý văn bản, chức năng tìm kiếm và thay thế của trình soạn thảo văn bản và các công cụ xử lý văn bản như sed và

Trong bài viết này, bạn sẽ tìm hiểu cách phân tích cú pháp HTML bằng regex trong Python. Trong hướng dẫn này, bạn sẽ tải xuống nội dung của trang web, tìm kiếm dữ liệu cần thiết và khám phá một số trường hợp sử dụng cụ thể để phân tích nội dung HTML bằng regex. Sau đó, bạn sẽ xem xét một số thách thức liên quan đến việc sử dụng biểu thức chính quy để phân tích cú pháp HTML tùy ý và tìm hiểu về các giải pháp thay thế

Phân tích cú pháp với Regex

Hỗ trợ Regex được cung cấp bởi phần lớn các ngôn ngữ lập trình có mục đích chung, bao gồm Python, C, C++, Java, Rust và JavaScript, nguyên bản hoặc thông qua các thư viện

Đoạn mã sau là một cú pháp regex đơn giản trong Python có thể được sử dụng để tìm mẫu chuỗi “

Python biểu thức chính quy HTML
Python biểu thức chính quy HTML


Như bạn có thể thấy trong ảnh chụp màn hình, có nhiều số liệu thống kê được công bố trên trang PyPI—tổng số dự án, bản phát hành, người dùng, v.v. Trong số này, bạn chỉ muốn trích xuất thông tin về tổng số dự án. Nếu bạn xem mã nguồn của tệp html mà bạn đã tải xuống trước đó,

python .\simple-html-parser.py

Simple HTML File
4, bạn sẽ nhận thấy rằng chỉ số này được đưa vào như một phần của thẻ
python .\simple-html-parser.py

Simple HTML File
7 nằm trong thẻ
python .\simple-html-parser.py

Simple HTML File
8

<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>

Bạn cũng sẽ nhận thấy rằng có nhiều trường hợp của từ “dự án” trong

python .\simple-html-parser.py

Simple HTML File
4. Thách thức là chỉ trích xuất số liệu thống kê được yêu cầu—trong trường hợp này là 410.645 dự án. Để làm như vậy, hãy sao chép và dán đoạn mã sau vào tệp Python có tên
import urllib.request


URL = "https://pypi.org/"
HTML_FILE = "file.html"


def write_html_of_given_url_to_file(input_url: str):
   urllib.request.urlretrieve(input_url, HTML_FILE)


write_html_of_given_url_to_file(URL)
0

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)

Ở đây,

import urllib.request


URL = "https://pypi.org/"
HTML_FILE = "file.html"


def write_html_of_given_url_to_file(input_url: str):
   urllib.request.urlretrieve(input_url, HTML_FILE)


write_html_of_given_url_to_file(URL)
1 được gọi với URL trang web PyPI làm đầu vào. Đến lượt phương thức này sử dụng phương thức
import urllib.request


URL = "https://pypi.org/"
HTML_FILE = "file.html"


def write_html_of_given_url_to_file(input_url: str):
   urllib.request.urlretrieve(input_url, HTML_FILE)


write_html_of_given_url_to_file(URL)
2 để đọc nội dung trang web và trả về các byte html cho phương thức gọi.
import urllib.request


URL = "https://pypi.org/"
HTML_FILE = "file.html"


def write_html_of_given_url_to_file(input_url: str):
   urllib.request.urlretrieve(input_url, HTML_FILE)


write_html_of_given_url_to_file(URL)
1 sau đó sử dụng mẫu biểu thức chính quy để lấy danh sách tất cả các kết quả phù hợp với mẫu được cung cấp. Mẫu biểu thức chính quy,
import urllib.request


URL = "https://pypi.org/"
HTML_FILE = "file.html"


def write_html_of_given_url_to_file(input_url: str):
   urllib.request.urlretrieve(input_url, HTML_FILE)


write_html_of_given_url_to_file(URL)
4, là chìa khóa để tìm tổng số dự án

  • import urllib.request
    
    
    URL = "https://pypi.org/"
    HTML_FILE = "file.html"
    
    
    def write_html_of_given_url_to_file(input_url: str):
       urllib.request.urlretrieve(input_url, HTML_FILE)
    
    
    write_html_of_given_url_to_file(URL)
    
    5 là viết tắt của byte
  • import urllib.request
    
    
    URL = "https://pypi.org/"
    HTML_FILE = "file.html"
    
    
    def write_html_of_given_url_to_file(input_url: str):
       urllib.request.urlretrieve(input_url, HTML_FILE)
    
    
    write_html_of_given_url_to_file(URL)
    
    6 là viết tắt của một hoặc nhiều số
  • import urllib.request
    
    
    URL = "https://pypi.org/"
    HTML_FILE = "file.html"
    
    
    def write_html_of_given_url_to_file(input_url: str):
       urllib.request.urlretrieve(input_url, HTML_FILE)
    
    
    write_html_of_given_url_to_file(URL)
    
    7 là viết tắt của dấu phẩy, vì số liệu thống kê được công bố trên trang PyPI sử dụng dấu phẩy làm dấu phân cách
  • import urllib.request
    
    
    URL = "https://pypi.org/"
    HTML_FILE = "file.html"
    
    
    def write_html_of_given_url_to_file(input_url: str):
       urllib.request.urlretrieve(input_url, HTML_FILE)
    
    
    write_html_of_given_url_to_file(URL)
    
    8 là viết tắt của số không hoặc khớp một lần của mã thông báo trước đó;
  • <div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
     <div class="statistics-bar">
       <p class="statistics-bar__statistic">
       410,645 projects
       p>
       <p class="statistics-bar__statistic">
       3,892,920 releases
       p>
       <p class="statistics-bar__statistic">
       6,961,696 files
       p>
       <p class="statistics-bar__statistic">
       633,650 users
       p>
     div>
    div>
    
    0 là viết tắt của một hoặc nhiều dấu cách
  • <div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
     <div class="statistics-bar">
       <p class="statistics-bar__statistic">
       410,645 projects
       p>
       <p class="statistics-bar__statistic">
       3,892,920 releases
       p>
       <p class="statistics-bar__statistic">
       6,961,696 files
       p>
       <p class="statistics-bar__statistic">
       633,650 users
       p>
     div>
    div>
    
    1 chỉ là chuỗi

Vì kiểu trả về của


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
8 là một danh sách, nên việc lặp lại danh sách được thực hiện để in số liệu thống kê của dự án ra đầu ra của thiết bị đầu cuối

Khi bạn chạy tập lệnh, bạn sẽ thấy một đầu ra như thế này

python .\print-total-number-of-projects.py

 ***** Printing Projects Count *****

410,645 projects

Trích xuất liên kết

Bây giờ bạn đã hiểu kiến ​​thức cơ bản về phân tích cú pháp HTML bằng biểu thức chính quy, hãy xem liệu bạn có thể lập trình để trích xuất các liên kết (bất kỳ URL được tham chiếu https hoặc http nào) từ cùng một trang không. Bạn có tất cả sự trợ giúp cần thiết từ các phần trước;

Bạn có thể coi đây như một bài tập để thực hiện, hoặc tham khảo mã nguồn bên dưới để biết câu trả lời

import re
import urllib.request

URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
    html = urllib.request.urlopen(input_url).read()
    return html


def get_all_referenced_urls(input_url: str) -> list:
    links_list = []

    html = get_html(input_url)
    referenced_urls = re.findall(b'href="(https?://.*?)"', html)
    print("\n ***** Printing all http(s) URLs ***** \n")
    for referenced_url in referenced_urls:
        print(referenced_url.decode())
        links_list.append(referenced_url.decode())

    return links_list


get_all_referenced_urls(URL)

Khi bạn sao chép và dán đoạn mã trên vào một tệp có tên

<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>
3 và chạy tập lệnh bằng cách sử dụng lệnh
<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>
4, bạn sẽ nhận được danh sách các liên kết URL được tham chiếu từ trang PyPI

Lọc thẻ trống

HTML hỗ trợ các thẻ trống—nghĩa là các thẻ không được có bất kỳ thẻ lồng nhau hoặc nút con nào. Các thẻ trống này còn được gọi là các phần tử trống. Chúng thường có thẻ bắt đầu nhưng không cần thẻ kết thúc như các thẻ không trống. Ngay cả khi bạn đã chỉ định thẻ kết thúc trong trang HTML cho các thẻ trống như vậy, trình duyệt sẽ không báo lỗi. Bạn có thể tham khảo bài viết này để biết thêm thông tin và xem danh sách đầy đủ các thẻ trống trong HTML

Giả sử bạn muốn lọc ra các thẻ trống này khỏi tệp HTML đã tải xuống của trang PyPI. Làm thế nào bạn sẽ đi về nó?

import os
import re
import shutil
import urllib.request

URL = "https://pypi.org/"
HTML_FILE = "file.html"
ALTERED_HTML_FILE = "altered-file.html"

# Source of Empty tags list or Void elements list :
# https://developer.mozilla.org/en-US/docs/Glossary/Void_element
EMPTY_TAGS_LIST = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "param",
                   "source", "track", "wbr"]


def write_html_of_given_url_to_file(input_url: str):
    urllib.request.urlretrieve(input_url, HTML_FILE)


def filter_empty_tags(input_file, output_file):
    """
    Accepts two files as input. One will be considered as input and the other will be for writing the output which
    will store html contents from input file except that of empty tags
    :param input_file:
    :param output_file:
    :return:
    """

    shutil.copyfile(input_file, output_file)
    for empty_tag in EMPTY_TAGS_LIST:
        remove_empty_tag_from_html(output_file, empty_tag)


def remove_empty_tag_from_html(input_file, empty_tag_element: str):
    matched = re.compile('<' + empty_tag_element).search
    with open(input_file, "r", encoding="utf-8") as file:
        with open('temp.html', 'w', encoding="utf-8") as output_file:
            for line in file:
                if not matched(line):  # save lines that do not match
                    print(line, end='', file=output_file)  # this goes to filename due to inplace=1

    os.replace('temp.html', input_file)


write_html_of_given_url_to_file(URL)
filter_empty_tags(HTML_FILE, ALTERED_HTML_FILE)

Chạy lệnh sau


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
0

Thao tác này sẽ tạo hai tệp trong thư mục mà bạn đã đặt và thực thi tập lệnh Python ở trên. Nội dung tải xuống ban đầu của trang PyPI được chứa trong

python .\simple-html-parser.py

Simple HTML File
4 và nội dung HTML đã sửa đổi (sau khi lọc ra các thẻ trống) được chứa trong
<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>
7

Lọc nhận xét

Sử dụng phương pháp tương tự, bạn có thể lọc nhận xét từ trang HTML. Nhận xét trong HTML được biểu diễn như sau


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
1

Bạn có thể thử điều này cho chính mình dựa trên những gì bạn đã học được cho đến nay. Hoặc, nếu bạn muốn mã nguồn cho trường hợp sử dụng này, hãy sao chép và dán tập lệnh Python bên dưới vào tệp có tên

<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>
8


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
2

Sau đó chạy nó bằng lệnh

<div class="horizontal-section horizontal-section--grey horizontal-section--thin horizontal-section--statistics">
 <div class="statistics-bar">
   <p class="statistics-bar__statistic">
   410,645 projects
   p>
   <p class="statistics-bar__statistic">
   3,892,920 releases
   p>
   <p class="statistics-bar__statistic">
   6,961,696 files
   p>
   <p class="statistics-bar__statistic">
   633,650 users
   p>
 div>
div>
9. Tập lệnh này lọc ra các nhận xét HTML từ nội dung trang web đã tải xuống

Regex thất bại như thế nào với HTML tùy ý

Cho đến giờ, bạn đã khám phá cách regex có thể được sử dụng để phân tích một trang HTML. Tuy nhiên, nếu bạn cần phân tích cú pháp HTML tùy ý bằng các thẻ không đều hoặc không có định dạng chuẩn, bạn sẽ thấy biểu thức chính quy đó bỏ sót một số thông tin quan trọng

Tạo một tệp html mẫu,

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
0, với nội dung sau


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
3

Lưu ý rằng thẻ

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
1 của
python .\simple-html-parser.py

Simple HTML File
8 thứ ba được lồng với thẻ con,
python .\simple-html-parser.py

Simple HTML File
7 và thẻ trống,
import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
4. Nếu mục tiêu của bạn là trích xuất tất cả thông tin có sẵn như là một phần của tất cả các thẻ
import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
1, thì định dạng HTML như vậy sẽ là một thách thức

Sao chép và dán đoạn mã sau vào tệp có tên

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
6


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
4

Cả hai tệp này—

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
0 và
import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
6—phải có trong cùng một thư mục. Bây giờ hãy chạy như sau


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
5

Bạn sẽ nhận được một đầu ra như thế này


<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>Simple HTML Filetitle>
head>
<body>
   <h1>Tutorial on How to Parse HTML with Regexh1>
   <p>This is a sample html file used as an examplep>
body>
html>
6

Lưu ý rằng không thể truy xuất thông tin trong thẻ

import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
1 thứ ba bằng cách sử dụng trình phân tích cú pháp regex vì nội dung trang không chuẩn và có định dạng khác với các thẻ
import re
import urllib.request


URL = "https://pypi.org/"


def get_html(input_url: str) -> bytes:
   html = urllib.request.urlopen(input_url).read()
   return html


def print_projects_count(input_url: str) -> None:
   html = get_html(input_url)
   stats = re.findall(b'\\d+,?\\d+,?\\d+\\s+projects', html)
   print("\n ***** Printing Projects Count ***** \n")
   for stat in stats:
       print(stat.decode())


print_projects_count(URL)
1 khác—biểu thức regex hiện tại không thể xử lý thông tin đó. Bạn có thể giới thiệu các quy tắc tùy chỉnh để xử lý các trường hợp như vậy, nhưng không có giải pháp được đề xuất tiêu chuẩn nào, điều này gây khó khăn cho việc phân tích cú pháp bằng biểu thức chính quy. Để đơn giản hóa mọi thứ, bạn có thể sử dụng giải pháp thay thế như ScrapingBee, BeautifulSoup, JSoup hoặc Selenium

ScrapingBee là một nền tảng tìm kiếm trên web có thể giúp bạn thực hiện các dự án có mục đích chung—chẳng hạn như trích xuất các bài đánh giá hoặc lời chứng thực từ một trang web, tìm kiếm bất động sản hoặc theo dõi giá—tất cả mà không bị chặn bởi tổ chức lưu trữ hoặc quản lý trang web. Nó cũng có thể trợ giúp với các trường hợp quét web nâng cao hơn, như trích xuất thông tin từ các phần tử lồng nhau, trích xuất thuộc tính hoặc trích xuất các trang kết quả của công cụ tìm kiếm. API ScrapingBee hoạt động xuất sắc để giúp quá trình trích xuất dữ liệu của bạn diễn ra dễ dàng nhằm cải thiện năng suất của nhóm bạn. Ngoài ra, đối với những người không phải là lập trình viên, ScrapingBee có tính năng quét web không cần mã, theo đó ngay cả người dùng doanh nghiệp cũng có thể dễ dàng quét các trang web mục tiêu của họ. Bạn có thể xem blog này để tìm hiểu thêm về quét web không có mã

Phần kết luận

Quét web cực kỳ hữu ích trong việc trích xuất thông tin có thể giúp doanh nghiệp của bạn ra quyết định hoặc thậm chí tự động hóa các chiến lược kinh doanh nhất định. Ví dụ: định giá sản phẩm của bạn một cách cạnh tranh bằng cách so sánh giá sản phẩm của bạn với giá trên trang web của đối thủ cạnh tranh không cần phải thực hiện thao tác thủ công

Trong bài viết này, bạn đã tìm hiểu về các trường hợp sử dụng của web scraping trong một số miền. Bạn đã tự thực hiện phân tích cú pháp HTML bằng cách tải xuống nội dung từ một trang web và trích xuất thông tin như liên kết và mẫu chuỗi từ trang đó bằng biểu thức chính quy. Bạn cũng đã học cách lọc các thẻ và nhận xét trống

Regex có thể tuyệt vời để phân tích cú pháp HTML, nhưng nó có những hạn chế. Để phân tích cú pháp và trích xuất dữ liệu từ HTML tùy ý, hãy cân nhắc sử dụng giải pháp thay thế như ScrapingBee để thực hiện mọi việc nhanh chóng và dễ dàng

Tất cả các mã nguồn từ bài viết này có thể được tìm thấy trong repo GitHub này

Python biểu thức chính quy HTML

Rajkumar Venkatasamy

Rajkumar có gần mười sáu năm kinh nghiệm trong ngành công nghiệp phần mềm với tư cách là nhà phát triển, người lập mô hình dữ liệu, người thử nghiệm, trưởng dự án. Hiện tại, anh là kiến ​​trúc sư chính tại một MNC

Bạn có thể sử dụng regex trên HTML không?

Mặc dù sử dụng regex để phân tích cú pháp HTML có một số hạn chế, nhưng nó cho phép bạn xây dựng một giải pháp nhanh chóng và phục vụ tốt cho các trường hợp sử dụng như phân tích cú pháp các trang HTML đơn giản, lọc ra một thẻ/nhóm thẻ nhất định khỏi trang HTML hoặc để trích xuất một văn bản cụ thể

Làm cách nào tôi có thể sử dụng regex trong Python?

Python có một mô-đun tên là re để hoạt động với RegEx . Đây là một ví dụ. nhập lại mẫu = '^a. s$' test_string = 'vực thẳm' kết quả = lại. khớp (mẫu, test_string) nếu kết quả. print("Tìm kiếm thành công. ") khác. print("Tìm kiếm không thành công. ")

làm gì '. ' Có nghĩa là trong regex?

Đó là một cái nhìn tiêu cực, có nghĩa là để biểu thức khớp, phần bên trong (?. ) không được khớp . Trong trường hợp này, regex khớp với http. // chỉ khi nó không được theo sau bởi tên máy chủ hiện tại (đại khái, xem nhận xét của Thilo).

Python có chấp nhận regex không?

Mô-đun RegEx . Python has a built-in package called re , which can be used to work with Regular Expressions.