Dữ liệu cạo từ YouTube có thể là một thách thức do nội dung động và các biện pháp chống xào. Tuy nhiên, với các công cụ và kỹ thuật phù hợp, bạn có thể trích xuất một cách hiệu quả thông tin hữu ích. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn qua quá trình quét dữ liệu video YouTube bằng Python, Playwright và LXML.
Cài đặt các thư viện cần thiết bằng PIP:
pip install playwright
pip install lxml
Cài đặt các nhị phân trình duyệt trình viết kịch:
playwright install
Để cài đặt các nhị phân của trình duyệt Chromium, hãy sử dụng lệnh sau:
playwright install chromium
Đối với Web Scraping Dữ liệu YouTube với Python, bạn sẽ chủ yếu cần các thư viện sau:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
Khởi chạy một trình duyệt không đầu với nhà viết kịch, điều hướng đến URL video YouTube và chờ trang tải đầy đủ.
Cuộn trang để tải thêm ý kiến.
browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()
# Điều hướng đến URL video YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Cuộn xuống để tải thêm ý kiến
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Dành một chút thời gian để tải thêm nội dung
await page.wait_for_timeout(1000)
Trích xuất nội dung HTML của trang bằng nhà viết kịch và phân tích nó bằng LXML.
# Trích xuất nội dung trang
page_content = await page.content()
# Phân tích nội dung HTML
parser = html.fromstring(page_content)
Trích xuất các điểm dữ liệu cần thiết (ví dụ: tiêu đề, kênh, nhận xét) bằng cách sử dụng các biểu thức XPath.
Thu thập tất cả dữ liệu liên quan, bao gồm siêu dữ liệu video và bình luận.
# Trích xuất dữ liệu video
title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')
Lưu dữ liệu được trích xuất vào tệp CSV để phân tích và lưu trữ dễ dàng.
# Lưu dữ liệu vào tệp CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
Các proxy đóng một vai trò quan trọng trong việc cạo web, đặc biệt là khi xử lý trích xuất dữ liệu quy mô lớn hoặc các trang web với các biện pháp chống Bot nghiêm ngặt như YouTube. Đây là cách các proxy được thực hiện trong tập lệnh nhà viết kịch:
Thiết lập proxy:
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
Lợi ích của việc sử dụng proxy:
Việc triển khai này đảm bảo các hoạt động cạo của bạn ít có khả năng được phát hiện và chặn bởi các cơ chế chống Bot của YouTube.
Dưới đây là mã hoàn chỉnh để cạo dữ liệu video trên YouTube bằng Playwright và LXML, bao gồm cả triển khai proxy.
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
# Chức năng không đồng bộ để chạy nhà viết kịch và trích xuất dữ liệu
async def run(playwright: Playwright) -> None:
# Khởi chạy trình duyệt không đầu với cài đặt proxy
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
context = await browser.new_context()
page = await context.new_page()
# Điều hướng đến URL video YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")
# Cuộn xuống để tải thêm ý kiến
for _ in range(20):
await page.mouse.wheel(0, 200)
await asyncio.sleep(0.2)
# Dành một chút thời gian để tải thêm nội dung
await page.wait_for_timeout(1000)
# Trích xuất nội dung trang
page_content = await page.content()
# Đóng trình duyệt
await context.close()
await browser.close()
# Phân tích nội dung HTML
parser = html.fromstring(page_content)
# Trích xuất dữ liệu video
title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')
# Lưu dữ liệu vào tệp CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])
# Chạy chức năng không đồng bộ
async def main():
async with async_playwright() as playwright:
await run(playwright)
asyncio.run(main())
Khi thiết lập một môi trường để quét dữ liệu từ YouTube, điều quan trọng là phải tập trung vào việc sử dụng các proxy để phá vỡ các hạn chế nền tảng một cách hiệu quả. Chọn cẩn thận các máy chủ proxy là điều cần thiết để giảm thiểu rủi ro chặn và đảm bảo hoạt động ẩn danh. Các proxy ISP tĩnh rất được khuyến khích cho tốc độ kết nối nhanh và độ ổn định của chúng. Ngoài ra, các proxy dân cư cung cấp các địa chỉ IP động với yếu tố tin cậy cao, khiến chúng ít bị gắn cờ bởi các hệ thống bảo mật YouTube. Điều quan trọng là phải tuân thủ các tiêu chuẩn đạo đức trong quá trình thu thập dữ liệu để ngăn chặn vi phạm các điều khoản dịch vụ của YouTube.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0