Talaan ng mga Nilalaman:

Pag-scrap ng Data Sa Isang ESP8266 / ESP32: 7 Mga Hakbang
Pag-scrap ng Data Sa Isang ESP8266 / ESP32: 7 Mga Hakbang

Video: Pag-scrap ng Data Sa Isang ESP8266 / ESP32: 7 Mga Hakbang

Video: Pag-scrap ng Data Sa Isang ESP8266 / ESP32: 7 Mga Hakbang
Video: How I Made My Own Smart Speaker Google + Alexa - Under $30 2024, Nobyembre
Anonim
Pag-scrap ng Data Sa isang ESP8266 / ESP32
Pag-scrap ng Data Sa isang ESP8266 / ESP32
Pag-scrap ng Data Sa isang ESP8266 / ESP32
Pag-scrap ng Data Sa isang ESP8266 / ESP32

Nais mo bang makakuha ng data para sa iyong mga proyekto sa Arduino, ngunit walang pampublikong API para dito? O sa mga kaso tulad ng Instagram API kung saan ang proseso ng pag-setup para sa ay hindi masyadong maginhawa?

Sa Instructable na ito titingnan namin ang 2 magkakaibang mga pagpipilian para sa pag-scrap ng data mula sa isang website para sa iyong mga proyekto sa ESP8266 o ESP32.

Hakbang 1: Suriin ang Video

Image
Image

Gumawa ako ng isang video na sumasaklaw sa parehong bagay tulad ng itinuturo sa iyo, kaya kung interesado ka, mangyaring suriin ito!

Hakbang 2: Bago Kami Magsimula

Bago Kami Magsimula
Bago Kami Magsimula
Bago Kami Magsimula
Bago Kami Magsimula

Isang ulo lamang na ang data na sasabihin ko tungkol sa pag-scrape ay nakaharap sa publiko ang data at hindi nangangailangan ng anumang pagpapatotoo. Kaya sabihin halimbawa, ang aking eksaktong bilang ng subscriber ng YouTube ay magagamit lamang sa akin sa loob ng tagalikha studio, kaya't ang aparato ay kailangang gumawa ng isang kahilingan na napatunayan bilang akin upang mai-load ito. Ang mga ganitong uri ng mga kahilingan ay magiging wala sa saklaw para sa video na ito. Ang isang mabilis na pagsubok upang suriin ito ay saklaw ay upang subukang i-load ang pahina sa isang incognito window dahil hindi ka awtomatiko na mag-log in sa anumang mga site.

Para sa mga diskarte na sakop sa Instructable na ito kakailanganin naming gumamit ng ilan sa mga tool ng developer na magagamit sa mga browser. Ipapakita ko ang mga ito sa Firefox, ngunit alam ko para sa tiyak na ang Chrome ay may mga katulad na tool at sigurado akong mayroon din ang iba pang mga browser.

Hakbang 3: Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable Ay May Isa!)

Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)
Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)
Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)
Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)
Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)
Mga Hindi Pampubliko na API (Spoiler: Ang Mga Instructionable ay May Isa!)

Ang unang paraan na titingnan namin ay ang paggamit ng isang hindi pang-publiko na API. Hindi ito laging magagamit, ngunit kung ito ito ay tiyak na ang pamamaraan na dapat mong hangarin na gamitin. Ang tinatawag kong "hindi pang-publiko na API" ay karaniwang kung saan ang isang site ay gumagamit ng isang hindi napansin na API sa kanilang website sa likod ng mga eksena upang makuha ang data na nais naming makuha.

Mayroong ilang mga kadahilanan kung bakit ito ang magiging ginustong pagpipilian na gagamitin.

  1. Ang pinakamalaking kalamangan ay malamang na hindi ito mabago nang madalas tulad ng isang webpage, kung direktang na-scrape mo ang data mula sa web page na HTML, sa tuwing gumawa sila ng pagbabago sa site, maaaring masira ang iyong pag-parse.
  2. Karaniwan itong mas mahusay sa data. Kapag nag-scrape ka ng isang webpage karaniwang nai-download mo ang buong pahina ng HTML upang kumuha ng mga piraso ng impormasyon mula rito, ibabalik lamang ng mga API ang mga puntos ng data upang maging normal na mas maliit ang mga kahilingan.
  3. Kadalasan mas madaling mag-parse. Karaniwan ang mga API ay nagbabalik ng data sa format na JSON na prangka na i-parse, totoo ito lalo na kung kumukuha ka ng maraming mga data.

Una naming alamin kung gumagamit ang webpage ng isang setup na tulad nito. Ang pinakamalaking pahiwatig ay kung ina-update ng site ang halaga sa real-time na katulad nito sa Kickstarter, ngunit kahit na wala pa rin ay may pag-asa pa rin na maaaring magamit nito ang setup. Ang mga tagubilin ay gumagamit ng isang hindi pampubliko na API para sa pagkuha ng ilang data para sa kanilang site kahit na hindi ito nagre-refresh nang real time.

Upang suriin kung ginagamit ng site ang pag-set up na ito, ipasok ang mode ng developer ng iyong browser, nahanap ko ang pinakamadaling paraan ng paggawa nito ay pag-right click sa pahina at piliin ang "inspect element".

Pagkatapos ay gugustuhin mong pumunta sa tab ng network, ipapakita nito ang mga kahilingan sa webpage na ginagawa sa background, tandaan na maaaring kailanganin mong i-reload ang pahina pagkatapos buksan ang tab na ito dahil magpapakita lamang ito ng mga kahilingan na ginawa mula ngayon.

Karaniwan mong nais na hanapin ang mga may uri na "json". Maaaring maraming mga kahilingan dito, kaya't maaaring makatulong na pag-uri-uriin ayon sa uri. Maaari mong makita na napaka halata sa pahina ng kampanya ng kickstarter na ginagamit nito ang pag-set up na ito dahil nakikita mo ang patuloy na mga kahilingan na ginagawa sa isang endpoint na "stats.json". Sa pahina ng mga may-akda ng Instructable (hal. Ang akin ay "https://www.instructables.com/member/witnessmenow/"), hindi sila gumagawa ng pare-pareho na mga kahilingan, ngunit maaari mong makita ang nakatago sa iba pa ng isang kahilingan sa endpoint ng "showAuthorStats".

Upang malaman ang karagdagang impormasyon tungkol sa kahilingang ito, maaari kang mag-click dito. Dapat mong makuha ang lahat ng impormasyong kailangan mo mula dito upang makaya ang kahilingan. Ngunit bago mo gawin iyon nais mong i-double check muna na mayroon itong data na gusto mo. Mag-click, sa tab na tugon at tingnan kung nandoon ang data.

Kung naglalaman ito ng data na kailangan mo, handa ka na! Maaari mo nang magamit ang parehong mga diskarte na tinalakay sa aking nakaraang video tungkol sa pagkonekta sa mga API. Ang maikling bersyon nito ay upang matiyak na gagana ang kahilingan tulad ng inaasahan sa isang tool tulad ng Postman muna at pagkatapos ay gamitin ang halimbawang proyekto na ito upang subukan na gumagana ito sa iyong aparato.

Para sa pag-parse ng data ng JSON inirerekumenda kong gamitin ang ArudinoJSON sa karamihan ng mga sitwasyon, kung ito ay isang bagay na nais mong turuan tungkol sa, ipaalam lamang sa akin!

Hakbang 4: Direktang Pag-scrap ng Data

Direktang Pag-scrap ng Data
Direktang Pag-scrap ng Data
Direktang Pag-scrap ng Data
Direktang Pag-scrap ng Data
Direktang Pag-scrap ng Data
Direktang Pag-scrap ng Data

Susunod na titingnan namin ang pag-scrap ng data nang direkta mula sa webpage, humihiling ito ng buong webpage sa aparato at pag-parse ng data na gusto namin. Nabanggit ko na ang mga kalamangan ng hindi pang-publiko na API na mayroon sa pamamaraang ito, ngunit kung minsan kailangan ng mga kinakailangan!

Isang bagay na mahalagang tandaan dito, kung pamilyar ka sa pag-unlad ng web maaari kang magamit sa paggamit ng tampok na elemento ng inspeksyon upang malaman ang impormasyon tungkol sa isang partikular na elemento at kung paano ito nakabalangkas. Dapat itong iwasan para sa pamamaraang ito, dahil ang mga modernong web page ay karaniwang nabago nang pabago-bago gamit ang Javascript, na hindi mangyayari sa iyong aparato. Ang HTML code na magagamit sa iyong aparato ay magiging orihinal na webpage lamang na na-download. Ang isang magandang halimbawa nito ay ang pahina ng TeamTrees, ang kasalukuyang bilang ng donasyon ay nagsisimula bilang 0 at mai-load sa pahina sa paglaon ng animasyong ito, ngunit hindi katulad ng dalawang halimbawang nakita natin dati, hindi nito na-load ang data sa background, kaya ang tamang data ay dapat nasa ibang lugar.

Upang matingnan ang orihinal na code ng web page maaari kang mag-right click sa pahina at piliin ang "View Source". Nais mong hanapin ang partikular na data na gusto mo, kaya sa halimbawa ng TeamTrees kapag naghahanap kami para sa kasalukuyang bilang ng donasyon, maaari naming makita ang aktwal na bilang na nakaimbak sa pag-aari ng bilang ng data ng bilang ng elemento, ito ay kung saan kailangan nating i-scrape ang data mula sa.

Kailangan mong maghanap ng isang string ng paghahanap na magdadala sa iyo sa iyong data, Mas madaling malaman ito bago mag-coding para sa aparato. Para sa halimbawang ito, ang paghahanap para sa "data-count \" "ay magdadala sa akin ng hanggang sa data na gusto namin, na perpekto. Hindi namin kailangang mag-alala na tumutugma rin ito sa iba pang mga lugar sa pahina, dahil ito ay unang tatama sa tuktok. Kung kailangan mong ma-hit ang ika-3, maaari mo lamang i-program ito upang huwag pansinin ang unang 2 na-hit mo.

Kung titingnan natin ang halimbawa ng TeamTrees, tulad ng dati ay nilaktawan namin ang mga header ng tugon at tinitingnan namin ngayon ang katawan ng tugon (na ang webpage). Ang bumalik sa client ay isang stream ng data. Wala kaming pakialam sa anumang bagay hanggang sa aming query sa paghahanap, kaya gumawa kami ng isang client.find. Kung hahanapin nito ang query sa paghahanap ay magbabalik ito totoo at ililipat nito ang stream sa dulo ng query. Ang susunod na magagamit na bagay mula sa stream ay ang data na aming hinahanap, ngunit sa kasong ito hindi namin sigurado kung gaano katagal ang data, ngunit alam namin na ang lahat ng impormasyon sa pagitan ng aming kasalukuyang lugar sa stream at sa susunod na baligtad na kuwit.. Maaari nating makamit ito sa pamamagitan ng paggamit ng "client.readBytesUntil" na ginagawa kung ano ang sinasabi nito, binabasa nito ang mga byte sa isang buffer hanggang sa maabot nito ang tinukoy na query. Siguraduhin lamang na ang buffer na iyong binabasa ay sapat na malaki upang hawakan ang lahat ng data, sa palagay ko medyo ligtas tayo dito na may 32!

Kung mayroon ka ng lahat ng data na kailangan mo, hindi mo na kailangang basahin ang data. Hindi ko isinara ang koneksyon dito dahil mukhang hindi ito sanhi ng isang problema sa ESP8266, tila nagdulot ito ng mga problema sa ESP32, kaya nagdagdag ako ng isang client.stop (). Upang maging ganap na matapat, hindi ako sigurado kung bakit ko itinaguyod ang tuktok ng pamamaraan, sa palagay ko mas may katuturan upang isara ito kapag mayroon ka ng data na gusto mo.

Hakbang 5: Pag-scrap ng Data Gamit ang isang Panlabas na Server:

Pag-scrap ng Data Gamit ang isang Panlabas na Server
Pag-scrap ng Data Gamit ang isang Panlabas na Server
Pag-scrap ng Data Gamit ang isang Panlabas na Server
Pag-scrap ng Data Gamit ang isang Panlabas na Server

Isa lamang sa iba pang paksang tatalakayin, maraming mga mas mahusay na tool para sa pag-parse sa regular na mga kapaligiran na nakabatay sa computer tulad ng NodeJS kaysa sa isang micro controller, kaya't minsan ay may katuturan na gumawa ng isang serbisyo na kukuha ng data mula sa isang webpage at nagbibigay ng isang mas simple endpoint para sa iyong ESP8266 o ESP32. Ang isang halimbawa nito ay ang pag-scrape ng pahina ng CrowdSupply upang makakuha ng live na bilang ng kung ilang TinyPICO ang naibenta. Maaaring posible na makamit ito nang direkta sa isang ESP8266 o ESP32, ngunit dahil sa pag-parse nito ng maraming magkakaibang mga punto ng data sa maraming magkakaibang elemento, kaya't naging kumplikado ito.

Natapos akong lumikha ng isang proyekto ng NodeJS at na-parse ang data gamit ang isang silid-aklatan na tinatawag na cheerio at ito ay napakahusay. In-host ko ang proyektong ito sa cloud server na mayroon ako, ngunit maaari mong patakbuhin ang ganitong uri ng proyekto sa isang pi kung wala kang katulad ng pag-set up na iyon.

Hakbang 6: Mga Limitasyon sa Paggamit

Mga Limitasyon sa Paggamit
Mga Limitasyon sa Paggamit

Ang isang bagay na maaaring makaapekto sa lahat ng mga pamamaraang ito ay ang pagpindot sa mga limitasyon sa paggamit ng mga site. Sa mga regular na API normal na dokumentado ito kung gaano karaming mga kahilingan ang maaari mong gawin bawat minuto o bawat araw at maaari mong limitahan ang iyong mga kahilingan sa mga proyekto batay dito. Kapag nag-scrape ka, hindi mo alam kung ano ang mga limitasyong ito kaya't mapanganib mo ang pagpindot sa kanila at potensyal na ma-block. Hindi ako makapagbigay ng eksaktong eksaktong payo sa paglilimita dito upang manatili ka sa kanilang magagandang libro, ngunit sa palagay ko ang anumang bagay sa ilalim ng bawat minuto ay magiging napakadalas, maliban sa marahil mga kaso tulad ng kickstarter kung saan tila sila mismo ang humiling ng mga kahilingan.

Hakbang 7: Salamat sa Pagbasa

Inaasahan kong nakatulong ang video na ito kung interesado ka sa pag-parse ng data nang direkta mula sa mga webpage sa iyong ESP8266 o ESP32. Mayroon ka bang ibang mga katanungan sa paksang hindi ko nasasaklaw? Mangyaring ipaalam sa akin sa mga komento sa ibaba, o sumali sa akin at ng maraming iba pang mga tagagawa sa aking server ng Discord, kung saan maaari naming pag-usapan ang paksang ito o anumang iba pang kaugnay na tagagawa na mayroon ka, ang mga tao ay talagang kapaki-pakinabang doon kaya't isang magandang lugar na mag-hang palabas

Nais ko ring magbigay ng isang malaking salamat sa aking mga Sponsor ng Github na tumutulong na suportahan ang aking ginagawa, talagang pinahahalagahan ko ito. Kung hindi mo alam, ang Github ay tumutugma sa mga sponsorship para sa unang taon, kaya kung gumawa ka ng isang sponsorship itutugma nila ito ng 100% sa mga susunod na buwan.

Salamat sa pagbabasa!

Inirerekumendang: