Բովանդակություն:

Տվյալների քերծվածք ESP8266/ESP32: 7 քայլով
Տվյալների քերծվածք ESP8266/ESP32: 7 քայլով

Video: Տվյալների քերծվածք ESP8266/ESP32: 7 քայլով

Video: Տվյալների քերծվածք ESP8266/ESP32: 7 քայլով
Video: Հրազդանի կիրճում կատարված կողոպուտը բացահայտվեց. Ոստիկանության տեսանյութը 2024, Հուլիսի
Anonim
Տվյալների քերծվածք ESP8266/ESP32- ով
Տվյալների քերծվածք ESP8266/ESP32- ով
Տվյալների քերծվածք ESP8266/ESP32- ով
Տվյալների քերծվածք ESP8266/ESP32- ով

Երբևէ ցանկացե՞լ եք տվյալներ ստանալ ձեր Arduino նախագծերի համար, բայց դրա համար հանրային API չկա: Կամ այնպիսի դեպքերում, ինչպիսին է Instagram API- ն, որտեղ տեղադրման գործընթացը շատ հարմար չէ:

Այս Instructable- ում մենք մտադիր ենք դիտել 2 տարբեր տարբերակներ ՝ ձեր ESP8266 կամ ESP32 նախագծերի վեբ կայքից տվյալների քերծման համար:

Քայլ 1: Դիտեք տեսանյութը

Image
Image

Ես պատրաստել եմ մի տեսանյութ, որն ընդգրկում է նույնը, ինչ այս ուսանելի է, այնպես որ, եթե ձեզ հետաքրքրում է, խնդրում ենք ստուգել այն:

Քայլ 2: Նախքան սկսելը

Նախքան Մենք սկսում ենք
Նախքան Մենք սկսում ենք
Նախքան Մենք սկսում ենք
Նախքան Մենք սկսում ենք

Պարզապես նշեք, որ այն տվյալները, որոնց մասին ես խոսելու եմ քերելու մասին, հանրության առջև ծառացած տվյալներ են և չեն պահանջում որևէ վավերացում: Օրինակ, ասեք, որ YouTube- ի իմ բաժանորդների ճշգրիտ թիվը հասանելի է ինձ միայն ստեղծող ստուդիայում, ուստի սարքը պետք է իմ պահանջով վավերացված հարցում կատարի ՝ այն բեռնելու համար: Այս տեսակի հարցումները դուրս կգան այս տեսանյութի համար: Beածկված լինելը ստուգելու արագ փորձն այն է, որ փորձեք էջը բեռնել ինկոգնիտո պատուհանում, քանի որ դա ձեզ ինքնաբերաբար չի մուտք գործի որևէ կայք:

Այս հրահանգում ընդգրկված տեխնիկայի համար մենք ստիպված կլինենք օգտագործել ծրագրավորողի որոշ գործիքներ, որոնք առկա են բրաուզերներում: Ես դրանք կցուցադրեմ Firefox- ով, բայց ես հաստատ գիտեմ, որ Chrome- ն ունի նման գործիքներ, և վստահ եմ, որ դրանք ունեն նաև այլ դիտարկիչներ:

Քայլ 3. Ոչ հանրային API- ներ (Spoiler: Instructables Has One!)

Առաջին ձևը, որին մենք կանդրադառնանք, ոչ հանրային API- ի օգտագործումն է: Սա միշտ չէ, որ հասանելի կլինի, բայց եթե դա այդպես է, դա միանշանակ այն մեթոդն է, որը դուք պետք է նպատակ դնեք օգտագործել: Այն, ինչ ես անվանում եմ «ոչ հրապարակային API», հիմնականում այն է, երբ կայքը կուլիսներում օգտագործում է իրենց կայքում չգովազդված API ՝ բերելու այն տվյալները, որոնք մենք ձգտում ենք ստանալ:

Կան մի քանի պատճառ, թե ինչու է դա լինելու նախընտրելի տարբերակը:

  1. Ամենամեծ առավելությունն այն է, որ քիչ հավանական է, որ այն փոխվի այնքան հաճախ, որքան վեբ էջը, եթե տվյալները ուղղակիորեն ջնջում եք վեբ էջի HTML- ից, ամեն անգամ, երբ նրանք փոփոխություն են կատարում կայքում, ձեր վերլուծությունը կարող է խախտվել:
  2. Սովորաբար դա տվյալների ավելի արդյունավետ է: Երբ վեբ էջ եք քերծում, հիմնականում ներբեռնում եք ամբողջ HTML էջը ՝ դրանից տեղեկություններ քաղելու համար, API- ները կվերադառնան միայն տվյալների կետեր, այնպես որ սովորաբար շատ ավելի փոքր հարցումներ կլինեն:
  3. Սովորաբար ավելի հեշտ է վերլուծել: Սովորաբար API- ները վերադարձնում են տվյալներ JSON ձևաչափով, որն ուղղակիորեն վերլուծելի է, սա հատկապես ճիշտ է, եթե տվյալների մի քանի կտոր եք քաղում:

