Bắt tay vào cuộc hành trình mạo hiểm thu thập dữ liệu trên web có thể vừa ly kỳ vừa đầy thử thách, khi một người điều hướng các con hẻm mê cung trên Internet để tìm kiếm dữ liệu có giá trị. Trong vũ trụ kỹ thuật số rộng lớn, nghệ thuật thu thập dữ liệu web đã nổi lên như một kỹ năng quan trọng, cho phép chúng ta khai thác thông tin một cách hiệu quả, phát triển thông tin chi tiết và hiểu được mạng lưới toàn cầu ngày càng mở rộng.
Trong bài viết thú vị này, chúng ta sẽ tìm hiểu địa hình phức tạp của việc thu thập dữ liệu web, khám phá sự khác biệt giữa thu thập dữ liệu web và thu thập dữ liệu web trong khi khám phá một loạt chiến lược và công nghệ sẽ nâng cao khả năng thu thập dữ liệu web của bạn.
Từ lĩnh vực năng động của các trang web JavaScript đến tính đơn giản mạnh mẽ của Python, chúng tôi sẽ hướng dẫn bạn vô số mẹo và kỹ thuật để đảm bảo quá trình thu thập dữ liệu web của bạn diễn ra suôn sẻ, hiệu quả và không bị cản trở.
Mục lục
Vì vậy, hãy thắt dây an toàn và chuẩn bị bắt tay vào một chuyến hành trình thú vị vào thế giới hấp dẫn của việc thu thập dữ liệu trên web!
Thu thập dữ liệu web so với Quét web
Mặc dù việc quét web và thu thập dữ liệu web thường được cho là giống nhau và cả hai đều được sử dụng để khai thác dữ liệu nhưng chúng có những điểm khác biệt chính. Chúng tôi sẽ khám phá những khác biệt này và giúp bạn xác định phương pháp nào phù hợp nhất với nhu cầu và mục tiêu kinh doanh của bạn.
Sự khác biệt chính
Nói một cách đơn giản, thu thập thông tin trên web là công việc mà công cụ tìm kiếm thực hiện: chúng điều hướng trên web, tìm kiếm mọi thông tin có sẵn và đi theo mọi liên kết có thể truy cập được. Quá trình chung này nhằm mục đích thu thập càng nhiều thông tin càng tốt (hoặc thậm chí tất cả) từ một trang web cụ thể. Về cơ bản, đây là những gì Google làm – nó xem toàn bộ trang web và lập chỉ mục tất cả dữ liệu có sẵn.
Mặt khác, tính năng quét web được sử dụng khi bạn muốn tải xuống thông tin đã thu thập. Quét web (còn được gọi là trích xuất dữ liệu web) là một quá trình tập trung hơn. Bằng cách tùy chỉnh các lệnh và sử dụng proxy quét, bạn có thể trích xuất dữ liệu cụ thể từ trang web mục tiêu của mình. Sau đó, bạn có thể tải xuống kết quả ở định dạng phù hợp, chẳng hạn như JSON hoặc Excel.
Trong một số trường hợp, cả thu thập dữ liệu web và thu thập dữ liệu web có thể được sử dụng để đạt được một mục tiêu duy nhất, về cơ bản hoạt động như bước một và hai trong quy trình của bạn. Bằng cách kết hợp cả hai, bạn có thể thu thập lượng lớn thông tin từ các trang web lớn bằng trình thu thập thông tin, sau đó trích xuất và tải xuống dữ liệu cụ thể mà bạn cần bằng trình thu thập thông tin.
4 chiến lược thu thập dữ liệu web
Nói chung, trình thu thập dữ liệu web chỉ truy cập một phần trang web dựa trên ngân sách trình thu thập thông tin của chúng, điều này có thể được xác định bởi các yếu tố như số trang tối đa trên mỗi tên miền, độ sâu hoặc thời lượng.
Nhiều trang web cung cấp tệp robots.txt chỉ định phần nào của trang web có thể được thu thập thông tin và phần nào không được phép thu thập thông tin. Ngoài ra, còn có sitemap.xml, chi tiết hơn robots.txt, hướng dẫn bot về đường dẫn thu thập dữ liệu và cung cấp siêu dữ liệu bổ sung cho mỗi URL.
Các cách sử dụng phổ biến của trình thu thập dữ liệu web bao gồm:
- Các công cụ tìm kiếm như Googlebot, Bingbot và Yandex Bot thu thập HTML từ một phần quan trọng của web, lập chỉ mục dữ liệu để giúp dễ dàng tìm kiếm.
- Các công cụ phân tích SEO không chỉ thu thập HTML mà còn cả siêu dữ liệu, chẳng hạn như thời gian phản hồi và trạng thái phản hồi, để xác định các trang bị hỏng và theo dõi liên kết giữa các tên miền để phân tích backlink.
- Các công cụ giám sát giá thu thập dữ liệu các trang web thương mại điện tử để định vị các trang sản phẩm và trích xuất siêu dữ liệu, đặc biệt là giá cả. Các trang sản phẩm này sau đó được xem lại định kỳ.
- Thu thập thông tin chung duy trì một kho lưu trữ công khai dữ liệu thu thập dữ liệu web, giống như Lưu trữ tháng 5 năm 2022 chứa 3,45 tỷ trang web.
Cách thu thập dữ liệu trang web JavaScript
Việc thu thập dữ liệu các trang web JavaScript có thể khó khăn hơn việc thu thập dữ liệu các trang HTML tĩnh vì nội dung thường được tải và thao tác bằng mã JavaScript. Để thu thập dữ liệu các trang web như vậy, bạn cần sử dụng trình duyệt không có giao diện người dùng có thể thực thi JavaScript và hiển thị nội dung của trang. Một lựa chọn phổ biến cho nhiệm vụ này là sự kết hợp giữa thư viện Puppeteer và môi trường thời gian chạy Node.js.
Dưới đây là hướng dẫn từng bước để thu thập dữ liệu các trang web JavaScript bằng Puppeteer và Node.js:
1. Cài đặt Node.js
Tải xuống và cài đặt phiên bản mới nhất của Node.js từ trang web chính thức (https://nodejs.org/).
2. Tạo thư mục dự án mới
Tạo một thư mục mới cho dự án của bạn và điều hướng đến nó bằng dòng lệnh.
mkdir js-crawler
cd js-crawler
3. Khởi tạo dự án Node.js mới
Chạy lệnh sau trong thư mục dự án của bạn để tạo mới package.json
tập tin với các cài đặt mặc định.
npm init -y
4. Cài đặt Puppeteer
Cài đặt Puppeteer bằng cách chạy lệnh sau trong thư mục dự án của bạn
npm install puppeteer
5. Tạo một tệp JavaScript mới
Tạo một tập tin mới có tên
crawler.js
trong thư mục dự án của bạn, thư mục này sẽ chứa mã để thu thập dữ liệu trang web JavaScript.
6. Viết mã trình thu thập thông tin
Mở
crawler.js
và thêm đoạn mã sau:
const puppeteer = require('puppeteer');
async function crawlJavaScriptWebsite(url) {
Khởi chạy một phiên bản trình duyệt mới
const browser = await puppeteer.launch({ headless: true });
Tạo một trang mới trong trình duyệt
const page = await browser.newPage();
Điều hướng đến URL mục tiêu
await page.goto(url, { waitUntil: 'networkidle2' })
Trích xuất dữ liệu từ trang bằng cách sử dụng
evaluate()
const data = await page.evaluate(() => {
Viết mã JavaScript tùy chỉnh của bạn vào đây để trích xuất dữ liệu bạn cần. Ví dụ: hãy trích xuất tất cả các tiêu đề (phần tử h1) từ trang.
const headings = Array.from(document.querySelectorAll('h1')).map(heading => heading.textContent);
return {
headings,
};
});
Đóng trình duyệt
await browser.close();
Trả về dữ liệu đã trích xuất
return data;
}
Ví dụ sử dụng:
crawlJavaScriptWebsite('https://example.com/')
.then(data => console.log(data))
.catch(err => console.error(err));
Thay thế cái
https://example.com/
URL với URL trang web mục tiêu và tùy chỉnh
page.evaluate()
chức năng trích xuất dữ liệu bạn cần.
7. Chạy trình thu thập thông tin
Thực hiện lệnh sau trong thư mục dự án của bạn để chạy trình thu thập thông tin:
node crawler.js
Tập lệnh sẽ khởi chạy một trình duyệt không có giao diện người dùng, điều hướng đến URL mục tiêu và thực thi mã JavaScript được chỉ định trong
page.evaluate()
chức năng. Dữ liệu được trích xuất sẽ được ghi vào bảng điều khiển.
Hãy nhớ rằng đây là ví dụ cơ bản về thu thập dữ liệu trang web JavaScript. Đối với các trường hợp sử dụng nâng cao hơn, bạn có thể cần phải tương tác với trang, xử lý các yêu cầu AJAX, cuộn trang hoặc xử lý CAPTCHA và cookie.
Cách thu thập dữ liệu web bằng Python
Thu thập dữ liệu một trang web bằng Python bao gồm tìm nạp các trang web, phân tích nội dung của chúng và theo các liên kết đến các trang khác. Trong hướng dẫn này, chúng tôi sẽ sử dụng hai thư viện Python phổ biến: Yêu cầu và Súp đẹp. Hướng dẫn này giả sử bạn đã cài đặt Python và hiểu biết cơ bản về lập trình Python.
Bước 1: Cài đặt các thư viện cần thiết
Cài đặt thư viện Yêu cầu và Súp đẹp bằng pip:
pip install requests beautifulsoup4
Bước 2: Nhập thư viện
Nhập các thư viện cần thiết trong tập lệnh Python của bạn:
import requests
from bs4 import BeautifulSoup
Bước 3: Tạo hàm lấy nội dung trang web
Tạo một hàm để tìm nạp nội dung trang web bằng thư viện Yêu cầu:
def fetch_page(url):
response = requests.get(url)
if response.status_code == 200:
return response.text
else:
print(f"Failed to fetch {url} (status code {response.status_code})")
return None
Bước 4: Tạo hàm phân tích nội dung trang web
Tạo hàm phân tích nội dung trang web bằng thư viện Beautiful Soup:
def parse_page(html):
soup = BeautifulSoup(html, "html.parser")
return soup
Bước 5: Tạo hàm trích xuất liên kết từ nội dung được phân tích cú pháp
Tạo một hàm để trích xuất tất cả các liên kết từ nội dung trang web được phân tích cú pháp:
def extract_links(soup, base_url):
links = []
for a_tag in soup.find_all("a"):
href = a_tag.get("href")
if href and not href.startswith("#"):
if not href.startswith("http"):
href = base_url + href
links.append(href)
return links
Bước 6: Tạo chức năng crawl website
Tạo một hàm để thu thập dữ liệu trang web theo cách đệ quy:
def crawl_website(url, max_depth=2, depth=0):
if depth > max_depth:
return
html = fetch_page(url)
if not html:
return
soup = parse_page(html)
links = extract_links(soup, url)
print(f"{' ' * depth}[{depth}] {url}")
for link in links:
crawl_website(link, max_depth, depth + 1)
Bước 7: Chạy trình thu thập thông tin
Thực thi trình thu thập thông tin bằng cách gọi
crawl_website
hoạt động với URL mong muốn và độ sâu tối đa:
if __name__ == "__main__":
start_url = "https://example.com/"
max_depth = 2
crawl_website(start_url, max_depth)
Hướng dẫn từng bước này cho biết cách thu thập dữ liệu trang web bằng Python. Bạn có thể tùy chỉnh
crawl_website
để xử lý các cấu trúc trang web cụ thể, thêm logic để lưu trữ thông tin được trích xuất hoặc triển khai các tính năng thu thập thông tin nâng cao hơn như xử lý robots.txt, giới hạn tốc độ hoặc yêu cầu song song hóa.
12 mẹo về cách thu thập dữ liệu trang web mà không bị chặn
Đây là những chiến lược chính để thu thập dữ liệu web mà không gặp phải các khối:
#1: Xác minh Giao thức loại trừ robot
Trước khi thu thập dữ liệu hoặc quét một trang web, hãy đảm bảo rằng mục tiêu của bạn cho phép thu thập dữ liệu từ trang của họ. Kiểm tra tệp giao thức loại trừ robot (robots.txt) của trang web và tuân thủ các quy định của trang web.
Ngay cả khi trang web cho phép thu thập dữ liệu, hãy tôn trọng và không làm hỏng trang web. Tuân thủ các quy định được chỉ định trong giao thức loại trừ robot, thu thập dữ liệu trong giờ thấp điểm, hạn chế các yêu cầu bắt nguồn từ một địa chỉ IP duy nhất và thiết lập độ trễ giữa các yêu cầu.
Tuy nhiên, ngay cả khi trang web cho phép quét web, bạn vẫn có thể gặp phải các khối, do đó, điều cần thiết là phải làm theo các bước bổ sung. Để có hướng dẫn toàn diện hơn, hãy xem hướng dẫn Python quét web của chúng tôi.
#2: Sử dụng máy chủ proxy
Việc thu thập thông tin trên web sẽ gần như không thể nếu không có proxy. Chọn nhà cung cấp dịch vụ proxy có uy tín và chọn giữa trung tâm dữ liệu và proxy IP dân cư dựa trên nhiệm vụ của bạn.
Việc sử dụng một trung gian giữa thiết bị của bạn và trang web mục tiêu sẽ giảm việc chặn địa chỉ IP, đảm bảo tính ẩn danh và cho phép bạn truy cập các trang web có thể không khả dụng ở khu vực của bạn. Ví dụ: nếu bạn sống ở Đức, bạn có thể cần sử dụng proxy của Hoa Kỳ để truy cập nội dung web ở Hoa Kỳ.
Để có kết quả tối ưu, hãy chọn nhà cung cấp proxy có nhóm IP lớn và nhiều vị trí.
#3: Xoay địa chỉ IP
Khi sử dụng nhóm proxy, điều quan trọng là phải xoay địa chỉ IP của bạn.
Nếu bạn gửi quá nhiều yêu cầu từ cùng một địa chỉ IP, trang web mục tiêu sẽ sớm nhận ra bạn là mối đe dọa và chặn địa chỉ IP của bạn. Xoay vòng proxy cho phép bạn xuất hiện như thể bạn là một số người dùng Internet khác nhau và giảm khả năng bị chặn.
Tất cả các proxy dân dụng của Oxylabs đều xoay vòng IP, nhưng nếu đang sử dụng Proxy trung tâm dữ liệu thì bạn nên sử dụng dịch vụ xoay vòng proxy. Chúng tôi cũng luân chuyển proxy IPv6 và IPv4. Nếu bạn quan tâm đến sự khác biệt giữa IPv4 và IPv6, hãy đọc bài viết của đồng nghiệp Iveta của tôi.
#4: Sử dụng tác nhân người dùng thực
Hầu hết các máy chủ lưu trữ trang web đều có thể kiểm tra tiêu đề của yêu cầu HTTP mà các bot thu thập dữ liệu tạo ra. Tiêu đề yêu cầu HTTP này, được gọi là tác nhân người dùng, chứa nhiều thông tin khác nhau, từ hệ điều hành và phần mềm đến loại ứng dụng và phiên bản của nó.
Máy chủ có thể dễ dàng phát hiện các tác nhân người dùng đáng ngờ. Tác nhân người dùng thực chứa các cấu hình yêu cầu HTTP phổ biến do khách truy cập tự nhiên gửi. Để tránh bị chặn, hãy đảm bảo tùy chỉnh tác nhân người dùng của bạn cho giống với tác nhân tự nhiên.
Vì mỗi yêu cầu do trình duyệt web đưa ra đều chứa một tác nhân người dùng nên bạn nên thường xuyên chuyển đổi tác nhân người dùng.
Điều quan trọng nữa là sử dụng các tác nhân người dùng cập nhật và phổ biến nhất. Nếu bạn đang thực hiện yêu cầu với tác nhân người dùng 5 năm tuổi từ phiên bản Firefox không được hỗ trợ, điều đó sẽ gây ra rất nhiều dấu hiệu đỏ. Bạn có thể tìm thấy cơ sở dữ liệu công khai trên internet cho bạn biết tác nhân người dùng nào hiện đang phổ biến nhất. Chúng tôi cũng có cơ sở dữ liệu được cập nhật thường xuyên của riêng mình, vì vậy hãy liên hệ với chúng tôi nếu bạn cần quyền truy cập vào cơ sở dữ liệu đó.
#5: Đặt vân tay của bạn chính xác
Cơ chế chống quét ngày càng trở nên tinh vi hơn và một số trang web sử dụng Giao thức điều khiển truyền dẫn (TCP) hoặc dấu vân tay IP để phát hiện bot.
Khi quét web, TCP để lại nhiều tham số khác nhau. Các tham số này được thiết lập bởi hệ điều hành hoặc thiết bị của người dùng cuối. Nếu bạn đang thắc mắc làm cách nào để tránh bị đưa vào danh sách cấm trong khi thu thập dữ liệu, hãy đảm bảo rằng các thông số của bạn nhất quán. Ngoài ra, bạn có thể sử dụng Web Unblocker – một giải pháp proxy được hỗ trợ bởi AI với chức năng lấy dấu vân tay động. Web Unblocker kết hợp nhiều biến dấu vân tay theo cách mà ngay cả khi nó xác định được một dấu vân tay hoạt động tốt nhất, dấu vân tay dường như vẫn ngẫu nhiên và có thể vượt qua quá trình kiểm tra chống bot.
#6: Cẩn trọng trước bẫy Honeypot
Hãy thận trọng với bẫy honeypot là các liên kết trong mã HTML có thể bị người quét web phát hiện nhưng người dùng tự nhiên không thể nhìn thấy được. Những cái bẫy này được sử dụng để xác định và chặn trình thu thập thông tin web vì chỉ có robot mới theo dõi các liên kết này. Mặc dù việc thiết lập honeypot đòi hỏi nhiều công sức nhưng một số mục tiêu có thể sử dụng chúng để phát hiện trình thu thập thông tin web, vì vậy hãy cảnh giác nếu yêu cầu của bạn bị chặn và phát hiện thấy trình thu thập thông tin.
#7: Sử dụng Dịch vụ giải CAPTCHA
CAPTCHA đặt ra thách thức lớn đối với việc thu thập dữ liệu trên web vì chúng yêu cầu khách truy cập giải các câu đố để xác nhận rằng họ là con người. Những câu đố này thường bao gồm những hình ảnh mà máy tính khó giải mã được. Để vượt qua CAPTCHA, hãy sử dụng các dịch vụ giải CAPTCHA chuyên dụng hoặc các công cụ thu thập thông tin sẵn sàng sử dụng, chẳng hạn như công cụ thu thập dữ liệu của Oxylabs, giải quyết CAPTCHA và mang lại kết quả sẵn sàng sử dụng. Hành vi đáng ngờ có thể khiến mục tiêu yêu cầu giải CAPTCHA.
#8: Thay đổi kiểu thu thập thông tin
Để tránh bị chặn, hãy sửa đổi mẫu điều hướng của trình thu thập thông tin của bạn để làm cho nó có vẻ khó dự đoán hơn. Bạn có thể thêm các nhấp chuột, cuộn và di chuyển chuột ngẫu nhiên để bắt chước hành vi duyệt web của người dùng thông thường. Để biết các phương pháp hay nhất, hãy nghĩ về cách một người dùng thông thường sẽ duyệt trang web và áp dụng những nguyên tắc đó vào công cụ. Ví dụ: truy cập trang chủ trước khi yêu cầu các trang bên trong là một mô hình logic.
#9: Giảm tốc độ cạp
Để giảm nguy cơ bị chặn, hãy làm chậm tốc độ quét bằng cách thêm các ngắt ngẫu nhiên giữa các yêu cầu hoặc bắt đầu lệnh chờ trước khi thực hiện một hành động. Nếu URL bị giới hạn tốc độ, hãy tôn trọng các giới hạn của trang web và giảm tốc độ thu thập dữ liệu để tránh các yêu cầu điều chỉnh.
#10: Thu thập thông tin trong giờ thấp điểm
Trình thu thập thông tin di chuyển nhanh hơn người dùng thông thường và có thể tác động đáng kể đến tải máy chủ. Thu thập dữ liệu trong thời gian tải cao có thể ảnh hưởng tiêu cực đến trải nghiệm người dùng do dịch vụ bị chậm. Để tránh điều này, hãy thu thập dữ liệu trong những giờ thấp điểm, chẳng hạn như ngay sau nửa đêm (được bản địa hóa cho dịch vụ), để giảm tải cho máy chủ.
#11: Tránh cạo hình ảnh
Việc cạo hình ảnh có thể gặp rủi ro vì chúng thường là những đối tượng chứa nhiều dữ liệu và có thể được bảo vệ bản quyền. Ngoài ra, hình ảnh thường bị ẩn trong các phần tử JavaScript, điều này có thể làm tăng độ phức tạp của quá trình quét và làm chậm trình quét web. Để trích xuất hình ảnh từ các phần tử JS, cần phải sử dụng quy trình quét phức tạp hơn.
#12: Sử dụng trình duyệt không đầu
Trình duyệt không đầu là một công cụ hoạt động giống như một trình duyệt thông thường nhưng không có giao diện người dùng đồ họa. Nó cho phép thu thập nội dung được tải bằng cách hiển thị các phần tử JavaScript. Các trình duyệt được sử dụng rộng rãi nhất, Chrome và Firefox, có các chế độ không có giao diện người dùng có thể được sử dụng để quét web mà không cần kích hoạt các khối.
Hướng dẫn bằng video về cách thu thập thông tin trang web
Trong hướng dẫn Oxylabs này, bạn sẽ tìm thấy những kiến thức cơ bản về thu thập dữ liệu trên web và tầm quan trọng của nó đối với việc thu thập dữ liệu trong khi thảo luận về các khía cạnh đạo đức và pháp lý. Nó hiển thị các công cụ phổ biến như Scrapy, Beautiful Soup và Selenium, đồng thời giúp bạn chọn công cụ tốt nhất cho nhu cầu của mình.
Hướng dẫn này giúp bạn hiểu cấu trúc của trang web, tạo trình thu thập dữ liệu web đơn giản và trích xuất thông tin bạn cần. Nó cũng nhắc nhở bạn tuân theo các quy tắc quét web tốt, chẳng hạn như tôn trọng các quy tắc của robots.txt và không làm máy chủ quá tải.
Video cũng giúp bạn xử lý các thách thức như lấy dữ liệu từ các trang động, xử lý nhiều trang và tránh bị chặn. Nó cho thấy cách lưu và sắp xếp dữ liệu của bạn cũng như đưa ra các mẹo để làm cho dự án thu thập dữ liệu web của bạn lớn hơn và hiệu quả hơn. Cuối cùng, nó nhắc nhở bạn luôn tuân theo các nguyên tắc đạo đức và pháp lý.
Khi chúng ta kết thúc hành trình khám phá thú vị về thế giới thu thập thông tin trên web, chúng ta thấy rõ rằng việc nắm vững nghệ thuật này cũng giống như việc sở hữu một bản đồ kho báu trong bối cảnh rộng lớn và luôn thay đổi của Internet. Chúng tôi đã đi sâu vào những điểm phức tạp giúp phân biệt thu thập dữ liệu web với thu thập dữ liệu web, khám phá các chiến lược đa dạng và khám phá các lĩnh vực động của trang web JavaScript và thu thập dữ liệu web do Python cung cấp.
Kho tàng mẹo và lời khuyên của chúng tôi đảm bảo rằng nỗ lực thu thập dữ liệu trên web của bạn vẫn có trách nhiệm và đạo đức, tránh những cạm bẫy và trở ngại có thể phát sinh trong quá trình thực hiện. Vì vậy, khi bạn khởi hành vào đại dương kỹ thuật số vô biên, được trang bị kiến thức và trí tuệ thu thập được từ bài viết toàn diện này, hãy nhớ rằng khả năng khai thác sức mạnh của việc thu thập thông tin trên web sẽ nâng bạn lên trên đối thủ cạnh tranh và mở khóa những viên ngọc ẩn sâu trong lòng đại dương kỹ thuật số. thế giới kỹ thuật số.