Cách thu thập dữ liệu từ một website: Hướng dẫn từng bước với Python, JavaScript và 12 mẹo giúp bạn thu thập dữ liệu mà không bị chặn trong năm 2023

Bắt đầu hành trình đầy phiêu lưu trong lĩnh vực thu thập dữ liệu web có thể vừa thú vị vừa đầy thử thách, khi ta len lỏi qua những ngõ ngách phức tạp của internet để tìm kiếm dữ liệu giá trị. Trong vũ trụ kỹ thuật số rộng lớn, nghệ thuật thu thập dữ liệu web đã trở thành một kỹ năng then chốt, giúp chúng ta khai thác thông tin hiệu quả, phát triển những hiểu biết sâu sắc và nắm bắt thế giới web rộng lớn không ngừng mở rộng.

Trong bài viết bổ ích này, chúng ta sẽ khám phá địa hình phức tạp của việc thu thập dữ liệu web, tìm hiểu sự khác biệt giữa thu thập dữ liệu web và trích xuất dữ liệu web, đồng thời khám phá nhiều chiến lược và công nghệ giúp nâng cao năng lực thu thập dữ liệu web của bạn.

Từ thế giới năng động của các trang web JavaScript đến sự đơn giản đầy hiệu quả của Python, chúng tôi sẽ hướng dẫn bạn qua vô số mẹo và kỹ thuật để đảm bảo chuyến hành 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ậy hãy chuẩn bị sẵn sàng để bắt đầu chuyến hành trình thú vị khám phá thế giới thu thập dữ liệu web đầy cuốn hút!

Thu thập dữ liệu web và trích xuất dữ liệu web

Mặc dù trích xuất dữ liệu web và thu thập dữ liệu web thường được xem là giống nhau, và cả hai đều được dùng để khai thác dữ liệu, nhưng chúng có những điểm khác biệt quan trọng. Chúng ta sẽ tìm hiểu những khác biệt này và giúp bạn xác định phương pháp phù hợp nhất với nhu cầu cũng như mục tiêu kinh doanh của mình.

Những điểm khác biệt chính

Nói một cách đơn giản, thu thập dữ liệu web là việc các 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ó thể truy cập và đi theo tất cả các liên kết khả dụng. Quy trình tổng quát này nhằm thu thập càng nhiều thông tin càng tốt (thậm chí là toàn bộ thông tin) từ một trang web cụ thể. Về cơ bản, đây là cách Google hoạt động – Google xem toàn bộ trang web và lập chỉ mục tất cả dữ liệu hiện có.

Mặt khác, trích xuất dữ liệu web được sử dụng khi bạn muốn tải xuống thông tin đã thu thập. Trích xuất dữ liệu web (còn gọi là khai thác dữ liệu web) là một quy trình có mục tiêu cụ thể hơn. Bằng cách tùy chỉnh các lệnh và sử dụng proxy chuyên dụng cho việc trích xuất dữ liệu, bạn có thể lấy dữ liệu cụ thể từ trang web mục tiêu. Sau đó, bạn có thể tải kết quả xuống ở đị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 lẫn trích xuất dữ liệu web đều có thể được sử dụng để đạt một mục tiêu duy nhất, về cơ bản đóng vai trò là bước một và bước hai trong quy trình của bạn. Kết hợp cả hai phương pháp, bạn có thể dùng trình thu thập dữ liệu để thu thập lượng thông tin lớn từ các trang web quy mô lớn, rồi dùng công cụ trích xuất để lấy và tải xuống dữ liệu cụ thể mà bạn cần.

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 các trang web dựa trên ngân sách thu thập dữ liệu, được xác định bởi những 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, trong đó chỉ rõ những phần nào của trang web được phép thu thập dữ liệu và những phần nào bị hạn chế. Ngoài ra còn có sitemap.xml, chứa thông tin chi tiết hơn robots.txt, hướng dẫn bot về những đường dẫn cần thu thập dữ liệu và cung cấp thêm siêu dữ liệu cho từng URL.