Նախ պետք է պարզել, արդյոք վեբ էջը օգտագործում է այսպիսի կարգավորում: Ամենամեծ հուշումն այն է, եթե կայքը իրական ժամանակում թարմացնի արժեքը, ինչպես դա անում է Kickstarter- ում, բայց նույնիսկ եթե դա այդպես չէ, դեռ հույս կա, որ կարող է օգտագործել այս կարգավորումը: Instructables- ն օգտագործում է ոչ հանրային API ՝ իրենց կայքի համար որոշ տվյալներ բերելու համար, չնայած այն չի թարմացվում իրական ժամանակում:

Ստուգելու համար, թե արդյոք կայքն օգտագործում է այս կարգավորումը, մուտքագրեք ձեր դիտարկիչի մշակողի ռեժիմը, ես գտնում եմ, որ դա անելու ամենահեշտ ձևը աջ սեղմումն է էջի վրա և ընտրեք «ստուգել տարրը»:

Այնուհետև կցանկանաք գնալ ցանցի ներդիրին, սա կցուցադրի այն հարցումները, որոնք կայքէջը կատարում է հետին պլանում, նշեք, որ այս ներդիրը բացելուց հետո գուցե անհրաժեշտ լինի վերաբեռնել էջը, քանի որ այն այսուհետ կցուցադրի միայն խնդրանքները:

Դուք սովորաբար ցանկանում եք փնտրել «json» տիպով: Այստեղ կարող են լինել շատ խնդրանքներ, ուստի այն կարող է օգնել տեսակավորել ըստ տեսակի: Դուք կարող եք տեսնել, որ kickstarter- ի քարոզարշավի էջում շատ ակնհայտ է, որ այն օգտագործում է այս կարգավորումը, քանի որ կարող եք տեսնել, որ անընդհատ հարցումներն ուղղվում են «stats.json» վերջնակետին: Instructables- ի հեղինակների էջում (օրինակ ՝ իմը ՝ «https://www.instructables.com/member/witnessmenow/»), նրանք մշտական խնդրանքներ չեն ներկայացնում, բայց մյուսների մեջ կարող եք թաքնված տեսնել «ShowAuthorStats» վերջնակետին ուղղված խնդրանքը:

Այս հարցման վերաբերյալ լրացուցիչ տեղեկություններ ստանալու համար կարող եք սեղմել դրա վրա: Դուք պետք է կարողանաք ստանալ այստեղ ձեզ անհրաժեշտ բոլոր տեղեկությունները ՝ հարցումը կրկնօրինակելու համար: Բայց նախքան դա անելը, նախ ուզում եք կրկնակի ստուգել, որ այն ունի ձեր ուզած տվյալները: Կտտացրեք պատասխանի ներդիրին և տեսեք, թե արդյոք տվյալները այնտեղ են:

Եթե այն պարունակում է ձեզ անհրաժեշտ տվյալները, ապա ամեն ինչ պատրաստ է: Այնուհետև կարող եք օգտագործել նույն մոտեցումները, որոնք քննարկվել են իմ նախորդ տեսանյութում ՝ API- ներին միանալու վերաբերյալ: Դրա կարճ տարբերակն է ՝ համոզվել, որ հարցումը սկզբում աշխատում է այնպես, ինչպես սպասվում էր այնպիսի գործիքի վրա, ինչպիսին Փոստատարն է, այնուհետև օգտագործեք այս օրինակի նախագիծը ՝ ձեր սարքում աշխատելու համար:

JSON- ի տվյալները վերլուծելու համար խորհուրդ կտամ օգտագործել ArudinoJSON- ը սցենարների մեծ մասում, եթե դա այն է, ինչին կցանկանայիք ուսանելի լինել, պարզապես ինձ տեղյակ պահեք:

Քայլ 4: Տվյալների ուղղակի ջնջում

Տվյալների ուղղակի ջնջում
Տվյալների ուղղակի ջնջում
Տվյալների ուղղակիորեն ջնջում
Տվյալների ուղղակիորեն ջնջում
Տվյալների ուղղակի ջնջում
Տվյալների ուղղակի ջնջում

Հաջորդը մենք կանդրադառնանք տվյալների քերծմանը անմիջապես վեբ էջից, սա սարքի ամբողջական կայք խնդրելն է և այն տվյալների վերլուծությունը, որոնք մենք ցանկանում ենք: Ես արդեն նշեցի ոչ հանրային API- ի առավելություններն այս մեթոդի նկատմամբ, բայց երբեմն պետք է:

Մի բան, որն այստեղ կարևոր է նշել, եթե վեբ ծրագրին ծանոթ եք, կարող եք սովոր լինել օգտագործել ստուգիչ տարրերի հնարավորությունը ՝ որոշակի տարրի և դրա կառուցվածքի մասին տեղեկություններ գտնելու համար: Այս մոտեցման համար դա պետք է խուսափել, քանի որ ժամանակակից վեբ էջերը սովորաբար դինամիկ կերպով փոխվում են Javascript- ի միջոցով, ինչը չի պատահի ձեր սարքում: Ձեր սարքում առկա HTML կոդը կլինի միայն ներբեռնված սկզբնական էջը: Դրա լավ օրինակ է TeamTrees էջը, նվիրատվությունների ընթացիկ հաշվարկը սկսվում է 0 -ից և հետագայում ներբեռնվում այս անիմացիայի միջոցով էջում, բայց ի տարբերություն նախկինում տեսած երկու օրինակների, այն չի բեռնում տվյալները հետին պլանում, այնպես որ ճիշտ տվյալները պետք է այլ տեղ լինեն:

Վեբ էջի սկզբնական կոդը դիտելու համար կարող եք աջ սեղմել էջի վրա և ընտրել «Դիտել աղբյուրը»: Այնուհետև ցանկանում եք որոնել ձեր ուզած կոնկրետ տվյալները, այնպես որ TeamTrees- ի օրինակում, երբ մենք փնտրում ենք նվիրատվությունների ընթացիկ հաշվարկը, մենք կարող ենք տեսնել, որ իրական թիվը պահվում է հաշվարկի տարրի տվյալների հաշվարկի հատկության մեջ, սա այն է, որտեղ մենք պետք է տվյալները քերել

Դուք պետք է գտնեք որոնման տող, որը ձեզ տանում է դեպի ձեր տվյալները, դա շատ ավելի հեշտ է պարզել ՝ նախքան սարքի կոդավորումը: Այս օրինակի համար «տվյալների հաշվարկ» որոնելը ինձ բերում է մեր ուզած տվյալներին, ինչը կատարյալ է: Մենք կարիք չունենք անհանգստանալու, որ այն համընկնում է նաև էջի այլ վայրերում, քանի որ այն առաջինը կհայտնվի վերևում: Եթե դուք իսկապես կարիք ունեիք հարվածել 3 -րդին, ապա կարող եք պարզապես ծրագրավորել այն `անտեսելու առաջին երկու հարվածները:

Եթե մենք նայենք TeamTrees- ի օրինակին, ինչպես նախկինում, մենք բաց ենք թողնում պատասխանների վերնագրերը և այժմ նայում ենք պատասխանի հիմնականին (որը կայքէջն է): Այն, ինչ գալիս է հաճախորդից, տվյալների հոսքն է: Մինչև մեր որոնման հարցը մեզ ոչինչ չի հետաքրքրում, ուստի մենք հաճախորդ ենք անում: գտեք: Եթե այն գտնի որոնման հարցումը, այն կվերադառնա իրական և այն հոսքը կտեղափոխի հարցման վերջ: Հաջորդ բանը, որը հասանելի կլինի հոսքից, կլինեն այն տվյալները, որոնք մենք փնտրում ենք, բայց այս դեպքում մենք վստահ չենք, թե որքան երկար կլինեն տվյալները, բայց մենք գիտենք, որ դրանք բոլոր տեղեկություններն են հոսքի մեր ընթացիկ տեղի և հաջորդ շրջված ստորակետի միջև:. Մենք կարող ենք հասնել դրան ՝ օգտագործելով «client.readBytesUntil» - ը, որն անում է այն, ինչ ասում է, այն կարդում է բայթերը բուֆերում, մինչև չհասնի նշված հարցմանը: Պարզապես համոզվեք, որ բուֆերը, որի մեջ կարդում եք, բավականաչափ մեծ է ՝ բոլոր տվյալները պահելու համար, կարծում եմ, որ այստեղ մենք բավականին ապահով ենք 32 -ով:

Եթե ունեք բոլոր անհրաժեշտ տվյալները, ապա այլևս կարիք չկա կարդալ տվյալներ: Ես այստեղ կապը չփակեցի, քանի որ այն կարծես խնդիր չէր առաջացնում ESP8266- ում, այն կարծես խնդիրներ էր առաջացնում ESP32- ի հետ, ուստի ավելացրեցի client.stop (): Completelyիշտն ասած, ես վստահ չեմ, թե ինչու եմ դա դրել մեթոդի վերևում, կարծում եմ, որ ավելի իմաստալից կլինի փակել այն, երբ կունենաք ձեր ուզած տվյալները:

Քայլ 5. Տվյալների քերծվածք ՝ օգտագործելով արտաքին սերվեր

Արտաքին սերվերի միջոցով տվյալների քերծվածք
Արտաքին սերվերի միջոցով տվյալների քերծվածք
Արտաքին սերվերի միջոցով տվյալների քերծվածք
Արտաքին սերվերի միջոցով տվյալների քերծվածք

Ուղղակի մեկ այլ թեմայի անդրադառնալու համար կան շատ ավելի լավ գործիքներ սովորական համակարգչային միջավայրում վերլուծելու համար, օրինակ ՝ NodeJS- ը, քան միկրոկարգավորիչը, ուստի երբեմն իմաստ ունի ծառայություն մատուցել, որը վերցնում է տվյալները վեբ էջից և ապահովում է ավելի պարզ վերջնակետ ձեր ESP8266 կամ ESP32 համար: Դրա օրինակներից մեկը CrowdSupply էջը քերելն էր ՝ կենդանի հաշվարկ ստանալու համար, թե քանի TinyPICO է վաճառվել: Հնարավոր է, որ այն հնարավոր լիներ ուղղակիորեն հասնել ESP8266 կամ ESP32- ի վրա, բայց քանի որ այն վերլուծում էր մի քանի տարբեր տվյալների կետեր մի քանի տարբեր տարրերի վրա, այնպես որ դա բարդ կլիներ:

Ես ավարտեցի NodeJS նախագիծը և վերլուծեցի տվյալները ՝ օգտագործելով cheerio կոչվող գրադարանը, և այն շատ լավ ստացվեց: Ես այս նախագիծը հյուրընկալեցի արդեն իմ ունեցած ամպային սերվերի վրա, բայց դուք կարող եք այսպիսի նախագիծը գործարկել pi- ի վրա, եթե չունենաք նման կարգավորման բան:

Քայլ 6: Օգտագործման սահմանափակումներ

Օգտագործման սահմանափակումներ
Օգտագործման սահմանափակումներ

Մի բան, որը կարող է պոտենցիալ ազդել այս բոլոր մոտեցումների վրա, կայքերի օգտագործման սահմանների վրա հարվածելն է: Սովորական API- ներում սովորաբար բավականին լավ փաստագրված է, թե քանի խնդրանք կարող եք կատարել րոպեում կամ օրական, և դրա հիման վրա կարող եք սահմանափակել ձեր նախագծերի հարցումները: Երբ ջնջում եք, չգիտեք, թե որոնք են այս սահմանները, այնպես որ դուք ռիսկի եք դիմում դրանց և հնարավոր է արգելափակվել: Ես չեմ կարող որևէ ճշգրիտ խորհուրդ տալ այն սահմանափակելու վերաբերյալ, որպեսզի դուք մնաք նրանց լավ գրքերում, բայց ես կարծում էի, որ ամեն րոպեի տակ ամեն ինչ շատ հաճախ կլինի, բացառությամբ այն դեպքերի, ինչպիսին kickstarter- ն է, երբ նրանք, կարծես, իրենք են խնդրանքները ներկայացնում ամեն մի վայրկյանը մեկ:

Քայլ 7: Շնորհակալություն կարդալու համար:

Հուսանք, որ այս տեսանյութը կօգնի ձեզ, եթե հետաքրքրված եք տվյալների վերլուծությամբ անմիջապես ձեր ESP8266 կամ ESP32 վեբ էջերից: Ունե՞ք այլ հարցեր թեմայի վերաբերյալ, որոնք ես չեմ լուսաբանել: Խնդրում եմ ինձ տեղյակ պահեք ստորև բերված մեկնաբանություններում կամ միացեք ինձ և իմ Discord սերվերի մի շարք այլ արտադրողների, որտեղ մենք կարող ենք քննարկել այս թեման կամ ձեր ստեղծած ցանկացած այլ թեմա, մարդիկ իսկապես օգտակար են այնտեղ, այնպես որ դա կախելու հիանալի վայր է: դուրս

Նաև կցանկանայի մեծ շնորհակալություն հայտնել իմ Github հովանավորներին, ովքեր օգնում են աջակցել այն, ինչ ես անում եմ: Ես իսկապես գնահատում եմ դա: Եթե չգիտեք, Github- ը հովանավորում է առաջին տարվա հովանավորությունները, ուստի եթե հովանավորչություն անեք, դրանք 100% -ով կհամապատասխանեն հաջորդ մի քանի ամիսների ընթացքում:

Շնորհակալություն կարդալու համար:

Խորհուրդ ենք տալիս: