Chuyển đến nội dung chính

Công cụ cào dữ liệu trên JavaScript: Tổng quan tính năng

JavaScript công cụ cào dữ liệu - đây là khả năng tạo các công cụ cào dữ liệu đầy đủ của riêng bạn với logic phức tạp tùy ý bằng ngôn ngữ JavaScript. Đồng thời, trong các công cụ cào dữ liệu JS, bạn cũng có thể sử dụng toàn bộ chức năng của các công cụ cào dữ liệu tiêu chuẩn.

Tổng quan

Tính năng

Sử dụng toàn bộ sức mạnh của A-Parser, giờ đây bạn có thể viết công cụ cào dữ liệu/đăng ký/đăng bài của riêng mình với logic phức tạp tùy ý. Để viết mã, JavaScript với các tính năng ES6 (engine v8) được sử dụng.

Mã của các công cụ cào dữ liệu cực kỳ súc tích, cho phép tập trung vào việc viết logic; việc xử lý đa luồng, mạng, proxy, kết quả, nhật ký, v.v. A-Parser sẽ tự đảm nhận. Mã có thể được viết trực tiếp trong giao diện của công cụ cào dữ liệu bằng cách thêm một công cụ cào dữ liệu mới trong Trình chỉnh sửa công cụ cào dữ liệu. Ngoài ra, để viết các công cụ cào dữ liệu, bạn có thể sử dụng các trình chỉnh sửa bên thứ ba, ví dụ như VSCode.

Việc đánh số phiên bản tự động được sử dụng khi lưu mã công cụ cào dữ liệu thông qua trình chỉnh sửa tích hợp.

ghi chú

Làm việc với JavaScript công cụ cào dữ liệu khả dụng cho các giấy phép ProEnterprise

Truy cập vào Trình chỉnh sửa JS công cụ cào dữ liệu

Nếu A-Parser được sử dụng từ xa, thì vì mục đích bảo mật, Trình chỉnh sửa JS công cụ cào dữ liệu theo mặc định sẽ không khả dụng. Để mở quyền truy cập vào nó, cần phải:

  • Thiết lập mật khẩu trong tab Settings -> Global Settings
  • Thêm dòng sau vào config/config.txt: allow_javascript_editor: 1
  • Khởi động lại A-Parser

Hướng dẫn vận hành

Trong Trình chỉnh sửa công cụ cào dữ liệu, chúng ta tạo một công cụ cào dữ liệu mới và đặt tên cho nó. Theo mặc định, một ví dụ đơn giản sẽ được tải, dựa trên đó bạn có thể nhanh chóng bắt đầu tạo công cụ cào dữ liệu của riêng mình.

ghi chú

Nếu sử dụng trình chỉnh sửa bên thứ ba để viết mã, bạn cần mở tệp của công cụ cào dữ liệu đang chỉnh sửa trong thư mục /parsers/. Cấu trúc tệp của chương trình đã cài đặt.

Khi mã đã sẵn sàng, hãy lưu nó và sử dụng như một công cụ cào dữ liệu thông thường: trong Trình chỉnh sửa tác vụ, chọn công cụ cào dữ liệu đã tạo, nếu cần có thể thiết lập các tham số mong muốn, cấu hình luồng, tên tệp, v.v.

Công cụ cào dữ liệu đã tạo có thể được chỉnh sửa bất cứ lúc nào. Tất cả các thay đổi liên quan đến giao diện sẽ xuất hiện sau khi chọn lại công cụ cào dữ liệu trong danh sách hoặc khởi động lại A-Parser; các thay đổi trong logic của công cụ cào dữ liệu sẽ được áp dụng khi chạy lại tác vụ với công cụ cào dữ liệu đó.

Đối với mỗi công cụ cào dữ liệu được tạo, một biểu tượng tiêu chuẩn sẽ được hiển thị theo mặc định, bạn có thể thêm biểu tượng riêng ở định dạng png hoặc ico bằng cách đặt nó vào thư mục của công cụ cào dữ liệu trong /parsers/:

Nguyên tắc hoạt động chung

Theo mặc định, một ví dụ về công cụ cào dữ liệu đơn giản được tạo, sẵn sàng để chỉnh sửa thêm.

files/parsers/v2-example/v2-example.ts

import { BaseParser } from 'a-parser-types';

export class JS_v2_example extends BaseParser {
static defaultConf: typeof BaseParser.defaultConf = {
version: '0.0.1',
results: {
flat: [
['title', 'HTML title'],
]
},
max_size: 2 * 1024 * 1024,
parsecodes: {
200: 1,
},
results_format: '$query: $title\\n',
};

static editableConf: typeof BaseParser.editableConf = [];

async parse(set, results) {
this.logger.put("Start scraping query: " + set.query);

let response = await this.request('GET', set.query, {}, {
check_content: ['<\/html>'],
decode: 'auto-html',
});

if (response.success) {
let matches = response.data.match(/<title>(.*?)<\/title>/i);
if (matches)
results.title = matches[1];
}

results.success = response.success;

return results;
}
}

Hàm khởi tạo được gọi một lần cho mỗi tác vụ. Bắt buộc phải thiết lập this.defaultConf.resultsthis.defaultConf.results_format, các trường còn lại là tùy chọn và sẽ nhận giá trị mặc định.

Mảng this.editableConf xác định những cài đặt nào có thể được người dùng thay đổi từ giao diện A-Parser. Có thể sử dụng các loại trường sau:

  • combobox - menu thả xuống để lựa chọn. Cũng có thể tạo menu chọn mẫu của công cụ cào dữ liệu tiêu chuẩn, ví dụ:
['Util_AntiGate_preset', ['combobox', 'AntiGate preset']]
  • combobox với khả năng chọn nhiều mục. Cần thiết lập thêm tham số {'multiSelect': 1}:
['proxyCheckers', ['combobox', 'Proxy Checkers', {'multiSelect': 1}, ['*', 'All']]]
  • checkbox - hộp kiểm, cho các tham số chỉ có thể có 2 giá trị (true/false)
  • textfield - trường văn bản
  • textarea - trường văn bản với nhập liệu nhiều dòng

Phương thức parse là một hàm bất đồng bộ, và đối với bất kỳ thao tác chặn nào đều phải trả về await (đây là điểm khác biệt chính và duy nhất so với hàm thông thường). Phương thức được gọi cho mỗi truy vấn được đưa vào xử lý. Bắt buộc phải truyền set (hash với truy vấn và các tham số của nó) và results (phôi trống cho kết quả). Đồng thời, bắt buộc phải trả về results đã điền đầy đủ, sau khi đã đặt cờ success.

Tự động đánh số phiên bản

Phiên bản có định dạng Major.Minor.Revision

this.defaultConf: typeof BaseParser.defaultConf = {
version: '0.1.1',
...
}

Giá trị Revision (con số cuối cùng) tự động tăng lên sau mỗi lần lưu. Các giá trị khác (Major, Minor) có thể thay đổi thủ công, cũng như có thể đặt lại Revision về 0.

mẹo

Nếu vì lý do nào đó cần thay đổi Revision chỉ bằng cách thủ công, thì phiên bản phải được đặt trong dấu ngoặc kép ""

Xử lý truy vấn theo lô

Trong một số trường hợp, có thể cần lấy đồng thời nhiều truy vấn từ hàng đợi và xử lý chúng cùng một lúc. Chế độ này ở các công cụ cào dữ liệu tích hợp được sử dụng khi trong một lượt cần yêu cầu dữ liệu cho nhiều khóa cùng lúc (theo lô).

Để triển khai chức năng tương tự trong công cụ cào dữ liệu JS, bạn cần thiết lập giá trị bulkQueries: N trong this.defaultConf, trong đó N là số lượng truy vấn cần thiết trong một lô. Trong trường hợp này, công cụ cào dữ liệu sẽ lấy các truy vấn theo lô gồm N mục và tất cả các truy vấn của lần lặp hiện tại sẽ nằm trong mảng set.bulkQueries (bao gồm tất cả các biến tiêu chuẩn: query.first, query.orig, query.prev, v.v.). Dưới đây là ví dụ về mảng như vậy:

[
{
"first": "test",
"prev": "",
"lvl": 0,
"num": 0,
"query": "test",
"queryUid": "6eb301",
"orig": "test"
},
{
"first": "kiểm tra",
"prev": "",
"lvl": 0,
"num": 1,
"query": "kiểm tra",
"queryUid": "774563",
"orig": "kiểm tra"
},
{
"first": "third query",
"prev": "",
"lvl": 0,
"num": 2,
"query": "third query",
"queryUid": "2bc8ed",
"orig": "third query"
}
]

Kết quả khi xử lý theo lô cần được điền vào mảng results.bulkResults, trong đó mỗi phần tử là một đối tượng results. Các phần tử trong results.bulkResults được sắp xếp theo cùng thứ tự như trong set.bulkQueries.