Mục lục:

Scraping Data với ESP8266 / ESP32: 7 bước
Scraping Data với ESP8266 / ESP32: 7 bước

Video: Scraping Data với ESP8266 / ESP32: 7 bước

Video: Scraping Data với ESP8266 / ESP32: 7 bước
Video: [Flutter ESP8266] #1. Gửi và nhận dữ liệu đến ESP8266 (NodeMCU) bằng websocket 2024, Tháng mười một
Anonim
Scraping Data với ESP8266 / ESP32
Scraping Data với ESP8266 / ESP32
Scraping Data với ESP8266 / ESP32
Scraping Data với ESP8266 / ESP32

Bạn đã bao giờ muốn lấy dữ liệu cho các dự án Arduino của mình, nhưng không có API công khai cho nó? Hoặc trong các trường hợp như API Instagram, nơi quá trình thiết lập không thuận tiện cho lắm?

Trong Tài liệu hướng dẫn này, chúng ta sẽ xem xét 2 tùy chọn khác nhau để thu thập dữ liệu từ một trang web cho các dự án ESP8266 hoặc ESP32 của bạn.

Bước 1: Xem Video

Image
Image

Tôi đã làm một video bao gồm những điều tương tự như hướng dẫn này, vì vậy nếu bạn quan tâm, xin vui lòng xem nó!

Bước 2: Trước khi bắt đầu

Trước khi chúng ta bắt đầu
Trước khi chúng ta bắt đầu
Trước khi chúng ta bắt đầu
Trước khi chúng ta bắt đầu

Xin lưu ý rằng dữ liệu tôi sẽ nói về việc cạo là dữ liệu công khai và không yêu cầu bất kỳ xác thực nào. Ví dụ: chẳng hạn, số người đăng ký YouTube chính xác của tôi chỉ khả dụng với tôi bên trong Creator Studio, vì vậy thiết bị sẽ phải đưa ra yêu cầu đã được xác thực là tôi để tải nó. Những loại yêu cầu này sẽ nằm ngoài phạm vi của video này. Một bài kiểm tra nhanh để kiểm tra xem nó có bị che phủ không là thử tải trang trong cửa sổ ẩn danh vì điều đó sẽ không tự động đăng nhập bạn vào bất kỳ trang web nào.

Đối với các kỹ thuật được đề cập trong Tài liệu hướng dẫn này, chúng tôi sẽ phải sử dụng một số công cụ dành cho nhà phát triển có sẵn trong trình duyệt. Tôi sẽ giới thiệu chúng với Firefox, nhưng tôi biết chắc chắn Chrome có các công cụ tương tự và tôi chắc chắn rằng các trình duyệt khác cũng có chúng.

Bước 3: API không công khai (Spoiler: Huấn luyện viên có một!)

API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)
API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)
API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)
API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)
API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)
API không công khai (Spoiler: Các tài liệu hướng dẫn có một!)

Cách đầu tiên chúng ta sẽ xem xét là sử dụng một API không công khai. Điều này sẽ không phải lúc nào cũng có sẵn, nhưng nếu có thì đây chắc chắn là phương pháp bạn nên sử dụng. Những gì tôi đang kêu gọi một “API ngoài công lập” về cơ bản là nơi mà một trang web đang sử dụng một API unadvertised trên trang web của họ đằng sau hậu trường để lấy dữ liệu, chúng tôi đang tìm kiếm để có được.

Có một số lý do tại sao đây sẽ là tùy chọn ưu tiên để sử dụng.

  1. Ưu điểm lớn nhất là nó không có khả năng thay đổi thường xuyên như một trang web, nếu bạn trích xuất dữ liệu trực tiếp từ các mã HTML của trang web, mỗi khi họ thực hiện thay đổi cho trang web, phân tích cú pháp của bạn có thể phá vỡ.
  2. Nó thường hiệu quả hơn về dữ liệu. Khi bạn đang tìm kiếm một trang web, về cơ bản, bạn đang tải xuống toàn bộ trang HTML để trích xuất các phần thông tin từ nó, các API sẽ chỉ trả về các điểm dữ liệu, vì vậy thông thường sẽ là các yêu cầu nhỏ hơn nhiều.
  3. Nó thường dễ dàng hơn để phân tích cú pháp. Thông thường các API trả về dữ liệu ở định dạng JSON, dễ phân tích cú pháp, điều này đặc biệt đúng nếu bạn đang trích xuất nhiều phần dữ liệu.

