Làm cách nào để tạo một cái cạp trong JavaScript?

Hãy Trung thực. Từ đây trở đi, khối lượng dữ liệu của Internet sẽ ngày càng lớn hơn. Thực sự không có gì chúng ta có thể làm về nó. Đây là nơi Trình quét web xuất hiện

Trong bài viết sau đây, chúng tôi sẽ hướng dẫn bạn cách xây dựng Web Scraper của riêng mình bằng cách sử dụng JavaScript làm ngôn ngữ lập trình chính

Trình quét web là một phần mềm giúp bạn tự động hóa quá trình thu thập dữ liệu hữu ích tẻ nhạt từ các trang web của bên thứ ba. Thông thường, quy trình này bao gồm việc đưa ra yêu cầu đối với một trang web cụ thể, đọc mã HTML và chia nhỏ mã đó để thu thập một số dữ liệu

Giả sử bạn muốn tạo một nền tảng so sánh giá. Bạn cần giá của một số mặt hàng từ một vài cửa hàng trực tuyến. Công cụ quét web có thể giúp bạn quản lý việc này trong vài phút

Có thể bạn đang cố gắng có được một số khách hàng tiềm năng mới cho công ty của mình hoặc thậm chí là có được chuyến bay hoặc giá khách sạn ưu đãi nhất. Trong khi chúng tôi đang thu thập thông tin trên web, nghiên cứu cho bài viết này, chúng tôi tình cờ thấy Brisk Voyage

Brisk Voyage là một ứng dụng web giúp người dùng tìm các chuyến đi cuối tuần giá rẻ vào phút cuối. Sử dụng một số loại công nghệ quét web, họ quản lý để liên tục kiểm tra giá vé máy bay và khách sạn. Khi trình quét web tìm thấy một chuyến đi có giá thấp hơn, người dùng sẽ nhận được email có hướng dẫn đặt chỗ. Bạn có thể đọc thêm về nó ở đây

Các nhà phát triển đang sử dụng trình quét web cho tất cả các loại tìm nạp dữ liệu nhưng các trường hợp được sử dụng nhiều nhất là các trường hợp sau

  • phân tích thị trường
  • So sánh giá
  • tạo khách hàng tiềm năng
  • Nghiên cứu học thuật
  • Bộ dữ liệu đào tạo và kiểm tra bộ sưu tập cho Machine Learning

Bạn có biết những hộp đánh dấu nhỏ khiến bạn thừa nhận mình không phải là người máy không?

Nhưng hầu hết thời gian họ làm như vậy và khi các công cụ tìm kiếm phát hiện ra bạn đang cố gắng lấy cắp trang web của họ mà không được phép, họ sẽ hạn chế quyền truy cập của bạn

Một trở ngại khác mà những người dọn dẹp web phải đối mặt được thể hiện bằng những thay đổi trong cấu trúc của trang web. Một thay đổi nhỏ trong cấu trúc của website có thể khiến chúng ta lãng phí rất nhiều thời gian. Các công cụ quét web yêu cầu cập nhật thường xuyên để thích ứng và hoàn thành công việc

Một thách thức khác mà những người dọn dẹp web phải đối mặt được gọi là chặn địa lý. Dựa trên vị trí thực tế của bạn, một trang web có thể cấm hoàn toàn quyền truy cập của bạn nếu yêu cầu đến từ các khu vực không đáng tin cậy

Để chống lại những thách thức này và giúp bạn tập trung vào việc xây dựng sản phẩm của mình, chúng tôi đã tạo WebScrapingAPI. Đó là API được chia tỷ lệ cấp doanh nghiệp, dễ sử dụng giúp bạn thu thập và quản lý dữ liệu HTML. Chúng tôi bị ám ảnh bởi tốc độ, chúng tôi sử dụng mạng proxy xoay vòng toàn cầu và chúng tôi có hơn 10. 000 khách hàng đã sử dụng dịch vụ của chúng tôi. Nếu bạn cảm thấy mình không có thời gian để xây dựng trình quét web từ đầu, bạn có thể dùng thử WebScrapingAPI bằng cách sử dụng bậc miễn phí