Một số ứng dụng phổ biến của trình thu thập dữ liệu web gồm:

  1. Các công cụ tìm kiếm như Googlebot, Bingbot và Yandex Bot thu thập HTML từ một phần đáng kể của web, lập chỉ mục dữ liệu để người dùng dễ dàng tìm kiếm.
  2. Các công cụ phân tích SEO thu thập không chỉ 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, nhằm xác định các trang bị lỗi và theo dõi liên kết giữa các tên miền để phân tích backlink.
  3. Các công cụ theo dõi giá thu thập dữ liệu từ những trang thương mại điện tử để tìm trang sản phẩm và trích xuất siêu dữ liệu, đặc biệt là giá cả. Sau đó, các trang sản phẩm này được truy cập lại định kỳ.
  4. Common Crawl duy trì một kho lưu trữ công khai dữ liệu thu thập từ web, chẳng hạn như kho lưu trữ tháng 5 năm 2022 chứa 3.45 billion trang web.

Cách thu thập dữ liệu từ các trang web JavaScript

Thu thập dữ liệu từ các trang web JavaScript có thể khó khăn hơn so với 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 từ những trang web như vậy, bạn cần sử dụng trình duyệt không giao diện có thể thực thi JavaScript và hiển thị nội dung trang. Một lựa chọn phổ biến cho tác vụ này là kết hợp thư viện Puppeteer với môi trường chạy Node.js.

Dưới đây là hướng dẫn từng bước để thu thập dữ liệu từ 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 Node.js mới nhất 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à di chuyển đến thư mục đó 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 để tạo tệp package.json mới với các thiết lập 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 tệp JavaScript mới

Tạo một tệp mới có tên

crawler.js

trong thư mục dự án của bạn. Tệp này sẽ chứa mã để thu thập dữ liệu từ trang web JavaScript.

6. Viết mã thu thập dữ liệu

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

constbrowser =awaitpuppeteer.launch({headless:true});

Tạo một trang mới trong trình duyệt

constpage =awaitbrowser.newPage();

Truy cập URL đích

awaitpage.goto(url, {waitUntil:'networkidle2'})

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

evaluate()constdata =awaitpage.evaluate(() =>{

Viết mã JavaScript tùy chỉnh tại đâ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) trên trang.

constheadings =Array.from(document.querySelectorAll('h1')).map(heading=>heading.textContent);return{ headings, }; });

Đóng trình duyệt

awaitbrowser.close();

Trả về dữ liệu đã trích xuất

returndata; }

Ví dụ sử dụng:

crawlJavaScriptWebsite('https://example.com/') .then(data=>console.log(data)) .catch(err=>console.error(err));

Thay thế URL

https://example.com/

bằng URL của trang web đích và tùy chỉnh hàm

page.evaluate()

để trích xuất dữ liệu bạn cần.

7. Chạy trình thu thập dữ liệu

Thực thi lệnh sau trong thư mục dự án để chạy trình thu thập dữ liệu:

node crawler.js

Tập lệnh sẽ khởi chạy một trình duyệt không giao diện, truy cập URL đích và thực thi mã JavaScript được chỉ định trong hàm

page.evaluate()

Dữ liệu được trích xuất sẽ được ghi vào bảng điều khiển.

Hãy lưu ý rằng đây chỉ là ví dụ cơ bản về cách thu thập dữ liệu từ một trang web JavaScript. Với các trường hợp sử dụng nâng cao hơn, bạn có thể cần 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 từ một trang web bằng Python bao gồm việc tải các trang web, phân tích nội dung và theo các liên kết đến những trang khác. Trong hướng dẫn này, chúng ta sẽ sử dụng hai thư viện Python phổ biến: Requests và Beautiful Soup. Hướng dẫn này giả định rằng bạn đã cài đặt Python và có 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 Requests và Beautiful Soup bằng pip:

pip install requests beautifulsoup4

Bước 2: Nhập các thư viện

Nhập các thư viện cần thiết vào tập lệnh Python của bạn:

importrequests frombs4importBeautifulSoup

Bước 3: Tạo hàm để tải nội dung trang web

Tạo hàm để tải nội dung trang web bằng thư viện Requests:

deffetch_page(url):response = requests.get(url)ifresponse.status_code ==200:returnresponse.text else:print(f"Failed to fetch{url}(status code{response.status_code})")returnNone

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:

defparse_page(html): soup = BeautifulSoup(html,"html.parser")returnsoup

Bước 5: Tạo hàm để trích xuất liên kết từ nội dung đã phân tích

Tạo hàm để trích xuất tất cả liên kết từ nội dung trang web đã phân tích:

defextract_links(soup, base_url):links = []fora_taginsoup.find_all("a"):href = a_tag.get("href")ifhrefandnothref.startswith("#"):ifnothref.startswith("http"):href = base_url + href links.append(href)returnlinks

Bước 6: Tạo hàm để thu thập dữ liệu trang web

Tạo hàm để thu thập dữ liệu trang web theo cách đệ quy:

defcrawl_website(url, max_depth=2, depth=0):ifdepth > max_depth:return html = fetch_page(url)ifnothtml:return soup = parse_page(html)links = extract_links(soup, url)print(f"{' ' * depth}[{depth}]{url}")forlinkinlinks:crawl_website(link, max_depth, depth +1)

Bước 7: Chạy trình thu thập dữ liệu

Thực thi trình thu thập dữ liệu bằng cách gọi hàm

crawl_website

với URL và độ sâu tối đa mong muốn:

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 trình bày cách thu thập dữ liệu từ một trang web bằng Python. Bạn có thể tùy chỉnh hàm

crawl_website

để xử lý cấu trúc trang web cụ thể, thêm logic lưu trữ thông tin đã trích xuất hoặc triển khai các tính năng thu thập dữ liệu nâng cao hơn như xử lý robots.txt, giới hạn tốc độ hoặc chạy các yêu cầu song song.

12 mẹo để thu thập dữ liệu website mà không bị chặn

Sau đây là những chiến lược chính để thu thập dữ liệu web mà không gặp phải tình trạng bị chặn:

#1: Kiểm tra Giao thức loại trừ robot

Trước khi thu thập dữ liệu hoặc trích xuất thông tin từ một website, hãy đảm bảo rằng website đó 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 website và tuân thủ các quy định của website.

Ngay cả khi website cho phép thu thập dữ liệu, hãy tôn trọng và đừng gây hại cho trang web. Tuân thủ các quy định được nêu trong Giao thức loại trừ robot, thu thập dữ liệu vào giờ thấp điểm, giới hạn số yêu cầu gửi từ một địa chỉ IP và đặt khoảng thời gian chờ giữa các yêu cầu.

Tuy nhiên, ngay cả khi website cho phép trích xuất dữ liệu web, bạn vẫn có thể gặp phải tình trạng bị chặn, vì vậy điều cần thiết là thực hiện thêm các bước khác. Để xem hướng dẫn toàn diện hơn, hãy tham khảo hướng dẫn trích xuất dữ liệu web bằng Python của chúng tôi.

#2: Sử dụng máy chủ proxy

Việc thu thập dữ liệu web gần như là bất khả thi nếu không có proxy. Hãy chọn một nhà cung cấp dịch vụ proxy uy tín và lựa chọn giữa proxy IP trung tâm dữ liệu và proxy IP dân cư tùy theo nhiệm vụ của bạn.

Sử dụng một bên trung gian giữa thiết bị của bạn và website mục tiêu sẽ giảm tình trạng chặn địa chỉ IP, đảm bảo tính ẩn danh và cho phép bạn truy cập các website có thể không khả dụng tại khu vực của mình. Ví dụ: nếu bạn đang ở Đức, bạn có thể cần sử dụng proxy Hoa Kỳ để truy cập nội dung web tại Hoa Kỳ.

Để đạt kết quả tối ưu, hãy chọn nhà cung cấp proxy có nhóm IP lớn và nhiều địa điểm.

#3: Xoay vòng địa chỉ IP

Khi sử dụng nhóm proxy, việc xoay vòng địa chỉ IP là rất quan trọng.

Nếu bạn gửi quá nhiều yêu cầu từ cùng một địa chỉ IP, website mục tiêu sẽ sớm nhận diện bạn là mối đe dọa và chặn địa chỉ IP của bạn. Xoay vòng proxy giúp bạn trông như nhiều người dùng internet khác nhau và giảm khả năng bị chặn.

Tất cả Proxy dân cư của Oxylabs đều xoay vòng IP, nhưng nếu bạn đang sử dụng Proxy trung tâm dữ liệu, bạn nên dùng dịch vụ xoay vòng proxy. Chúng tôi cũng xoay vòng proxy IPv6 và IPv4. Nếu bạn muốn tìm hiểu sự khác biệt giữa IPv4 và IPv6, hãy đọc bài viết do đồng nghiệp Iveta của tôi viết.

