Bạn có thể cạo bằng JavaScript không?

Hướng dẫn sau đây về quét web bằng JavaScript và Node. js sẽ cho phép bạn cạo hầu như bất kỳ trang nào. Nút. js là một môi trường thời gian chạy phát triển nhanh, dễ sử dụng được tạo cho JavaScript, khiến nó trở nên hoàn hảo để quét JavaScript trên web một cách hiệu quả và ít rào cản gia nhập

Web cạo JavaScript có một số lợi thế. Bởi vì nó là một trong những ngôn ngữ lập trình được hỗ trợ và sử dụng rộng rãi nhất, nên việc cạo JavaScript cho phép các nhà phát triển cạo nhiều loại trang web

Ngoài ra, cấu trúc cơ sở dữ liệu gốc của JavaScript là JSON, đây là cấu trúc cơ sở dữ liệu được sử dụng phổ biến nhất trên tất cả các API

Hôm nay, chúng ta sẽ tìm hiểu cách xây dựng một trình quét web JavaScript và làm cho nó tìm thấy một chuỗi dữ liệu cụ thể trên cả trang tĩnh và trang động

Nếu bạn đọc đến cuối hướng dẫn của chúng tôi, ngoài việc chỉ cho bạn cách xây dựng trình quét web từ đầu, chúng tôi sẽ hướng dẫn bạn một mẹo đơn giản để vượt qua hầu hết các rào cản chính mà bạn sẽ gặp phải khi quét các trang web trên quy mô lớn

điều kiện tiên quyết. Những điều bạn cần biết về JavaScript quét web

Hướng dẫn này dành cho các nhà phát triển cơ sở, vì vậy chúng tôi sẽ đề cập đến tất cả những điều cơ bản bạn cần hiểu để xây dựng trình quét web JavaScript đầu tiên của mình

Tuy nhiên, để tận dụng tối đa hướng dẫn của chúng tôi, chúng tôi khuyên bạn nên

  • Có kinh nghiệm với JavaScript [hoặc ít nhất là quen thuộc với nó]
  • Có kiến ​​thức cơ bản về cấu trúc trang web, và
  • Biết cách sử dụng DevTools để trích xuất các bộ chọn phần tử [không bắt buộc]

Ghi chú. Mặc dù JavaScript Scraping tương đối đơn giản, nhưng nếu bạn chưa từng sử dụng JavaScript trước đây, hãy xem hướng dẫn JavaScript của w3bschool hoặc để có khóa học chuyên sâu hơn, hãy xem khóa học Javascript của freeCodeCamp

Tất nhiên, quét web đi kèm với những thách thức riêng của nó, nhưng đừng lo lắng. Ở cuối bài viết này, chúng tôi sẽ chỉ cho bạn một giải pháp nhanh chóng giúp máy cạp của bạn chạy trơn tru và không gặp rắc rối

Biết cách tạo một trình quét web từ đầu là một bước thiết yếu trong hành trình học tập của bạn để trở thành một trình quét chính, vì vậy hãy bắt đầu

Cách xây dựng Trình quét web JavaScript cho các trang tĩnh

Quét web có thể được chia thành hai bước cơ bản

  • Tìm nạp mã nguồn HTML và
  • Phân tích cú pháp dữ liệu để thu thập thông tin chúng tôi cần

Chúng ta sẽ khám phá cách thực hiện từng điều này bằng cách thu thập giá của một bộ tấm hữu cơ từ trang web của Turmerry

1. Cài đặt nút. js trên máy tính của bạn

Để bắt đầu, hãy truy cập https. //nodejs. org/en/download/ để tải xuống Nút. js và làm theo lời nhắc cho đến khi hoàn tất. một nút. js cho phép chúng tôi tận dụng các thư viện quét web JavaScript như Cheerio- sẽ sớm nói thêm về điều đó

Bản tải xuống bao gồm npm, là trình quản lý gói cho Node. js. Npm sẽ cho phép chúng tôi cài đặt phần phụ thuộc còn lại mà chúng tôi cần cho trình quét web của mình

Sau khi cài đặt xong, hãy truy cập thiết bị đầu cuối của bạn và nhập

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

1 và

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

2 để xác minh mọi thứ đang hoạt động bình thường

2. Chuẩn bị sẵn sàng không gian làm việc của bạn

Sau nút. js đã được cài đặt, hãy tạo một thư mục mới có tên là “firstscraper” và nhập

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

3 để khởi tạo gói. tập tin json

Sau đó, chúng tôi sẽ cài đặt các phụ thuộc của chúng tôi bằng cách chạy

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

4 và đợi vài phút để nó cài đặt

* Cài đặt nghệ sĩ múa rối sẽ lâu hơn một chút vì nó cũng cần tải xuống crom

Axios là ứng dụng khách HTTP dựa trên lời hứa dành cho Node. js cho phép chúng tôi gửi yêu cầu đến máy chủ và nhận phản hồi. Nói một cách đơn giản, chúng tôi sẽ sử dụng Axios để lấy mã HTML của trang web

Mặt khác, Cheerio là một triển khai jquery cho Node. js giúp chọn, chỉnh sửa và xem dễ dàng hơn

Chúng ta sẽ nói nhiều hơn về thư viện cuối cùng, nghệ sĩ múa rối, khi cạo các trang động ở phần sau của bài viết này

3. Tìm nạp mã HTML bằng Axios

Khi mọi thứ đã sẵn sàng, hãy nhấp vào “tệp mới”, đặt tên là

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

5 và nhập hàm sau để tìm nạp HTML của trang sản phẩm mà chúng tôi muốn thu thập dữ liệu từ đó

const axios = require['axios']; const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; console.log[html]; }] .catch[console.error];

Chúng tôi sử dụng

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

6 để khai báo Axios trong dự án của mình và thêm

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

7 và cung cấp cho nó URL của trang mà chúng tôi muốn tìm nạp

Axios sẽ gửi yêu cầu đến máy chủ và mang lại phản hồi mà chúng tôi sẽ lưu trữ trong

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

8 để sau đó chúng tôi có thể gọi và in nó trên bảng điều khiển

Sau khi chạy chương trình cạp bằng cách sử dụng

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

9 trong thiết bị đầu cuối, nó sẽ lấy ra một chuỗi HTML dài và không thể đọc được

Bây giờ, hãy giới thiệu cheerio để phân tích cú pháp HTML và chỉ lấy thông tin mà chúng tôi quan tâm

4. Chọn các yếu tố bạn muốn thu thập

Trước khi chúng tôi thực sự thêm cổ vũ vào dự án của mình, chúng tôi cần xác định các yếu tố chúng tôi muốn trích xuất từ ​​​​HTML

Để làm điều này, chúng tôi sẽ sử dụng devtools của trình duyệt của bạn

Đầu tiên, chúng ta sẽ mở trang sản phẩm của Turmerry và nhấn Ctrl + shift + c để mở công cụ kiểm tra

Có hai mức giá khác nhau trên trang. Trong một số trường hợp, bạn có thể muốn lấy cả hai mức giá, nhưng trong ví dụ này, chúng tôi muốn thu thập giá mà họ thực sự bán nó

Khi bấm vào $99. 00 giá, công cụ sẽ đưa bạn đến dòng mã tương ứng nơi bạn có thể lấy lớp phần tử

Giá bán lẻ áp dụng loại

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

0. Bây giờ chúng tôi có thông tin này, chúng tôi có thể tiếp tục và thêm cổ vũ vào tệp của mình

5. Phân tích cú pháp HTML bằng cách sử dụng cheerio

Điều đầu tiên, hãy thêm

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

1 vào đầu tệp của bạn để nhập thư viện của chúng tôi vào dự án, sau đó chuyển tài liệu HTML tới Cheerio bằng cách sử dụng

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

2

Sau khi tải HTML, chúng tôi sẽ sử dụng lớp CSS của giá bằng cách sử dụng

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

3để lưu trữ văn bản có chứa lớp đó trong

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

4

Khi bạn cập nhật mã của mình, nó sẽ giống như thế này

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

Sau khi chạy chương trình của bạn, nó sẽ in nội dung được gắn thẻ là. giá bán cho bảng điều khiển

Nếu chúng tôi cung cấp nhiều URL hơn, chúng tôi sẽ có thể thu thập tất cả giá bán cho tất cả các sản phẩm trong một khoảng thời gian ngắn so với việc chúng tôi thực hiện thủ công

Ghi chú. Quét web bằng cách sử dụng cổ vũ có nhiều cách sử dụng bổ sung - nếu bạn muốn tìm hiểu sâu hơn về thư viện này, hãy xem tài liệu của cổ vũ

Cạo các trang động?

Khi bạn điều hướng đến một trang động, trình duyệt của bạn sẽ cần hiển thị JavaScript để truy cập nội dung trước khi hiển thị cho bạn. Đây có thể không phải là vấn đề đối với chúng tôi, nhưng nó là vấn đề đối với máy cạp của chúng tôi

Axios và bất kỳ ứng dụng khách HTTP nào cho vấn đề đó sẽ không đợi JavaScript thực thi trước khi trả về phản hồi. Vì vậy, nếu chúng tôi sử dụng cái cạp của mình như hiện tại, chúng tôi sẽ không thực sự nhận được gì

Đây là nơi Puppeteer sẽ có ích

Nói một cách đơn giản, Puppeteer là một nút. js cho phép bạn điều khiển trình duyệt crom không đầu trực tiếp từ thiết bị đầu cuối của mình. Bạn có thể làm hầu hết mọi thứ mà bạn có thể tưởng tượng, như cuộn xuống, nhấp, chụp ảnh màn hình, v.v.

Nếu nội dung bạn muốn cạo không tải cho đến khi bạn thực thi tập lệnh bằng cách nhấp vào nút, bạn có thể viết tập lệnh cho những hành động này bằng Puppeteer và cung cấp dữ liệu cho trình cạo của bạn.

Đối với ví dụ này, giả sử bạn muốn tạo nội dung mới xung quanh việc thu thập JavaScript và nghĩ rằng sẽ thu thập ý tưởng từ r/webscraping subreddit bằng cách thu thập tiêu đề của các bài đăng

Nếu chúng tôi kiểm tra subreddit này, chúng tôi sẽ nhận thấy một số điều ngay lập tức. đầu tiên, các lớp được tạo ngẫu nhiên, vì vậy chúng tôi không có lý do gì để cố gắng bám vào chúng. Thứ hai, các tiêu đề được gắn thẻ là

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

5, nhưng chúng được bao bọc giữa các thẻ neo với một ____10_______6 giữa thẻ và h3

Hãy tạo một tệp js mới, đặt tên là scraperapi2. js và thêm

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

7 để nhập thư viện vào dự án. Sau đó, thêm đoạn mã sau

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

Trước tiên, chúng tôi đang sử dụng

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = [];[async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; }

8 để khai báo nơi dữ liệu của chúng tôi sẽ được lưu trữ. Sau đó, chúng tôi viết một hàm async để cho phép chúng tôi sử dụng toán tử chờ đợi

Ghi chú. mặc dù bạn có thể tạo trình quét bằng cách sử dụng ____10_______9 lệnh gọi lại, nhưng điều đó sẽ chỉ giới hạn khả năng mở rộng của trình quét của bạn và khiến việc cạo nhiều trang cùng một lúc trở nên khó khăn hơn

Sau khi thiết lập xong, chúng tôi yêu cầu Puppeteer khởi chạy trình duyệt, đợi

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

0

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

1

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

2 để trình duyệt khởi chạy, sau đó mở một trang mới

Bây giờ, hãy mở một câu lệnh và sử dụng khối mã tiếp theo để báo cho trình duyệt biết URL nào sẽ truy cập và để Puppeteer lấy mã HTML sau khi nó hiển thị

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

Chúng ta đã quen thuộc với bước tiếp theo. Vì chúng tôi đã nhận được tài liệu HTML nên chúng tôi cần gửi tài liệu đó tới Cheerio để chúng tôi có thể sử dụng bộ chọn CSS của mình và lấy nội dung chúng tôi cần

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML]; let $ = cheerio.load[bodyHTML]; let article_headlines = $['a[href*="/r/webscraping/comments"] > div'] article_headlines.each[[index, element] => { title = $[element].find['h3'].text[] scraped_headlines.push[{ 'title': title }] }]; }

Trong trường hợp này, chúng tôi đã thêm ____22_______3 div' vào bộ chọn đầu tiên để báo cho trình quét của chúng tôi biết nơi tìm dữ liệu, trước khi yêu cầu nó trả về văn bản trong thẻ H3 với ____22_______4

Cuối cùng, chúng tôi sử dụng

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

5 để thêm từ “tiêu đề. ” trước mỗi chuỗi dữ liệu. Điều này làm cho nó dễ đọc hơn

Sau khi cập nhật mã của bạn, nó sẽ trông như thế này

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; let scraped_headlines = []; [async [] => { const browser = await puppeteer.launch[]; const page = await browser.newPage[]; try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML]; let $ = cheerio.load[bodyHTML]; let article_headlines = $['a[href*="/r/webscraping/comments"] > div'] article_headlines.each[[index, element] => { title = $[element].find['h3'].text[] scraped_headlines.push[{ 'title': title }] }]; } catch[err] { console.log[err]; } await browser.close[]; console.log[scraped_headlines] }][];

Bây giờ bạn có thể kiểm tra mã của mình bằng cách sử dụng

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

6. Nó sẽ trả về tất cả các tiêu đề H3 mà nó có thể tìm thấy trên trang được hiển thị

Ghi chú. Để có cái nhìn sâu hơn về thư viện này, đây là tài liệu của Puppeteer

Sử dụng ScraperAPI để quét dữ liệu nhanh hơn

Như bạn đã thấy trong hướng dẫn này, xây dựng một công cụ quét web là một dự án đơn giản với nhiều tiềm năng. Tuy nhiên, vấn đề thực sự với máy cạo tự chế là khả năng mở rộng

Một trong những thách thức mà bạn sẽ phải đối mặt là xử lý- ví dụ như – CAPTCHA. Trong khi chạy chương trình của bạn, địa chỉ IP của bạn có thể được xác định là người dùng gian lận, khiến IP của bạn bị cấm

Nếu bạn chạy trình quét của mình trên máy chủ được lưu trữ trong trung tâm dữ liệu, bạn thậm chí có nhiều khả năng bị chặn ngay lập tức. Tại sao? . ”

Tất cả những rào cản này khiến việc quét web trở nên khó khăn và đó là lý do tại sao chúng tôi đã phát triển một API có thể tự động xử lý tất cả chúng. từ xoay địa chỉ IP, xử lý CAPTCHA và hiển thị JavaScript, ScraperAPI xử lý mọi thứ chỉ bằng một lệnh gọi API

Để tìm hiểu cách tích hợp ScraperAPI với các công cụ dọn dẹp của chúng tôi, chúng tôi sẽ cần tạo một tài khoản ScraperAPI mới – bạn sẽ nhận được 1000 tín dụng API miễn phí ngay lập tức, vì vậy bạn có quá đủ để dùng thử API

Sau khi đăng ký, bạn sẽ có quyền truy cập vào khóa API của mình và một số mã mẫu để bạn sử dụng làm tài liệu tham khảo

Bây giờ, hãy tích hợp ScraperAPI với trình cạp Axios của chúng tôi

Tích hợp ScraperAPI với các yêu cầu Axios

Điều này là siêu đơn giản. Tất cả những gì chúng ta cần làm là thêm khóa API dưới dạng

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

7 và sau đó yêu cầu Axios sử dụng điểm cuối ScraperAPI của chúng ta

let axios = require['axios']; const cheerio = require['cheerio']< const API_KEY = ''YOUR_API_KEY'' const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios['//api.scraperapi.com/', { params: { 'url': url, 'api_key': API_KEY, }}]

Bây giờ mọi yêu cầu sẽ đi qua ScraperAPI và nó sẽ trở lại với HTML mà sau đó chúng ta có thể chuyển đến Cheerio như trước đây

Ngoài ra, vì nó được tích hợp đầy đủ với trình cạp của chúng tôi, chúng tôi có thể thêm các tham số khác vào mã của mình để thêm nhiều chức năng hơn thông qua API

Một trường hợp sử dụng tuyệt vời cho việc này là quét một trang web JavaScript mà không cần sử dụng trình duyệt không đầu

Bằng cách đặt