Hầu hết các ứng dụng web đều cung cấp API cho phép người dùng truy cập vào dữ liệu của họ theo cách có tổ chức, được xác định trước. Người dùng sẽ yêu cầu một điểm cuối cụ thể và ứng dụng sẽ phản hồi với tất cả dữ liệu mà người dùng đã yêu cầu cụ thể. Thông thường, dữ liệu sẽ được định dạng dưới dạng đối tượng JSON

Khi sử dụng Giao diện lập trình ứng dụng, bạn thường không phải lo lắng về những trở ngại đã trình bày trước đó. Tuy nhiên, các API cũng có thể nhận được các bản cập nhật. Trong tình huống này, người dùng phải luôn theo dõi API mình đang sử dụng và cập nhật mã cho phù hợp để không làm mất chức năng của nó

Hơn nữa, tài liệu về API rất quan trọng. Nếu một chức năng API không được ghi lại rõ ràng, người dùng sẽ thấy mình lãng phí rất nhiều thời gian

Hiểu biết tốt về Internet đòi hỏi rất nhiều kiến ​​thức. Hãy xem qua phần giới thiệu ngắn gọn về tất cả các thuật ngữ bạn cần để hiểu rõ hơn về việc quét web

HTTP hoặc Giao thức truyền siêu văn bản là nền tảng của bất kỳ trao đổi dữ liệu nào trên web. Như tên gợi ý, HTTP là quy ước máy khách-máy chủ. Máy khách HTTP giống như trình duyệt web, mở kết nối đến máy chủ HTTP và gửi tin nhắn, chẳng hạn như. "Chào. Có chuyện gì vậy? . Máy chủ thường đưa ra phản hồi, dưới dạng mã HTML và đóng kết nối

Giả sử bạn cần truy cập Google. Nếu bạn nhập địa chỉ vào trình duyệt web và nhấn enter, ứng dụng khách HTTP (trình duyệt) sẽ gửi thông báo sau đến máy chủ

GET / HTTP/1.1
Host: google.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/web\p,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Connection: keep-aliveUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36

Dòng đầu tiên của thông báo chứa phương thức yêu cầu (GET), đường dẫn chúng tôi đã thực hiện yêu cầu (trong trường hợp của chúng tôi chỉ là '/' vì chúng tôi chỉ truy cập www. Google. com), phiên bản của giao thức HTTP và nhiều tiêu đề, như Kết nối hoặc Tác nhân người dùng. Còn rất nhiều loại header khác bạn nên xem qua

Hãy nói về các trường tiêu đề quan trọng nhất cho quy trình

  • Chủ nhà. Tên miền của máy chủ bạn đã truy cập sau khi nhập địa chỉ vào trình duyệt web và nhấn enter
  • Đại lý người dùng. Ở đây chúng ta có thể xem chi tiết về khách hàng đã đưa ra yêu cầu. Tôi sử dụng MacBook, như bạn có thể thấy từ phần __(Macintosh; Intel Mac OS X 10_11_6)__ và Chrome là trình duyệt web __(Chrome/56. 0. 2924. 87)__
  • Chấp nhận. Bằng cách sử dụng tiêu đề này, máy khách buộc máy chủ chỉ gửi cho anh ta một số loại phản hồi, như ứng dụng/JSON hoặc văn bản/đơn giản
  • người giới thiệu. Trường tiêu đề này chứa địa chỉ của trang đưa ra yêu cầu. Các trang web sử dụng tiêu đề này để thay đổi nội dung của họ dựa trên nơi người dùng đến

Phản hồi của máy chủ có thể trông như thế này

HTTP/1.1 200 OK
Server: nginx/1.4.6 (Ubuntu) Content-Type: text/html; charset=utf-8



Title of the document

The content of the document

Như bạn có thể thấy, trên dòng đầu tiên có mã phản hồi HTTP. **200 được. Điều này có nghĩa là hành động cạo đã thành công. Có nhiều loại phản hồi bạn có thể kiểm tra

Bây giờ, nếu chúng tôi đã gửi yêu cầu bằng trình duyệt web, nó sẽ phân tích cú pháp mã HTML, lấy tất cả các nội dung khác như CSS, tệp JavaScript, hình ảnh và hiển thị phiên bản cuối cùng của trang web. Trong các bước bên dưới, chúng tôi sẽ cố gắng tự động hóa quy trình này