Trước tiên, chúng tôi phải tìm hiểu xem trang web có sử dụng thiết lập như thế này hay không. Manh mối lớn nhất là liệu trang web có cập nhật giá trị theo thời gian thực như trên Kickstarter hay không, nhưng ngay cả khi không có thì vẫn có hy vọng rằng nó có thể sử dụng thiết lập này. Người hướng dẫn sử dụng một API không công khai để tìm nạp một số dữ liệu cho trang web của họ mặc dù nó không làm mới trong thời gian thực.

Để kiểm tra xem trang web có đang sử dụng thiết lập này hay không, hãy nhập chế độ nhà phát triển của trình duyệt của bạn, tôi thấy cách dễ nhất để thực hiện việc này là nhấp chuột phải vào trang và chọn “kiểm tra phần tử”.

Sau đó bạn sẽ muốn đi đến tab mạng, điều này sẽ hiển thị yêu cầu các trang web làm cho ở chế độ nền, lưu ý rằng bạn có thể cần phải tải lại trang sau khi mở tab này vì nó sẽ chỉ hiển thị yêu cầu làm từ giờ trở đi.

Bạn thường muốn tìm những cái có kiểu “json”. Có thể có rất nhiều yêu cầu ở đây, vì vậy nó có thể hữu ích khi sắp xếp theo loại. Bạn có thể thấy điều rất rõ ràng trên trang chiến dịch kickstarter rằng nó đang sử dụng thiết lập này vì bạn có thể thấy các yêu cầu liên tục được gửi đến điểm cuối “stats.json”. Trên trang của tác giả hướng dẫn (ví dụ: của tôi là "https://www.instructables.com/member/witnessmenow/"), họ không đưa ra yêu cầu liên tục, nhưng bạn có thể thấy ẩn giữa những người khác một yêu cầu đối với điểm cuối “showAuthorStats”.

Để tìm hiểu thêm thông tin về yêu cầu này, bạn có thể nhấp vào nó. Bạn sẽ có thể nhận được tất cả thông tin bạn cần từ đây để tái tạo yêu cầu. Nhưng trước khi làm điều đó, trước tiên bạn muốn kiểm tra lại xem nó có dữ liệu bạn muốn hay không. Nhấp vào tab phản hồi và xem dữ liệu có ở đó không.

Nếu nó chứa dữ liệu bạn cần, bạn đã sẵn sàng! Sau đó, bạn có thể sử dụng các phương pháp tương tự đã thảo luận trong video trước của tôi về kết nối với API. Phiên bản ngắn gọn của điều đó là đảm bảo yêu cầu hoạt động như mong đợi trên một công cụ như Postman trước và sau đó sử dụng dự án ví dụ này để kiểm tra xem nó có hoạt động trên thiết bị của bạn hay không.

Để phân tích cú pháp dữ liệu JSON, tôi khuyên bạn nên sử dụng ArudinoJSON trong hầu hết các trường hợp, nếu đây là điều bạn muốn được hướng dẫn, hãy cho tôi biết!

Bước 4: Thu thập dữ liệu trực tiếp

Scraping Data trực tiếp
Scraping Data trực tiếp
Scraping Data trực tiếp
Scraping Data trực tiếp
Scraping Data trực tiếp
Scraping Data trực tiếp

Tiếp theo, chúng ta sẽ xem xét việc thu thập dữ liệu trực tiếp từ trang web, đây là yêu cầu trang web đầy đủ trên thiết bị và phân tích dữ liệu mà chúng ta muốn ra. Tôi đã đề cập đến những ưu điểm của API không công khai so với phương pháp này, nhưng đôi khi cần phải có!

