Skip to content

Chương 4_Trang 3_Cách thức lấy dữ liệu từ ngoài vào hệ thống để thu thập và phân tích hiệu quả

PhD Le Toan Thang edited this page Apr 25, 2024 · 4 revisions

Nhu cầu lấy dữ liệu từ các mạng Web, API Rest API và từ nhiều nguồn:

1. Sự cần thiết để lấy dữ liệu từ các mạng web, API REST và các nguồn khác ngày càng tăng lên, đặc biệt trong lĩnh vực phân tích dữ liệu và trí tuệ nhân tạo. Việc lấy dữ liệu từ các nguồn khác nhau đem lại nhiều lợi ích, bao gồm nắm bắt thông tin mới, phân tích xu hướng, tạo dữ liệu đào tạo mô hình và cung cấp thông tin chi tiết cho quyết định kinh doanh.

2. Có nhiều phương pháp để lấy dữ liệu từ các nguồn khác nhau như sau: 2.1. Web Scraping: Phương pháp này liên quan đến việc trích xuất dữ liệu từ các trang web bằng cách phân tích cú pháp HTML và CSS. BeautifulSoup và Scrapy là hai thư viện phổ biến được sử dụng trong Python để thực hiện web scraping.

2.2. REST API: REST (Representational State Transfer) là một kiến trúc phổ biến cho việc truyền thông dữ liệu giữa các hệ thống. Các API REST cung cấp các endpoint để truy cập và tương tác với dữ liệu. Để lấy dữ liệu từ API REST, bạn có thể sử dụng thư viện requests trong Python để gửi các yêu cầu HTTP GET, POST, PUT, DELETE và nhận lại dữ liệu dưới dạng JSON hoặc XML.

2.3. Các giao thức khác: Ngoài REST API, còn có nhiều giao thức khác như SOAP (Simple Object Access Protocol), GraphQL, FTP (File Transfer Protocol), SSH (Secure Shell), và nhiều giao thức khác. Mỗi giao thức có cách thức lấy dữ liệu riêng, và bạn cần sử dụng các thư viện hoặc công cụ phù hợp để tương tác với chúng.

3. Thách thức và khó khăn thường gặp khi lấy dữ liệu từ các nguồn khác nhau bao gồm:

3.1. Quyền truy cập và xác thực: Một số nguồn dữ liệu yêu cầu xác thực trước khi truy cập, bằng cách sử dụng API keys, token hay tài khoản đăng nhập. Điều này đòi hỏi bạn phải hiểu và tuân thủ quy tắc và hạn chế của nguồn dữ liệu.

3.2. Giới hạn tốc độ và lưu lượng truy cập: Một số nguồn dữ liệu áp đặt giới hạn về tốc độ truy cập hoặc lưu lượng truy cập mỗi ngày để tránh quá tải hệ thống. Bạn cần phải tìm hiểu về các hạn chế này và áp dụng các biện pháp để tuân thủ.

3.3. Cấu trúc dữ liệu không đồng nhất: Khi lấy dữ liệu từ nhiều nguồn khác nhau, cấu trúc dữ liệu có thể không đồng nhất, điều này đòi hỏi bạn phải xử lý và biến đổi dữ liệu để đảm bảo tính nhất quán và sử dụng được cho mục đích phân tích.

3.4. Bảo mật và quyền riêng tư: Khi lấy dữ liệu từ các nguồn bên ngoài, bạn cần phải xem xét các vấn đề liên quan đến bảo mật và quyền riêng tư. Bạn cần phải tuân thủ các quy định và chính sách bảo mật và đảm bảo rằng dữ liệu được xử lít và lưu trữ một cách an toàn và tuân thủ quyền riêng tư.

3.5. Thay đổi cấu trúc dữ liệu: Các nguồn dữ liệu có thể thay đổi cấu trúc và định dạng dữ liệu của họ theo thời gian. Điều này đòi hỏi bạn cần theo dõi và cập nhật các quy tắc và mã của mình để phù hợp với các thay đổi này.

3.5. Tiêu chuẩn hóa dữ liệu: Khi lấy dữ liệu từ nhiều nguồn, các quy tắc và tiêu chuẩn về cấu trúc và định dạng dữ liệu có thể khác nhau. Bạn cần phải xử lý và tiêu chuẩn hóa dữ liệu để đảm bảo tính nhất quán và đồng nhất trong quá trình phân tích.

3.6. Để vượt qua các thách thức này , cần có kiến thức vững chắc về công nghệ, các giao thức và quy tắc liên quan đến lấy dữ liệu từ các nguồn khác nhau. Đồng thời, việc sử dụng các thư viện và công cụ phù hợp trong Python, như requests, BeautifulSoup và các thư viện liên quan, sẽ giúp giảm bớt khó khăn trong quá trình lấy dữ liệu.