try { await page.goto['//www.reddit.com/r/webscraping/', {timeout: 180000}]; let bodyHTML = await page.evaluate[[] => document.body.innerHTML];

8, ScraperAPI sẽ sử dụng trình duyệt crom không đầu để thực thi tập lệnh và trả về với HTML được tải đầy đủ

Đây là mã Axios + Cheerio cuối cùng

let axios = require['axios']; const cheerio = require['cheerio']; const API_KEY = '51e43be283e4db2a5afb6266xxxxxxxx' const render = 'true' const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios['//api.scraperapi.com/', { params: { 'url': url, 'api_key': API_KEY, 'render' : render }}] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

Tích hợp ScraperAPI với Puppeteer

Chắc bạn đang nghĩ. nếu tôi có thể hiển thị JavaScript bằng ScraperAPI, tại sao tôi lại cần triển khai Puppeteer?

lý do rất đơn giản. ScraperAPI sẽ thực thi JavaScript cần thiết để tải trang. Tuy nhiên, nếu bạn cần tương tác với trang [như cuộn hoặc nhấp vào nút], bạn sẽ cần sử dụng trình duyệt không đầu của riêng mình – trong trường hợp này là Puppeteer

Đối với ví dụ này, chúng tôi sẽ thêm đoạn mã sau để đặt cấu hình proxy của mình, ngay sau khi khai báo các phụ thuộc của chúng tôi

const cheerio = require['cheerio']; const puppeteer = require['puppeteer']; PROXY_USERNAME = 'scraperapi'; PROXY_PASSWORD = 'API_KEY'; // { const browser = await puppeteer.launch[{ ignoreHTTPSErrors: true, args: [ '--proxy-server=//${PROXY_SERVER}:${PROXY_SERVER_PORT}' ] }]; const page = await browser.newPage[]; await page.authenticate[{ username: PROXY_USERNAME, password: PROXY_PASSWORD, }];

Sau khi cập nhật mã của bạn, nó sẽ trông như thế này

const axios = require['axios']; const cheerio = require['cheerio'] const url = '//www.turmerry.com/collections/organic-cotton-sheet-sets/products/percale-natural-color-organic-sheet-sets'; axios[url] .then[response => { const html = response.data; const $ = cheerio.load[html] const salePrice = $['.sale-price'].text[] console.log[salePrice]; }] .catch[console.error];

0

Và thế là xong, API của bạn đã sẵn sàng để sử dụng

Để tận dụng tối đa tài khoản của mình, bạn có thể làm theo bảng cheat ScraperAPI này. Ở đó, bạn sẽ tìm thấy các phương pháp hay nhất để quét web bằng API của chúng tôi cùng với một số thách thức chính mà bạn sẽ gặp phải chi tiết hơn

Ngoài ra, hãy lưu tích hợp nghệ sĩ múa rối này với mã mẫu ScraperAPI để theo dõi mỗi khi bạn xây dựng một dự án mới. Nó chắc chắn sẽ cắt giảm một số thời gian mã hóa

Chúng tôi hy vọng bạn thích hướng dẫn này và bạn đã học được một hoặc hai điều từ nó. Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại liên hệ với nhóm hỗ trợ của chúng tôi, họ sẽ sẵn lòng trợ giúp

hạnh phúc cạo

Thông tin về các Tác giả

Zoltan Bettenbuk

Zoltan Bettenbuk là CTO của ScraperAPI - giúp hàng nghìn công ty truy cập vào dữ liệu họ cần. Anh ấy là một chuyên gia nổi tiếng về xử lý dữ liệu và quét web. Với hơn 15 năm kinh nghiệm trong lĩnh vực phát triển phần mềm, quản lý sản phẩm và lãnh đạo, Zoltan thường xuyên công bố những hiểu biết của mình trên blog của chúng tôi cũng như trên Twitter và LinkedIn

Mục lục

Những bài viết liên quan

Giá cạo web. Lựa chọn giải pháp phù hợp

Khi lượng dữ liệu toàn cầu được tạo ra đạt con số khổng lồ 2. 5 triệu byte mỗi ngày, việc quét web đã trở nên không thể thiếu đối với bất kỳ doanh nghiệp nào muốn

đọc bài viết

Ngày 9 tháng 1 năm 2023

Cách ẩn địa chỉ IP của bạn để quét web

Scrapers điều hướng internet theo cách chúng tôi làm thông qua các trình duyệt của chúng tôi. Khi chúng tôi cung cấp một URL cho trình quét của mình, nó sẽ gửi một yêu cầu HTTP với

đọc bài viết

Ngày 15 tháng 12 năm 2022

Cách cạo dữ liệu quảng cáo Google của đối thủ cạnh tranh để cải thiện chính bạn

Quảng cáo trả tiền [PPC] là một không gian cạnh tranh, đòi hỏi các chiến thuật thông minh để thành công. Khi kênh quảng cáo này trưởng thành và chi phí quảng cáo tiếp tục tăng đáng kể,

JavaScript có tốt hơn Python để quét web không?

so sánh JavaScript. Python được sử dụng rộng rãi hơn cho mục đích quét web do tính phổ biến và dễ sử dụng của thư viện Beautiful Soup, giúp việc điều hướng và tìm kiếm thông qua các cây phân tích cú pháp trở nên đơn giản. Tuy nhiên, JavaScript có thể là một lựa chọn tốt hơn cho những lập trình viên đã có kinh nghiệm với ngôn ngữ lập trình này

Ngôn ngữ tốt nhất để quét web là gì?

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. Ngôn ngữ hướng đối tượng này đi kèm với một nhóm thư viện khổng lồ, bao gồm các mô-đun dành cho máy học.

Scrapy có hoạt động với JavaScript không?

Thực thi JavaScript trong Scrapy với ScrapingBee . ScrapingBee sử dụng phiên bản Chrome headless mới nhất và hỗ trợ tập lệnh JavaScript . Giống như hai phần mềm trung gian khác, bạn chỉ cần cài đặt phần mềm trung gian scrapy-scrapingbee với pip.

Chủ Đề