JavaScript ban đầu được tạo ra để giúp người dùng thêm nội dung động vào trang web. Ban đầu, nó không thể tương tác trực tiếp với máy tính hoặc dữ liệu của nó. Khi bạn truy cập một trang web, JavaScript sẽ được trình duyệt đọc và thay đổi thành một vài dòng mã mà máy tính có thể xử lý

Giới thiệu nút. Js, công cụ giúp Javascript chạy không chỉ client-side mà cả server-side. Nút. Js có thể được định nghĩa là JavaScript mã nguồn mở, miễn phí dành cho lập trình phía máy chủ. Nó giúp người dùng xây dựng và chạy các ứng dụng mạng một cách nhanh chóng

const http = require('http');
const port = 8000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello world!');
});
server.listen(port, () => {
  console.log(`Server running on port 8000.`);
});

Nếu bạn không có nút. Js đã cài đặt, kiểm tra bước tiếp theo để biết hướng dẫn sau. Khác tạo một chỉ mục mới. js và chạy nó bằng cách nhập chỉ mục nút đầu cuối. js, hãy mở trình duyệt và điều hướng đến localhost. 8000. Bạn sẽ thấy chuỗi sau. "Chào thế giới. "

Chrome - Vui lòng làm theo hướng dẫn cài đặt tại đây

  • VSCode - Bạn có thể tải xuống từ trang này và làm theo hướng dẫn để cài đặt nó trên thiết bị của mình
  • Nút. Js - Trước khi bắt đầu sử dụng Axios, Cheerio hoặc Puppeteer, chúng ta cần cài đặt Node. Js và Trình quản lý gói nút. Cách dễ nhất để cài đặt Node. Js và NPM là lấy một trong các trình cài đặt từ Node. Js nguồn chính thức và chạy nó

Sau khi cài đặt xong, bạn có thể xác minh xem Node. Js được cài đặt bằng cách chạy nút -v và npm -v trong cửa sổ đầu cuối. Phiên bản phải cao hơn v14. 15. 5. Nếu bạn gặp sự cố với quy trình này, có một cách khác để cài đặt Node. js. Vui lòng kiểm tra các hướng dẫn này

Bây giờ, hãy tạo một dự án NPM mới. Tạo một thư mục mới cho dự án và chạy npm init -y. Bây giờ hãy bắt đầu cài đặt các phụ thuộc

  • Axios - một thư viện JavaScript được sử dụng để thực hiện các yêu cầu HTTP từ Node. js. Chạy npm install axios trong thư mục vừa tạo
  • Cheerio - một thư viện nguồn mở giúp chúng tôi trích xuất thông tin hữu ích bằng cách phân tích cú pháp đánh dấu và cung cấp API để thao tác dữ liệu kết quả. Để sử dụng Cheerio, bạn có thể chọn các thẻ của tài liệu HTML bằng cách sử dụng bộ chọn. Một bộ chọn trông như thế này. $("div"). Bộ chọn cụ thể này giúp chúng tôi chọn tất cả

    các yếu tố trên một trang

Để cài đặt Cheerio, vui lòng chạy npm install cheerio trong thư mục của dự án

  • Nghệ sĩ múa rối - một nút. Thư viện Js được sử dụng để kiểm soát Chrome hoặc Chromium bằng cách cung cấp API cấp cao

Để sử dụng Puppeteer, bạn phải cài đặt nó bằng lệnh tương tự. npm cài đặt nghệ sĩ múa rối. Lưu ý rằng khi bạn cài đặt gói này, nó cũng sẽ cài đặt phiên bản Chromium gần đây được đảm bảo tương thích với phiên bản Puppeteer của bạn

Trước tiên, bạn cần truy cập trang web mà bạn muốn cạo bằng Chrome hoặc bất kỳ trình duyệt web nào khác. Để cạo thành công dữ liệu bạn cần, bạn phải hiểu cấu trúc của trang web. Đối với các bước sau, chúng tôi đã chọn thu thập thông tin trên subreddit /r/dundermifflin

Khi bạn quản lý để truy cập trang web, hãy sử dụng nó như một người dùng bình thường sẽ làm. Nếu bạn đã truy cập subreddit /r/dundermifflin, bạn có thể xem các bài đăng trên trang chính bằng cách nhấp vào chúng, xem các bài bình luận và lượt ủng hộ, thậm chí sắp xếp các bài đăng theo số lượt bình chọn trong một khung thời gian cụ thể