#4: Sử dụng user agent thực

Hầu hết máy chủ lưu trữ website đều có thể kiểm tra tiêu đề của yêu cầu HTTP do bot thu thập dữ liệu tạo ra. Tiêu đề yêu cầu HTTP này, được gọi là user agent, 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 ứng dụng.

Máy chủ có thể dễ dàng phát hiện các user agent đáng ngờ. User agent 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 tùy chỉnh user agent sao cho giống với một user agent tự nhiên.

Vì mỗi yêu cầu do trình duyệt web gửi đều chứa user agent, bạn nên thường xuyên thay đổi user agent.

Việc sử dụng user agent cập nhật và phổ biến nhất cũng rất quan trọng. Nếu bạn gửi yêu cầu bằng user agent đã 5 năm tuổi từ một phiên bản Firefox không còn được hỗ trợ, điều đó sẽ làm dấy lên nhiều dấu hiệu đáng ngờ. Bạn có thể tìm các cơ sở dữ liệu công khai trên internet để xem những user agent nào hiện đang phổ biến nhất. Chúng tôi cũng có cơ sở dữ liệu riêng được cập nhật thường xuyên, 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.

#5: Thiết lập dấu vân tay chính xác

Các cơ chế chống trích xuất dữ liệu ngày càng tinh vi hơn, và một số website sử dụng Giao thức điều khiển truyền vận (TCP) hoặc dấu vân tay IP để phát hiện bot.

Khi thu thập dữ liệu web, TCP để lại nhiều tham số. 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 băn khoăn làm thế nào để tránh bị đưa vào danh sách đen khi thu thập dữ liệu, hãy đảm bảo các tham số nhất quán. Ngoài ra, bạn có thể sử dụng Web Unblocker – giải pháp proxy ứng dụng AI với chức năng tạo dấu vân tay linh hoạt. Web Unblocker kết hợp nhiều biến số dấu vân tay theo cách mà ngay cả khi xác định được một dấu vân tay hoạt động tốt nhất, các dấu vân tay vẫn có vẻ ngẫu nhiên và có thể vượt qua các bước kiểm tra chống bot.

#6: Cẩn thận với bẫy honeypot

Hãy cẩn thận với bẫy honeypot, là những liên kết trong mã HTML có thể được công cụ trích xuất dữ liệu web phát hiện nhưng người dùng tự nhiên không nhìn thấy. Các bẫy này được dùng để nhận diện và chặn trình thu thập dữ liệu web vì chỉ robot mới nhấp vào những liên kết đó. Mặc dù việc thiết lập honeypot đòi hỏi nhiều công sức, một số mục tiêu có thể sử dụng chúng để phát hiện trình thu thập dữ liệu web, vì vậy hãy cảnh giác nếu yêu cầu của bạn bị chặn và hệ thống phát hiện trình thu thập dữ liệu.

#7: Sử dụng dịch vụ giải CAPTCHA

CAPTCHA là một thách thức lớn đối với việc thu thập dữ liệu web vì yêu cầu khách truy cập giải câu đố để xác nhận họ là con người. Những câu đố này thường bao gồm hình ảnh mà máy tính khó giải mã. Để vượt CAPTCHA, hãy sử dụng các dịch vụ giải CAPTCHA chuyên dụng hoặc công cụ thu thập dữ liệu sẵn dùng, chẳng hạn như công cụ thu thập dữ liệu của Oxylabs, có thể giải CAPTCHA và cung cấp kết quả sẵn 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 dữ liệu

Để tránh bị chặn, hãy điều chỉnh kiểu điều hướng của trình thu thập dữ liệu để hoạt động có vẻ ít dễ đoán hơn. Bạn có thể thêm các thao tác nhấp, cuộn và di chuyển chuột ngẫu nhiên để mô phỏng hành vi duyệt web của người dùng thông thường. Để áp dụng các phương pháp tốt nhất, hãy nghĩ về cách một người dùng điển hình sẽ duyệt website 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 kiểu điều hướng hợp lý.

#9: Giảm tốc độ công cụ trích xuất dữ liệu

Để giảm nguy cơ bị chặn, hãy làm chậm công cụ trích xuất dữ liệu bằng cách thêm các khoảng nghỉ 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 thao tác. Nếu URL bị giới hạn tốc độ, hãy tôn trọng giới hạn của website và giảm tốc độ trích xuất dữ liệu để tránh các yêu cầu bị giới hạn.

#10: Thu thập dữ liệu vào giờ thấp điểm

Trình thu thập dữ liệu hoạt động nhanh hơn người dùng thông thường và có thể ảnh hưởng đáng kể đến tải máy chủ. Thu thập dữ liệu vào thời điểm tải cao có thể tác độ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 vào giờ thấp điểm, chẳng hạn như ngay sau nửa đêm (theo múi giờ địa phương của dịch vụ), nhằm giảm tải cho máy chủ.

#11: Tránh trích xuất hình ảnh

Trích xuất hình ảnh có thể tiềm ẩn rủi ro vì chúng thường là các đối tượng có dung lượng dữ liệu lớn 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 quy trình trích xuất dữ liệu phức tạp hơn và khiến công cụ trích xuất dữ liệu web hoạt động chậm lại. Để trích xuất hình ảnh từ các phần tử JS, cần sử dụng một quy trình trích xuất dữ liệu phức tạp hơn.

#12: Sử dụng trình duyệt headless

Trình duyệt headless là công cụ hoạt động như một trình duyệt thông thường nhưng không có giao diện đồ họa. Công cụ này cho phép trích xuất nội dung được tải bằng cách kết xuất 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ó chế độ headless có thể dùng để trích xuất dữ liệu web mà không kích hoạt cơ chế chặn.

Video hướng dẫn cách thu thập dữ liệu trên website

Trong hướng dẫn này của Oxylabs, bạn sẽ tìm hiểu những kiến thức cơ bản về thu thập dữ liệu web và tầm quan trọng của việc này đối với quá trình thu thập dữ liệu, đồng thời tìm hiểu các khía cạnh đạo đức và pháp lý. Hướng dẫn giới thiệu những công cụ phổ biến như Scrapy, Beautiful Soup và Selenium, đồng thời giúp bạn chọn công cụ phù hợp nhất với nhu cầu của mình.

Hướng dẫn giúp bạn hiểu cấu trúc của một website, tạo trình thu thập dữ liệu web đơn giản và trích xuất thông tin cần thiết. Hướng dẫn cũng nhắc bạn tuân thủ các quy tắc về thu thập dữ liệu web, chẳng hạn như tôn trọng các quy định trong robots.txt và không làm quá tải máy chủ.

Video cũng giúp bạn xử lý những 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. Video hướng dẫn cách lưu trữ và sắp xếp dữ liệu, đồng thời đưa ra các mẹo giúp dự án thu thập dữ liệu web của bạn mở rộng quy mô và hoạt động hiệu quả hơn. Cuối cùng, video nhắc bạn luôn tuân thủ các nguyên tắc đạo đức và pháp lý.

Kết luận

Khi kết thúc hành trình khám phá đầy hào hứng về thế giới thu thập dữ liệu web, ta nhận ra rằng làm chủ nghệ thuật này cũng giống như sở hữu một tấm bản đồ kho báu trong khung cảnh internet rộng lớn và luôn biến đổi. Chúng ta đã tìm hiểu những điểm khác biệt tinh tế giữa thu thập dữ liệu web và trích xuất dữ liệu web, khám phá nhiều chiến lược khác nhau, đồng thời bước vào thế giới năng động của các website JavaScript và hoạt động thu thập dữ liệu web bằng Python.

Kho tàng mẹo và lời khuyên của chúng tôi giúp đảm bảo các hoạt động thu thập dữ liệu web của bạn luôn có trách nhiệm và hợp đạo đức, tránh những cạm bẫy và trở ngại có thể phát sinh trên hành trình. Vì vậy, khi dong buồm ra khơi trên đại dương kỹ thuật số bao la, với kiến thức và sự thông thái đúc kết 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 dữ liệu web sẽ giúp bạn vượt lên đối thủ và khám phá những viên ngọc quý ẩn sâu trong thế giới kỹ thuật số.