Một điều quan trọng cần lưu ý ở đây, nếu bạn đã quen với việc phát triển web, bạn có thể quen với việc sử dụng tính năng phần tử kiểm tra để tìm hiểu thông tin về một phần tử cụ thể và cách cấu trúc của phần tử đó. Điều này nên tránh đối với phương pháp này, vì các trang web hiện đại thường được thay đổi động bằng cách sử dụng Javascript, điều này sẽ không xảy ra trên thiết bị của bạn. Mã HTML có sẵn trên thiết bị của bạn sẽ chỉ là trang web gốc được tải xuống. Một ví dụ điển hình của việc này là trang TeamTrees, hiện tại bắt đầu đếm hiến như 0 và nhận được nạp vào trang sau với hình ảnh động này, nhưng không giống như hai ví dụ chúng ta đã thấy trước đây, nó không tải dữ liệu ở chế độ nền, vì vậy dữ liệu chính xác phải ở một nơi khác.

Để xem mã trang web gốc, bạn có thể nhấp chuột phải vào trang và chọn “Xem nguồn”. Sau đó, bạn muốn tìm kiếm dữ liệu cụ thể mà bạn muốn, vì vậy trong ví dụ TeamTrees khi chúng tôi tìm kiếm số lượng quyên góp hiện tại, chúng tôi có thể thấy số lượng thực tế được lưu trữ trong thuộc tính data-count của phần tử count, đây là nơi chúng tôi cần loại bỏ dữ liệu từ.

Bạn cần tìm một chuỗi tìm kiếm dẫn bạn đến dữ liệu của mình, Tìm ra điều này trước khi mã hóa thiết bị sẽ dễ dàng hơn nhiều. Đối với ví dụ này, tìm kiếm “data-count \””mang đến cho tôi dữ liệu mà chúng tôi muốn, rất hoàn hảo. Chúng tôi không cần phải lo lắng rằng nó cũng khớp ở những vị trí khác trong trang, vì nó sẽ đạt vị trí đầu tiên trước tiên. Nếu bạn cần phải đánh con thứ 3, bạn có thể lập trình nó để bỏ qua 2 con đầu tiên mà bạn đã đánh.

Nếu chúng ta xem xét ví dụ TeamTrees, giống như trước đây chúng ta đã bỏ qua các tiêu đề phản hồi và bây giờ đang xem phần nội dung của phản hồi (chính là trang web). Những gì nhận lại từ khách hàng là một luồng dữ liệu. Chúng tôi không quan tâm đến bất kỳ điều gì liên quan đến truy vấn tìm kiếm của mình, vì vậy chúng tôi thực hiện client.find. Nếu nó tìm thấy truy vấn tìm kiếm, nó sẽ trả về true và nó sẽ chuyển luồng đến cuối truy vấn. Thứ tiếp theo có sẵn từ luồng sẽ là dữ liệu mà chúng tôi đang tìm kiếm, nhưng trong trường hợp này, chúng tôi không chắc dữ liệu sẽ có trong bao lâu, nhưng chúng tôi biết đó là tất cả thông tin giữa vị trí hiện tại của chúng tôi trong luồng và dấu phẩy đảo ngược tiếp theo. Chúng ta có thể đạt được điều này bằng cách sử dụng “client.readBytesUntil” để thực hiện những gì nó nói, nó đọc các byte vào bộ đệm cho đến khi truy vấn được chỉ định. Chỉ cần đảm bảo rằng bộ đệm bạn đang đọc đủ lớn để chứa tất cả dữ liệu, tôi nghĩ rằng chúng ta khá an toàn ở đây với 32!

Nếu bạn có tất cả dữ liệu mình cần, thì bạn không cần đọc dữ liệu nữa. Tôi đã không đóng kết nối ở đây vì nó dường như không gây ra vấn đề trên ESP8266, nó dường như để gây ra vấn đề với các ESP32, vì vậy tôi đã thêm một client.stop (). Thành thật mà nói, tôi không chắc tại sao mình lại đưa nó lên đầu phương pháp, tôi nghĩ sẽ hợp lý hơn nếu bạn đóng nó khi bạn có dữ liệu mình muốn.

Bước 5: Thu thập dữ liệu bằng máy chủ bên ngoài:

Thu thập dữ liệu bằng máy chủ bên ngoài
Thu thập dữ liệu bằng máy chủ bên ngoài
Thu thập dữ liệu bằng máy chủ bên ngoài
Thu thập dữ liệu bằng máy chủ bên ngoài

Chỉ là một chủ đề khác để đề cập, có nhiều công cụ tốt hơn để phân tích cú pháp trên các môi trường dựa trên máy tính thông thường như NodeJS hơn là trên bộ điều khiển vi mô, vì vậy, đôi khi có thể hợp lý khi tạo một dịch vụ tìm nạp dữ liệu từ một trang web và cung cấp một cách đơn giản hơn điểm cuối cho ESP8266 hoặc ESP32 của bạn. Một ví dụ về điều này là quét trang CrowdSupply để biết số lượng TinyPICO đã được bán. Nó có thể thể thực hiện được để đạt được nó trực tiếp trên một ESP8266 hoặc ESP32, nhưng vì nó đã được phân tích nhiều điểm dữ liệu khác nhau trên các yếu tố khác nhau, vì vậy nó có thể đã bị phức tạp.

Tôi đã kết thúc việc tạo một dự án NodeJS và phân tích cú pháp dữ liệu bằng cách sử dụng một thư viện có tên là cheerio và nó hoạt động rất tốt. Tôi đã lưu trữ dự án này trên máy chủ đám mây mà tôi đã có, nhưng bạn có thể chạy loại dự án này trên pi nếu bạn chưa có thiết lập tương tự.

Bước 6: Giới hạn sử dụng

Giới hạn sử dụng
Giới hạn sử dụng

Một điều có thể ảnh hưởng đến tất cả các phương pháp này là đạt đến giới hạn sử dụng trang web. Trong các API thông thường, nó thường ghi lại khá tốt số lượng yêu cầu bạn có thể thực hiện mỗi phút hoặc mỗi ngày và bạn có thể giới hạn các yêu cầu dự án của mình dựa trên điều này. Khi bạn đang cạo, bạn không biết những giới hạn này là gì, vì vậy bạn có nguy cơ đạt được chúng và có khả năng bị chặn. Tôi không thể đưa ra bất cứ lời khuyên chính xác trên hạn chế nó để bạn ở lại trong cuốn sách tốt của họ, nhưng tôi sẽ nghĩ rằng bất cứ điều gì dưới mỗi phút sẽ là quá thường, ngoại trừ có lẽ những trường hợp như kickstarter nơi họ dường như đưa ra yêu cầu mỗi vài giây mình.

Bước 7: Cảm ơn bạn đã đọc

Hy vọng rằng video này hữu ích nếu bạn quan tâm đến việc phân tích dữ liệu trực tiếp từ các trang web trên ESP8266 hoặc ESP32 của mình. Bạn có câu hỏi nào khác về chủ đề mà tôi chưa đề cập đến không? Vui lòng cho tôi biết trong phần nhận xét bên dưới hoặc tham gia cùng tôi và một loạt nhà sản xuất khác trên máy chủ Discord của tôi, nơi chúng ta có thể thảo luận về chủ đề này hoặc bất kỳ nhà sản xuất nào khác liên quan đến chủ đề mà bạn có, mọi người thực sự hữu ích ở đó vì vậy đó là một nơi tuyệt vời để kết nối ngoài

Tôi cũng muốn gửi lời cảm ơn to lớn đến các Nhà tài trợ Github của tôi, những người đã giúp hỗ trợ những gì tôi làm, tôi thực sự đánh giá cao điều đó. Nếu bạn chưa biết, Github đang đối sánh các khoản tài trợ cho năm đầu tiên, vì vậy nếu bạn thực hiện tài trợ, họ sẽ khớp 100% trong vài tháng tới.

Cảm ơn vì đã đọc!

Đề xuất: