Mục lục:
- Bước 1: Xem Video
- Bước 2: Trước khi bắt đầu
- Bước 3: API không công khai (Spoiler: Huấn luyện viên có một!)
- Bước 4: Thu thập dữ liệu trực tiếp
- Bước 5: Thu thập dữ liệu bằng máy chủ bên ngoài:
- Bước 6: Giới hạn sử dụng
- Bước 7: Cảm ơn bạn đã đọc
Video: Scraping Data với ESP8266 / ESP32: 7 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
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
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
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!)
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.
- Ư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ỡ.
- 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.
- 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
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:
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
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:
Esp8266 dựa trên Boost Converter với giao diện người dùng Blynk tuyệt vời với bộ điều chỉnh phản hồi: 6 bước
Esp8266 dựa trên Boost Converter với giao diện người dùng Blynk tuyệt vời với bộ điều chỉnh phản hồi: Trong dự án này, tôi sẽ chỉ cho bạn một cách hiệu quả và phổ biến cách tăng điện áp DC. Tôi sẽ cho bạn thấy việc xây dựng một bộ chuyển đổi tăng cường có thể dễ dàng như thế nào với sự trợ giúp của Nodemcu. Hãy xây dựng nó. Nó cũng bao gồm một vôn kế trên màn hình và một phản hồi
Chụp và gửi hình ảnh với ESP32-Cam bằng bộ xử lý Wifi ESP8266 WeMos D1 R1 với Uno: 7 bước
Chụp và gửi hình ảnh với ESP32-Cam sử dụng bộ xử lý Wifi ESP8266 WeMos D1 R1 với Uno: Chụp ảnh bằng ESP32-Cam (OV2640) bằng bộ xử lý WiFI ESP8266 WeMos D1 R1 với Uno và gửi đến email, lưu vào Google Drive và gửi đến Whatsapp sử dụng Twilio. Yêu cầu: Bộ xử lý WiFI ESP8266 WeMos D1 R1 với Uno (https: // protosupplies
PWM Với ESP32 - Làm mờ đèn LED với PWM trên ESP 32 Với Arduino IDE: 6 bước
PWM Với ESP32 | Làm mờ LED với PWM trên ESP 32 Với Arduino IDE: Trong hướng dẫn này, chúng ta sẽ thấy cách tạo tín hiệu PWM với ESP32 bằng Arduino IDE & PWM về cơ bản được sử dụng để tạo ra đầu ra tương tự từ bất kỳ MCU nào và đầu ra tương tự có thể là bất kỳ thứ gì trong khoảng từ 0V đến 3,3V (trong trường hợp esp32) & từ
Chỉnh sửa ảnh nhanh chóng và tuyệt vời với Picasa: 10 bước (với ảnh)
Chỉnh sửa ảnh nhanh chóng và tuyệt vời với Picasa: Với một máy ảnh kỹ thuật số tuyệt vời, trách nhiệm lớn là quản lý hàng nghìn bức ảnh. Điều này có thể là một khó khăn, đặc biệt nếu bạn muốn sử dụng chúng để ghi lại một quy trình cho Các tài liệu hướng dẫn. Tôi biết cách sử dụng Photoshop, nhưng thường xuyên hơn là tôi chuyển sang sử dụng G
Vòi rảnh tay hoặc vòi có bàn đạp hoặc vòi tiết kiệm nước: 5 bước
Vòi rảnh tay hoặc vòi có bàn đạp hoặc vòi tiết kiệm nước: Đây là một phương pháp đơn giản và rẻ để chuyển vòi thoát nước thành vòi rảnh tay (hợp vệ sinh). rửa cả hai tay cùng một lúc và tiết kiệm nước