Cách cạo dữ liệu tài chính Google với Python

Bình luận: 0

Các nhà đầu tư và nhà phân tích ngày nay đang sử dụng thông tin tài chính của Google vì nó hiện tại và chính xác. Google Finance dường như là nơi được ưa thích nhất trong việc có dữ liệu tài chính hiện tại của tất cả các loại, đặc biệt là đối với các cổ phiếu cùng với các chỉ số và xu hướng thị trường vì nó cung cấp thêm chi tiết về các công ty về số liệu tài chính. Python là ngôn ngữ tốt nhất để quét web. Bài đăng này sẽ giúp bạn tìm hiểu cách thu thập dữ liệu từ Google Finance để bạn có thể có tất cả các công cụ phân tích tài chính cần thiết.

Cài đặt các thư viện cần thiết

Trước khi bạn bắt đầu, hãy chắc chắn rằng bạn đã cài đặt Python trên hệ thống của mình. Bạn cũng sẽ cần các thư viện: Yêu cầu thực hiện các yêu cầu HTTP và LXML để phân tích nội dung HTML của các trang web. Để cài đặt các thư viện cần thiết, hãy sử dụng các lệnh sau trên dòng lệnh:

pip install requests
pip install lxml

Tiếp theo, chúng tôi sẽ khám phá quá trình trích xuất dữ liệu từng bước từ Google Finance:

Bước 1: Hiểu cấu trúc HTML

Để xóa dữ liệu từ Google Finance, chúng tôi cần xác định các yếu tố HTML cụ thể có chứa thông tin mà chúng tôi quan tâm:

  • Tiêu đề: Nằm tại //div[@class="zzDege"]/text()
  • Giá: Tìm thấy tại //div[@class="YMlKec fxKbKc"]/text()
  • Ngày: Nằm tại //div[@class="ygUjEc"]/text()

Các biểu thức XPath này sẽ đóng vai trò là hướng dẫn của chúng tôi để điều hướng và trích xuất dữ liệu liên quan từ cấu trúc HTML của các trang tài chính Google.

Tiêu đề:

1.png

Giá:

2.png

Ngày:

3.png

Bước 2: Thiết lập chức năng cạp

Khi thiết lập một cạp, điều quan trọng là phải tập trung vào một số khía cạnh quan trọng để đảm bảo thu thập dữ liệu hiệu quả và an toàn.

Thực hiện yêu cầu HTTP

Để tìm nạp nội dung HTML từ trang web của Google Finance, chúng tôi sẽ sử dụng thư viện yêu cầu. Bước này bắt đầu quá trình bằng cách tải trang web mà chúng tôi dự định trích xuất dữ liệu.

Tầm quan trọng của việc sử dụng các tiêu đề chính xác trong việc cạo

Điều thực sự quan trọng là sử dụng các tiêu đề phù hợp khi quét web, đáng chú ý nhất là tiêu đề tác nhân người dùng. Việc sử dụng các tiêu đề là rất cần thiết trong việc mô phỏng một yêu cầu trình duyệt chính hãng sẽ ngăn trang web xác định và dừng tập lệnh tự động của bạn. Họ đảm bảo rằng máy chủ phản hồi chính xác bằng cách cung cấp thông tin liên quan về yêu cầu. Không có tiêu đề thích hợp, yêu cầu có thể bị từ chối hoặc máy chủ có thể trả về nội dung hoàn toàn khác nhau hoặc cung cấp nội dung theo các phần có thể hạn chế hoạt động cạo web. Do đó, việc thiết lập các tiêu đề một cách thích hợp giúp duy trì quyền truy cập vào trang web và đảm bảo cạp lấy dữ liệu chính xác.

import requests

# Xác định các tiêu đề để bắt chước truy cập trình duyệt và tránh bị máy chủ chặn
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',  # Không theo dõi tiêu đề yêu cầu
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}

# Xác định URL của trang Google Finance cho BNP Paribas (Ticker BNP) trên Sàn giao dịch Euronext Paris (EPA)
url = "https://www.google.com/finance/quote/BNP:EPA?hl=en"

# Làm cho HTTP nhận được yêu cầu đến URL với các tiêu đề được chỉ định
response = requests.get(url, headers=headers)

Tầm quan trọng của việc sử dụng proxy

Khi lấy Google Finance hoặc bất kỳ trang web nào ở quy mô, điều quan trọng là sử dụng proxy. Đây là lý do tại sao:

  • Tránh Bans IP: Các trang web như Google Finance thường chặn hoặc hạn chế quyền truy cập từ các địa chỉ IP thực hiện quá nhiều yêu cầu trong một thời gian ngắn. Proxy giúp phân phối các yêu cầu trên nhiều địa chỉ IP, giảm khả năng phát hiện và cấm.
  • Quyền riêng tư nâng cao: Sử dụng proxy thêm một lớp ẩn danh, bảo vệ danh tính và ý định của bạn trong khi cạo dữ liệu.
# Xác định cài đặt proxy
proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'https://your_proxy_address:port',
}

# Làm cho HTTP nhận được yêu cầu đến URL với các tiêu đề và proxy được chỉ định
response = requests.get(url, headers=headers, proxies=proxies)

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

Khi chúng tôi đã tìm được nội dung HTML, chúng tôi cần phân tích nó bằng thư viện LXML. Điều này sẽ cho phép chúng tôi điều hướng qua cấu trúc HTML và trích xuất dữ liệu chúng tôi cần:

Hàm fromString từ lxml.html được nhập vào nội dung parse html vào một đối tượng phần tử. Phương thức FromString Phản hồi phân tích cú pháp.TEXT, HTML thô từ trang web được tìm nạp trước đó và trả về một đối tượng phần tử được lưu trữ trong biến phân tích cú pháp, đại diện cho gốc của cây HTML được phân tích cú pháp.

from lxml.html import fromstring

# Phân tích nội dung HTML của phản hồi bằng phương pháp FromString của LXML
parser = fromstring(response.text)

Trích xuất dữ liệu bằng XPath

Bây giờ, hãy trích xuất dữ liệu cụ thể bằng cách sử dụng các biểu thức XPath từ cây HTML được phân tích cú pháp:

Tiêu đề lấy tiêu đề của công cụ tài chính từ HTML được phân tích cú pháp. Giá lấy lại giá cổ phiếu hiện tại. Ngày lấy lại ngày. Từ điển tài chính_DATA chứa tiêu đề, giá và ngày được trích xuất. Từ điển này được thêm vào một danh sách.

# Liệt kê để lưu trữ dữ liệu đầu ra
finance_data_list = []

# Trích xuất tiêu đề của công cụ tài chính
title = parser.xpath('//div[@class="zzDege"]/text()')[0]

# Trích xuất giá hiện tại của cổ phiếu
price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]

# Trích xuất ngày
date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]

# Tạo một từ điển để lưu trữ dữ liệu được trích xuất
finance_data = {
    'title': title,
    'price': price,
    'date': date
}
# nối thêm dữ liệu vào tài chính_data_list
finance_data_list.append(finance_data)

Xử lý dữ liệu và lưu trữ

Để xử lý dữ liệu bị xóa, bạn có thể muốn xử lý thêm hoặc lưu trữ nó theo định dạng có cấu trúc như JSON:

Biến đầu ra_file chỉ định tên của tệp JSON nơi dữ liệu sẽ được lưu (Finance_data.json). Mở (output_file, 'w') mở tệp ở chế độ ghi và json.dump (tài chính_data_list, f, thụt lề = 4) ghi tài chính_data_list vào tệp với thụt 4 không gian để đọc.

# Lưu tài chính_data_list vào tệp JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
    json.dump(finance_data_list, f, indent=4)

Xử lý các ngoại lệ yêu cầu

Mặc dù lấy dữ liệu từ các trang web, điều quan trọng là phải xử lý các ngoại lệ yêu cầu để đảm bảo độ tin cậy và mạnh mẽ của tập lệnh cạo của bạn. Các yêu cầu này có thể thất bại vì nhiều lý do như các vấn đề về mạng, lỗi máy chủ hoặc thời gian chờ. Thư viện yêu cầu trong Python cung cấp một cách để xử lý hiệu quả các loại ngoại lệ này như được hiển thị bên dưới:

try:
    # Gửi yêu cầu nhận đến URL
    response = requests.get(url)

    # Tăng HTTPERROR cho các phản hồi xấu (mã trạng thái 4xx hoặc 5xx)
    response.raise_for_status()

except requests.exceptions.HTTPError as e:
    # Xử lý các lỗi HTTP (như 404, 500, v.v.)
    print(f"HTTP error occurred: {e}")

except requests.exceptions.RequestException as e:
    # Xử lý bất kỳ trường hợp ngoại lệ nào khác có thể xảy ra trong khi yêu cầu
    print(f"An error occurred: {e}")

Khối thử kết thúc mã có thể tăng ngoại lệ. Các yêu cầu.get (URL) gửi yêu cầu nhận. Phản hồi.raise_for_status () kiểm tra mã trạng thái phản hồi và tăng httperror cho các mã không thành công. Các yêu cầu ngoại trừ Các yêu cầu ngoại trừ

Hoàn thành Mã

Bây giờ, chúng ta hãy tích hợp mọi thứ để tạo chức năng cào của chúng ta tìm kiếm, phân tích cú pháp và trích xuất dữ liệu từ nhiều URL của Google Finance:

import requests
from lxml.html import fromstring
import json
import urllib3
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Danh sách các URL để cạo
urls = [
    "https://www.google.com/finance/quote/BNP:EPA?hl=en",
    "https://www.google.com/finance/quote/SPY:NYSEARCA?hl=en",
    "https://www.google.com/finance/quote/SENSEX:INDEXBOM?hl=en"
]

# Xác định các tiêu đề để bắt chước một lượt truy cập trình duyệt
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'accept-language': 'en-IN,en;q=0.9',
    'cache-control': 'no-cache',
    'dnt': '1',
    'pragma': 'no-cache',
    'priority': 'u=0, i',
    'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
    'sec-ch-ua-arch': '"x86"',
    'sec-ch-ua-bitness': '"64"',
    'sec-ch-ua-full-version-list': '"Not/A)Brand";v="8.0.0.0", "Chromium";v="126.0.6478.114", "Google Chrome";v="126.0.6478.114"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-model': '""',
    'sec-ch-ua-platform': '"Linux"',
    'sec-ch-ua-platform-version': '"6.5.0"',
    'sec-ch-ua-wow64': '?0',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
}

# Xác định điểm cuối proxy
proxies = {
    'http': 'http://your_proxy_address:port',
    'https': 'https://your_proxy_address:port',
}

# Liệt kê để lưu trữ dữ liệu cào
finance_data_list = []

# Lặp lại thông qua từng URL và dữ liệu Scrape
for url in urls:
    try:
        # Gửi yêu cầu nhận đến URL
        response = requests.get(url, headers=headers, proxies=proxies, verify=False)
        
        # Tăng HTTPERROR cho các phản hồi xấu (mã trạng thái 4xx hoặc 5xx)
        response.raise_for_status()
        
        # Phân tích nội dung HTML của phản hồi bằng phương pháp FromString của LXML
        parser = fromstring(response.text)
        
        # Trích xuất tiêu đề, giá cả và ngày
        title = parser.xpath('//div[@class="zzDege"]/text()')[0]
        price = parser.xpath('//div[@class="YMlKec fxKbKc"]/text()')[0]
        date = parser.xpath('//div[@class="ygUjEc"]/text()')[0]
        
        # Lưu trữ dữ liệu được trích xuất trong một từ điển
        finance_data = {
            'title': title,
            'price': price,
            'date': date
        }
        
        # Nối dây từ điển noto danh sách
        finance_data_list.append(finance_data)
    
    except requests.exceptions.HTTPError as e:
        # Xử lý các lỗi HTTP (như 404, 500, v.v.)
        print(f"HTTP error occurred for URL {url}: {e}")
    except requests.exceptions.RequestException as e:
        # Xử lý bất kỳ trường hợp ngoại lệ nào khác có thể xảy ra trong khi yêu cầu
        print(f"An error occurred for URL {url}: {e}")

# Lưu tài chính_data_list vào tệp JSON
output_file = 'finance_data.json'
with open(output_file, 'w') as f:
    json.dump(finance_data_list, f, indent=4)

print(f"Scraped data saved to {output_file}")

Đầu ra:

4.png

Hướng dẫn này cung cấp một hướng dẫn toàn diện về dữ liệu cạo từ Google Finance bằng Python, bên cạnh các thư viện mạnh mẽ như `lxml` và` request`. Nó đặt nền tảng để tạo ra các công cụ tinh vi để lấy dữ liệu tài chính, có thể được sử dụng để thực hiện phân tích thị trường chuyên sâu, giám sát các hoạt động của đối thủ cạnh tranh hoặc hỗ trợ các quyết định đầu tư sáng suốt.

Bình luận:

0 Bình luận