AI/ML có thể hỗ trợ việc tối ưu hóa, viết coding, hiện thực và đơn giản hóa lấy dữ liệu, xử lý dữ liệu từ nguồn khác:

AI/ML có thể hỗ trợ việc tối ưu hóa, viết coding, hiện thực và đơn giản hóa lấy dữ liệu, 
xử lý dữ liệu từ nguồn khác, thế mạnh của tôi chỉ biết python, một số hàm html.parse vậy có cách nào làm đơn giản hóa việc này ?

Câu trả lời của AI:

Tất nhiên, AI/ML có thể hỗ trợ việc tối ưu hóa, viết mã, hiện thực và đơn giản hóa quá trình 
lấy dữ liệu và xử lý dữ liệu từ các nguồn khác nhau. Python cũng cung cấp nhiều thư viện và công cụ hữu ích để làm việc này.

Một số thư viện Python phổ biến để đơn giản hóa việc lấy dữ liệu và xử lý dữ liệu từ nguồn khác nhau bao gồm:

requests: Thư viện này giúp gửi các yêu cầu HTTP, bao gồm GET, POST, PUT và DELETE, 
để tương tác với các API REST và lấy dữ liệu từ các trang web.

BeautifulSoup: Đây là một thư viện mạnh mẽ để phân tích cú pháp HTML và XML. 
Nó giúp bạn trích xuất dữ liệu từ các trang web và thực hiện web scraping một cách đơn giản.

pandas: Thư viện này cung cấp các công cụ cho việc xử lý và phân tích dữ liệu. 
Bạn có thể đọc dữ liệu từ nhiều nguồn như CSV, Excel, SQL, và thậm chí từ URL. 
Pandas cũng cung cấp các hàm để làm sạch và biến đổi dữ liệu.

scikit-learn: Đây là một thư viện máy học phổ biến trong Python. 
Nó cung cấp các thuật toán học máy và công cụ để huấn luyện mô hình và tối ưu hóa các quy trình xử lý dữ liệu.

Với sự kết hợp của các thư viện này, bạn có thể viết mã Python để lấy dữ liệu từ các nguồn khác nhau, 
đồng thời xử lý và biến đổi dữ liệu một cách đơn giản. 
Ví dụ, sử dụng requests để gửi yêu cầu HTTP để lấy dữ liệu từ API REST, 
sau đó sử dụng BeautifulSoup để phân tích cú pháp HTML và trích xuất thông tin cần thiết từ các trang web. 
Cuối cùng, bạn có thể sử dụng pandas để làm sạch và biến đổi dữ liệu theo nhu cầu của mình.

Tuy nhiên, khi sử dụng AI/ML để hỗ trợ việc lấy và xử lý dữ liệu, cần có kiến thức vững chắc về các thuật toán 
và phương pháp học máy, cũng như hiểu rõ về các quy tắc và giới hạn của nguồn dữ liệu.

Xây dựng Chat AI làm Copilot can thiệp define coding:

import ollama
response = ollama.chat(model='llama3', messages=[
  {
    'role': 'user',
    'content': 'Tôi cần hàm viết python và thư viện beatiful soup để chạy trên jupyter có thể load URL hoặc file html/htm để tách các tag div, table.... và lấy các value có cấu trúc metadata hoặc cho sang CSV/Excel/ MS SQL để phân tích dữ liệu',
  },
])
print(response['message']['content'])

và sau khá lâu khoảng gần 7 phút (chưa lâu bằng bật tv led-tuin Balan cũ hơn ~ 30 phút)

  • Chúng ta có thể lục trong file server.log

image

I see you're looking for a Python script using Beautiful Soup to extract data from HTML files or 
URLs and export the results to various formats such as CSV, Excel, or MS SQL. Here's an example code to get you started:
import requests
from bs4 import BeautifulSoup
import pandas as pd

# Load URL or file
url_or_file = "https://example.com/"  # replace with your URL or file path
if url_or_file.startswith("http"):
    response = requests.get(url_or_file)
    soup = BeautifulSoup(response.content, "html.parser")
else:
    with open(url_or_file, "r") as f:
        soup = BeautifulSoup(f.read(), "html.parser")

# Extract data using Beautiful Soup
divs = soup.find_all("div", class_="your-class-name")  # adjust the CSS selector to match your HTML structure
tables = soup.find_all("table")
data = []
for div in divs:
    for child in div.children:
        if isinstance(child, str):
            data.append((child.strip(),))  # extract text content and add it to the list
for table in tables:
    rows = []
    for row in table.find_all("tr"):
        cols = []
        for cell in row.find_all("td"):
            cols.append(cell.text)
        rows.append(cols)
    data.extend(rows)

# Convert data to CSV or Excel format
df = pd.DataFrame(data[1:], columns=data[0])
if url_or_file.endswith(".csv"):
    df.to_csv(url_or_file, index=False)
elif url_or_file.endswith(".xlsx"):
    df.to_excel(url_or_file, index=False)
elif url_or_file.startswith("mssql://"):  # assuming MS SQL connection string
    import pyodbc
    conn = pyodbc.connect(url_or_file)
    cursor = conn.cursor()
    cursor.executemany("INSERT INTO your_table_name (column1, column2) VALUES (?, ?)", df.values.tolist())
    conn.commit()

Here's what the code does:

1. It loads a URL or file using `requests` and `BeautifulSoup`.
2. It extracts data from HTML elements such as `<div>` and `<table>` using CSS selectors.
3. It converts extracted data to a Pandas DataFrame.
4. It exports the DataFrame to various formats:
	* CSV: uses `pandas` to write the DataFrame to a CSV file.
	* Excel: uses `pandas` to write the DataFrame to an Excel file (`.xlsx` format).
	* MS SQL: assumes you have a valid connection string and inserts data into a table using `pyodbc`.

Note that this is just an example code, and you'll need to adjust it to fit your specific use case. 
You may also want to add error handling and more advanced data processing techniques as needed.

To run this code in Jupyter, simply create a new notebook, paste the code into a cell, and execute it by pressing 
Shift+Enter or clicking the "Run" button.

Những nghi ngại về khả năng thành công trong phương pháp dùng lập trình và Web scraping lấy dữ liệu từ nguồn khác:

Hãy cho tôi biết nếu dùng python với thư viện beatiful soup thì tôi có thể truy cập và xử lý các dạng dữ liệu gì ? 
ví dụ: có lấy được các URL Html 5 có user, pass access controll, hoặc với dạng truy cập phải khai báo SQL connectring?
Với thư viện BeautifulSoup trong Python, bạn có thể truy cập và xử lý các dạng dữ liệu như HTML và XML. 
BeautifulSoup cung cấp các công cụ mạnh mẽ để phân tích cú pháp và trích xuất thông tin từ các trang web và tài liệu XML.

Đối với việc lấy các URL HTML5 có user, pass access control, bạn có thể sử dụng thư viện requests 
để gửi yêu cầu HTTP và nhận phản hồi từ server. Sau đó, bạn có thể sử dụng BeautifulSoup để phân tích cú pháp HTML 
và trích xuất thông tin cần thiết từ các trang web này. 
Điều này cho phép bạn truy cập vào các phần tử HTML, thuộc tính và nội dung của chúng.

Tuy nhiên, BeautifulSoup không được thiết kế để xử lý truy cập SQL connecting. 

Để truy cập và xử lý dữ liệu từ cơ sở dữ liệu SQL, bạn có thể sử dụng thư viện như pymysql, psycopg2, hoặc sqlite3, 
tùy thuộc vào loại cơ sở dữ liệu mà bạn đang sử dụng. 
Các thư viện này cung cấp chức năng để thiết lập kết nối với cơ sở dữ liệu SQL và thực thi các truy vấn SQL để truy xuất và xử lý dữ liệu.

Vì vậy, trong trường hợp truy cập và xử lý dữ liệu từ cơ sở dữ liệu SQL, 
bạn cần sử dụng thư viện phù hợp như pymysql, psycopg2, hoặc sqlite3.
 
BeautifulSoup sẽ chỉ giúp bạn phân tích cú pháp và truy cập vào dữ liệu HTML hoặc XML từ các trang web.
  • Business Analyst (BA) là một nghề tồn tại từ lâu trên toàn cầu, nhưng ở Việt Nam thì vẫn còn khá mới (xuất hiện khoảng hơn 27 năm).
  • Tôi thực sự đánh giá cao nghề này và trong quá trình làm việc, tôi đã gặp phải nhiều thách thức, từ đó tôi đã hiểu rõ những điểm mạnh và điểm yếu của bản thân. Tôi nhận thấy rằng trong lĩnh vực này có nhiều vấn đề phức tạp và khó khăn, nhưng khi chúng được giải quyết, thì cảm giác thật tuyệt vời.
  • BA xuất hiện với mục tiêu giải quyết vấn đề. Đó có thể là biến một điều không tốt thành điều tốt hơn, hoặc cải thiện những điều đã tốt để trở nên tốt hơn. Việc mang lại ý nghĩa cho người khác thực sự là một điều mà tôi khó lòng tranh cãi hay bỏ qua.
Clone this wiki locally