blog-image

Như bạn có thể thấy, trang web chứa một danh sách các bài đăng và mỗi bài đăng có một số lượt ủng hộ và một số bình luận

Bạn có thể hiểu rất nhiều dữ liệu của một trang web chỉ bằng cách nhìn vào URL của nó. Trong trường hợp này, https. //www. cũ. reddit. com/r/DunderMifflin đại diện cho URL cơ sở, đường dẫn đưa chúng ta đến cộng đồng Reddit "Văn phòng". Khi bạn bắt đầu sắp xếp các bài đăng theo số lượt bình chọn, bạn có thể thấy rằng URL cơ sở đang thay đổi thành https. //www. cũ. reddit. com/r/DunderMifflin/top/?t=year

Tham số truy vấn là phần mở rộng của URL được sử dụng để giúp xác định nội dung hoặc hành động cụ thể dựa trên dữ liệu được truyền. Trong trường hợp của chúng tôi, "?t=year" đại diện cho khung thời gian đã chọn mà chúng tôi sẽ muốn xem các bài đăng được bình chọn nhiều nhất

Miễn là bạn vẫn ở trên subreddit cụ thể này, URL cơ sở sẽ giữ nguyên. Điều duy nhất sẽ thay đổi là các tham số truy vấn. Chúng ta có thể xem chúng như những bộ lọc được áp dụng cho cơ sở dữ liệu để lấy dữ liệu mà chúng ta muốn. Bạn có thể chuyển khung thời gian để chỉ xem các bài đăng được bình chọn nhiều nhất trong tháng hoặc tuần trước chỉ bằng cách thay đổi URL

Trong các bước sau, bạn sẽ tìm hiểu thêm về cách tổ chức thông tin trên trang. Bạn sẽ cần phải làm điều này để hiểu rõ hơn về những gì chúng tôi thực sự có thể cạo từ nguồn của mình

Các công cụ dành cho nhà phát triển giúp bạn khám phá Mô hình Đối tượng Tài liệu (DOM) của trang web một cách tương tác. Chúng tôi sẽ sử dụng các công cụ dành cho nhà phát triển trong Chrome nhưng bạn có thể sử dụng bất kỳ trình duyệt web nào mà bạn cảm thấy thoải mái. Trong Chrome, bạn có thể mở nó bằng cách nhấp chuột phải vào bất kỳ đâu trên trang và chọn tùy chọn "Kiểm tra"

blog-image

Trong menu mới xuất hiện trên màn hình, vui lòng chọn tab "Thành phần". Điều này sẽ trình bày cấu trúc HTML tương tác của trang web

blog-image

Bạn có thể tương tác với trang web bằng cách chỉnh sửa cấu trúc, mở rộng và thu gọn các phần tử hoặc thậm chí xóa chúng. Lưu ý rằng những thay đổi này sẽ chỉ hiển thị với bạn

Biểu thức chính quy, còn được gọi là RegEx, giúp bạn tạo các quy tắc cho phép bạn tìm và quản lý các chuỗi khác nhau. Nếu bạn cần phân tích một lượng lớn thông tin, việc nắm vững thế giới của các biểu thức chính quy có thể giúp bạn tiết kiệm rất nhiều thời gian

Khi bạn lần đầu tiên bắt đầu sử dụng regex, nó có vẻ hơi phức tạp, nhưng sự thật là chúng khá dễ sử dụng. Hãy lấy ví dụ sau. \d. Bằng cách sử dụng biểu thức này, bạn có thể dễ dàng lấy bất kỳ chữ số nào từ 0 đến 9. Tất nhiên, có nhiều cái phức tạp hơn, như. ^(\(\d{3}\). ^\d{3}[. -]?)?\d{3}[. -]?\d{4}$. Số này khớp với một số điện thoại, có hoặc không có dấu ngoặc đơn xung quanh mã vùng hoặc có hoặc không có dấu chấm để phân tách các số

Như bạn có thể thấy các biểu thức chính quy khá dễ sử dụng và có thể rất hiệu quả nếu bạn dành đủ thời gian để thành thạo chúng

Sau khi bạn đã cài đặt thành công tất cả các phụ thuộc đã trình bày trước đó và kiểm tra DOM bằng các công cụ dành cho nhà phát triển, bạn có thể bắt đầu tìm hiểu thực tế

Một điều bạn cần lưu ý là nếu trang bạn đang cố gắng cạo là một SPA (Ứng dụng một trang), thì Cheerio có thể không phải là giải pháp tốt nhất. Lý do là Cheerio không thể thực sự nghĩ như một trình duyệt web. Đây là lý do tại sao trong các bước sau chúng ta sẽ sử dụng Puppeteer. Nhưng cho đến lúc đó, hãy tìm hiểu Cheerio mạnh mẽ như thế nào

Để kiểm tra chức năng của Cheerio, hãy thử thu thập tất cả các tiêu đề bài đăng trên subreddit đã trình bày trước đó. /r/dundermifflin

Hãy tạo một tệp mới có tên là chỉ mục. js và nhập hoặc chỉ sao chép các dòng sau

const axios = require("axios");
const cheerio = require("cheerio");
const fetchTitles = async () => {
try {
const response = await axios.get('https://old.reddit.com/r/DunderMifflin/');
        const html = response.data;
const $ = cheerio.load(html);
const titles = [];
$('div > p.title > a').each((_idx, el) => {
const title = $(el).text()
titles.push(title)
});
return titles;
} catch (error) {
throw error;
}};
fetchTitles().then((titles) => console.log(titles));

Để hiểu rõ hơn về đoạn mã được viết ở trên, chúng tôi sẽ giải thích hàm không đồng bộ fetchTitles() làm gì

Đầu tiên, chúng tôi thực hiện yêu cầu GET tới trang web Reddit cũ bằng thư viện Axios. Kết quả của yêu cầu đó sau đó được tải bởi Cheerio ở dòng 10. Sử dụng các công cụ dành cho nhà phát triển, chúng tôi đã phát hiện ra các phần tử chứa thông tin mong muốn là một vài thẻ neo. Để đảm bảo rằng chúng tôi chỉ chọn các thẻ liên kết có chứa tiêu đề của bài đăng, chúng tôi cũng sẽ chọn cha mẹ của chúng bằng cách sử dụng bộ chọn sau. $('div > p. tiêu đề > a')

Để có được từng tiêu đề riêng lẻ và không chỉ là một đoạn lớn các chữ cái vô nghĩa, chúng ta phải lặp qua từng bài đăng bằng cách sử dụng hàm each(). Cuối cùng, gọi text() trên mỗi mục sẽ trả lại cho tôi tiêu đề của bài đăng cụ thể đó

Để chạy nó, chỉ cần gõ node index. js trong thiết bị đầu cuối và nhấn enter. Bạn sẽ thấy một mảng chứa tất cả các tiêu đề của bài viết

Vì DOM của trang web không có sẵn trực tiếp cho Node. Js, chúng ta có thể sử dụng JSDOM. Theo tài liệu của nó, JSDOM là một triển khai JavaScript thuần túy của nhiều tiêu chuẩn web, đáng chú ý là Tiêu chuẩn WHATWG DOM và HTML, để sử dụng với Node. js

Nói cách khác, sử dụng JSDOM, chúng ta có thể tạo một DOM và thao tác với nó bằng cách sử dụng các phương pháp tương tự mà chúng ta sẽ sử dụng để thao tác trên trình duyệt web

JSDOM giúp bạn có thể tương tác với trang web mà bạn cần thu thập thông tin. Nếu bạn đã quen với việc thao tác với DOM của trình duyệt web, việc hiểu chức năng của JSDOM sẽ không tốn nhiều công sức

Để hiểu rõ hơn về cách thức hoạt động của JSDOM, hãy cài đặt nó, tạo một chỉ mục mới. js và nhập hoặc sao chép mã sau

const { JSDOM } = require('jsdom')
const { document } = new JSDOM(
  'Dunder mifflin, the people person\'s paper people!'
).window
const string = document.querySelector('.string')
console.log(string.innerHTML)
string.textContent = 'Hello world'
console.log(string.innerHTML)

Như bạn có thể thấy, JSDOM tạo Mô hình Đối tượng Tài liệu mới có thể được thao tác bằng cách sử dụng cùng một phương thức mà chúng ta sử dụng để thao tác với DOM của trình duyệt. Trong dòng 3, một phần tử h1 mới được tạo trong DOM. Sử dụng lớp được gán cho tiêu đề, chúng tôi chọn phần tử ở dòng 7 và thay đổi nội dung của nó ở dòng 10. Bạn có thể thấy sự khác biệt bằng cách in phần tử DOM trước và sau khi thay đổi

Để chạy nó, hãy mở một terminal mới, gõ node index. js và nhấn enter

Tất nhiên, bạn có thể thực hiện nhiều hành động phức tạp hơn bằng cách sử dụng JSDOM, chẳng hạn như mở một trang web và tương tác với nó, hoàn thành biểu mẫu và nhấp vào nút. Bạn có thể đọc thêm về nó ở đây

Đối với giá trị của JSDOM, đó là một lựa chọn tốt nhưng Puppeteer đã đạt được rất nhiều sức hút trong những năm qua

Sử dụng Puppeteer, bạn có thể thực hiện hầu hết mọi việc mà bạn có thể thực hiện thủ công trong trình duyệt web, chẳng hạn như hoàn thành biểu mẫu, tạo ảnh chụp màn hình của trang hoặc tự động kiểm tra giao diện người dùng

Hãy cố gắng hiểu rõ hơn về chức năng của nó bằng cách chụp ảnh màn hình của cộng đồng /r/dundermifflin Reddit. Nếu trước đó bạn đã cài đặt phần phụ thuộc, hãy tiếp tục bước tiếp theo. Nếu không, vui lòng chạy npm i Puppeteer trong thư mục dự án. Bây giờ, tạo một chỉ mục mới. js và nhập hoặc sao chép mã sau

const puppeteer = require('puppeteer')
async function takeScreenshot() {
try {
const URL = 'https://www.old.reddit.com/r/dundermifflin/'
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.goto(URL)
await page.pdf({ path: 'page.pdf' })
await page.screenshot({ path: 'screenshot.png' })
await browser.close()
} catch (error) {
console.error(error)
}
}
takeScreenshot()

Chúng tôi đã tạo hàm không đồng bộ takeScreenshot()

Như bạn có thể thấy, đầu tiên, một phiên bản của trình duyệt được bắt đầu bằng cách sử dụng nghệ sĩ múa rối. lệnh khởi chạy (). Sau đó, chúng tôi tạo một trang mới và bằng cách gọi hàm goto() sử dụng URL làm tham số, trang được tạo trước đó sẽ được đưa đến URL cụ thể đó. Các phương thức pdf() và screenshot() giúp chúng ta tạo một tệp PDF mới và một hình ảnh chứa trang web dưới dạng thành phần trực quan

Cuối cùng, phiên bản trình duyệt được đóng ở dòng 13. Để chạy nó, hãy nhập chỉ mục nút. js trong thiết bị đầu cuối và nhấn enter. Bạn sẽ thấy hai tệp mới trong thư mục dự án có tên là trang. pdf và ảnh chụp màn hình. png

Nếu bạn không cảm thấy thoải mái khi sử dụng Puppeteer, bạn luôn có thể sử dụng giải pháp thay thế như NightwatchJS, NightmareJS hoặc CasperJS

Hãy lấy cơn ác mộng làm ví dụ. Vì nó sử dụng Electron thay vì Chromium nên kích thước gói nhỏ hơn một chút. Cơn ác mộng có thể được cài đặt bằng cách chạy lệnh npm tôi cơn ác mộng. Chúng tôi sẽ cố gắng sao chép quy trình chụp ảnh màn hình trang thành công trước đó bằng Nightmare thay vì Puppeteer

Hãy tạo một chỉ mục mới. js và nhập hoặc sao chép mã sau

const Nightmare = require('nightmare')
const nightmare = new Nightmare()
return nightmare.goto('https://www.old.reddit.com/r/dundermifflin')
.screenshot('./nightmare-screenshot.png')
.end()
.then(() => {
console.log('Done!')
})
.catch((err) => {
console.error(err)
})

Như bạn có thể thấy trong dòng 2, chúng tôi tạo một phiên bản Nightmare mới, chúng tôi trỏ trình duyệt vào trang web mà chúng tôi muốn chụp màn hình, chụp và lưu ảnh chụp màn hình ở dòng 5 và kết thúc phiên Nightmare ở dòng 6

Để chạy nó, hãy nhập chỉ mục nút. js trong thiết bị đầu cuối và nhấn enter. Bạn sẽ thấy hai tập tin mới Nightmare-screenshot. png trong thư mục dự án

Nếu bạn vẫn còn ở đây, xin chúc mừng. Bạn có tất cả thông tin cần thiết để xây dựng công cụ quét web của riêng mình. Hãy dành một phút để tóm tắt những gì bạn đã học được cho đến nay

  • Trình quét web là một phần mềm giúp bạn tự động hóa quá trình thu thập dữ liệu hữu ích tẻ nhạt từ các trang web của bên thứ ba
  • Mọi người đang sử dụng công cụ quét web cho tất cả các loại tìm nạp dữ liệu. phân tích thị trường, so sánh giá hoặc tạo khách hàng tiềm năng
  • Máy khách HTTP như trình duyệt web giúp bạn gửi yêu cầu đến máy chủ và chấp nhận phản hồi
  • JavaScript ban đầu được tạo ra để giúp người dùng thêm nội dung động vào trang web. Nút. Js là công cụ giúp Javascript chạy không chỉ client-side mà cả server-side
  • Cheerio là một thư viện nguồn mở giúp chúng tôi trích xuất thông tin hữu ích bằng cách phân tích cú pháp HTML và cung cấp API để thao tác dữ liệu kết quả
  • Puppeteer là một nút. Thư viện Js được sử dụng để kiểm soát Chrome hoặc Chromium bằng cách cung cấp API cấp cao. Nhờ nó, bạn có thể thực hiện hầu hết những việc mà bạn có thể thực hiện thủ công trong trình duyệt web, chẳng hạn như hoàn thành biểu mẫu, tạo ảnh chụp màn hình của trang hoặc tự động hóa
  • Bạn có thể hiểu rất nhiều dữ liệu của một trang web chỉ bằng cách nhìn vào URL của nó
  • Các công cụ dành cho nhà phát triển giúp bạn khám phá Mô hình đối tượng tài liệu của trang web một cách tương tác
  • Cụm từ thông dụng giúp bạn tạo các quy tắc cho phép bạn tìm và quản lý các chuỗi khác nhau
  • JSDOM là một công cụ tạo Mô hình Đối tượng Tài liệu mới có thể được thao tác bằng cách sử dụng cùng một phương pháp mà bạn sử dụng để thao tác với DOM của trình duyệt

Chúng tôi hy vọng các hướng dẫn đã rõ ràng và bạn đã quản lý để có được tất cả thông tin cần thiết cho dự án tiếp theo của mình. Nếu bạn vẫn cảm thấy không muốn tự mình làm điều đó, bạn luôn có thể dùng thử WebScrapingAPI

Tôi có thể tạo trình quét web bằng JavaScript không?

js có các công cụ để truy vấn cả trang web tĩnh và động và được tích hợp tốt với nhiều API hữu ích, mô-đun nút, v.v. Trong bài viết này, tôi sẽ hướng dẫn một cách mạnh mẽ để sử dụng JavaScript để xây dựng công cụ quét web .

Làm thế nào tôi có thể làm một cạp nhanh?

Giảm thiểu số lượng yêu cầu được gửi . Ví dụ: nếu bạn đang tìm kiếm giá và tiêu đề từ một trang web thương mại điện tử thì bạn không cần phải truy cập trang của từng mặt hàng. Bạn có thể lấy tất cả dữ liệu bạn cần từ trang kết quả.

Ngôn ngữ nào là tốt nhất để cạo?

Python được coi là ngôn ngữ lập trình được sử dụng phổ biến nhất để quét web. Ngẫu nhiên, nó cũng là ngôn ngữ lập trình hàng đầu cho năm 2021 theo IEEE Spectrum.

Làm cách nào để tạo một trình quét web trong Java?

Tạo trình quét web của riêng bạn .
Bước 1. Thiết lập môi trường. Để xây dựng trình quét web Java của chúng tôi, trước tiên chúng tôi cần đảm bảo rằng chúng tôi có tất cả các điều kiện tiên quyết. .
Bước 2. Kiểm tra trang bạn muốn cạo. .
Bước 3. Gửi yêu cầu HTTP và cạo HTML. .
Bước 4. Trích xuất các phần cụ thể. .
Bước 5. Xuất dữ liệu sang CSV