Վեբ գրություն Java-ով 2023 թ

Դուք գտել եք լավ կայք և այժմ ցանկանում եք տվյալներ հանել վեբ էջից Excel-ի համար: Ինչպե՞ս դա կանեիր: Copy-past-ը այնքան խաղողի բերքահավաք է, հատկապես համացանցում առկա հետաքրքիր վեբ քերիչ գործիքներով:

Web scraping-ը կայքերից տվյալների ավտոմատ արդյունահանման գործընթաց է: Java-ն այն լեզուներից մեկն է, որն օգտագործվում է վեբ քերծող API-ներ ստեղծելու համար: Դուք կարող եք Java-ն օգտագործել՝ վեբ քերելու բարդ առաջադրանքները լուծելու, մեծ քանակությամբ տվյալների մշակման և վեբ քերելու հատուկ հավելվածներ ստեղծելու համար:

Այս java վեբ քերելու ձեռնարկում մենք կտեսնենք, թե ինչպես կարելի է օգտագործել Java-ն վեբ էջերը հեշտությամբ քերելու համար՝ օգտագործելով հանրաճանաչ Jsoup գրադարանը և այլ կարևոր գործիքներ: Այսպիսով, վերցրեք ձեր սիրած տեքստային խմբագրիչը, գործարկեք ձեր JVM-ը և եկեք սկսենք:


Քաղեք տեքստ ցանկացած վեբ էջից ընդամենը մեկ սեղմումով: Անցեք Nanonets կայքի քերիչ, ավելացրեք URL-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:

Nanonets կայքի քերիչ


Ինչու՞ օգտագործել Java-ն վեբ քերելու համար:

Java-ն լավ ընտրություն է վեբ գրության համար հետևյալ պատճառներով.

  • Այն բազմակողմանի է և ունի մեծ թվով վեբ քերիչ գրադարաններ և շրջանակներ, որոնք հեշտացնում են դրա օգտագործումը:
  • Java-ն կարող է կարգավորել հատուկ վեբ քերիչ առաջադրանքները ավելի բարդությամբ և ավելի մեծ ավտոմատացում առաջարկել այլ լեզուների համեմատ:
  • Java-ն ուժեղ աջակցություն ունի բազմաթելերի համար: Սա թույլ է տալիս միաժամանակ քերել բազմաթիվ վեբ էջեր:
  • Java-ն ունի տվյալների վերլուծության և մշակման մեծ աջակցություն, ինչը շատ կարևոր է տվյալների մեծ հավաքածուների հետ աշխատելու համար:

Որոշ բաներ, որոնք պետք է հիշել վեբ քերծման համար Java-ի օգտագործման ժամանակ.

  • Օգտագործեք Jsoup կամ Selenium վեբ քերիչ գրադարաններ՝ քերելու գործընթացը պարզեցնելու համար:
  • Օգտագործեք հզոր պրոքսի սերվեր կամ պտտեք IP հասցեները՝ արգելափակումից խուսափելու համար:
  • Օգտագործեք ընդլայնելի ճարտարապետություն, որը կարող է մշակել մեծ ծավալի տվյալներ և հեշտ է պահպանել ժամանակի ընթացքում:

Ինչպե՞ս քերել կայքի տվյալները Java-ի միջոցով:

  • Քայլ 1. Ստեղծեք միջավայրը
  • Քայլ 2. Ստուգեք էջը, որը ցանկանում եք քերել
  • Քայլ 3. Ուղարկեք HTTP հարցում և քերեք HTML-ը
  • Քայլ 4. Հատուկ հատվածների արդյունահանում
  • Քայլ 5. Արտահանել տվյալները CSV:

Քայլ 1. Ստեղծեք միջավայրը

Սկսելու համար ստեղծեք նոր նախագիծ և ներմուծեք պահանջվող Java գրադարանները.

  • Jsoup: Հիանալի գրադարան HTML-ի վերլուծության և կայքերից տվյալներ հանելու համար:
  • Apache Commons Lang: Տրամադրում է կոմունալ ծառայությունների ամբողջական փաթեթ՝ տողերի, զանգվածների և այլ սովորական տվյալների տեսակների հետ աշխատելու համար:

Կախվածությունները կառավարելու համար կարող եք օգտագործել Maven-ը կամ Gradle-ը: Ահա թե ինչպես կարող եք ավելացնել կախվածություններ Maven-ի միջոցով

<dependencies>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.14.3</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version>
</dependency>
</dependencies>

Քայլ 2. Ստուգեք էջը, որը ցանկանում եք քերել

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

Քայլ 3. ուղարկել HTTP հարցում

Դուք պետք է HTTP հարցում ուղարկեք սերվերին՝ վեբ էջից տվյալները քերելու համար: Օգտագործեք Java HttpURLConnection դասը՝ HTTP ուղարկելու հարցումներ միացնելու համար:

Ահա թե ինչպես դա անել.

String url = "https://www.example.com";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
// optional request header
con.setRequestProperty("User-Agent", "Mozilla/5.0");
int responseCode = con.getResponseCode();
System.out.println("Response code: " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
String html = response.toString();

Ի՞նչ է կատարվում կոդում։

Վերևի կոդում մենք ստեղծում ենք նոր URL օբյեկտ: Եվ մենք փորձում ենք կապ բացել իր սերվերի հետ՝ օգտագործելով HttpURLConnection: Մենք ներառել ենք մեր նույնացուցիչը որպես Mozilla Firefox: Ի վերջո, մենք կարդացինք ստացված պատասխանը սերվերից՝ օգտագործելով BufferedReader: Մենք յուրաքանչյուր մուտքային տող կցում ենք StringBuilder-ին՝ այն ընթեռնելի տողի վերածելու համար:

Քայլ 4. Վերլուծել HTML փաստաթուղթը

Այս քայլում մենք կվերլուծենք HTML փաստաթուղթը՝ օգտագործելով JSoup: Մենք կարող ենք ընտրել վեբ էջի այն տարրերը, որոնք ցանկանում ենք հանել՝ օգտագործելով պիտակի անունը, դասը կամ ID-ն և անցնելով DOM ծառը:

Ահա Jsoup-ն օգտագործելու կոդը՝ HTML-ը վերլուծելու համար:

Document doc = Jsoup.parse(html);
Elements links = doc.select("a[href]");
for (Element link : links) {
String href = link.attr("href");
System.out.println(href);
}

Այս կոդի հատվածում մենք նախ ստեղծում ենք նոր Jsoup Document օբյեկտ HTML տողից: Այնուհետև մենք օգտագործում ենք ընտրության մեթոդը՝ էջի բոլոր հղումներն իրենց href հատկանիշով ընտրելու համար: Մենք կրկնում ենք հղումների վրա և հանում href հատկանիշի արժեքը՝ օգտագործելով attr մեթոդը:

Քայլ 5. Պահպանեք տվյալները CSV-ում

Երբ մենք հանենք մեզ հետաքրքրող տվյալները, մենք կարող ենք դրանք պահել ֆայլում կամ տվյալների բազայում՝ հետագա վերլուծության համար: Այս օրինակում մենք կպահենք CSV ֆայլի հղումները՝ օգտագործելով Apache Commons CSV գրադարանը:

Writer writer = Files.newBufferedWriter(Paths.get("links.csv"));
CSVPrinter csvPrinter = new CSVPrinter(writer, CSVFormat.DEFAULT);

Քաղեք տեքստ ցանկացած վեբ էջից ընդամենը մեկ սեղմումով: Անցեք Nanonets կայքի քերիչ, ավելացրեք URL-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:

Nanonets կայքի քերիչ


Որո՞նք են Java-ի օգտագործման առավելությունները վեբ քերելու համար:

  • Հզոր գրադարաններ. Java-ն առաջարկում է մի քանի հզոր գրադարաններ, ինչպիսիք են JSoup-ը և HtmlUnit-ը, որոնք հեշտացնում են վեբ քերման գործընթացը և դարձնում այն ​​ավելի արդյունավետ: Այս գրադարանները տրամադրում են հեշտ օգտագործման API՝ HTML-ի վերլուծության, ցանցային հարցումներ կատարելու և JavaScript-ի, թխուկների և AJAX-ի հետ աշխատելու համար:
  • Բազմապլատֆորմների համատեղելիություն. Java-ն հարթակից անկախ լեզու է, որն աշխատում է տարբեր օպերացիոն համակարգերի և ճարտարապետության վրա: Այս համատեղելիությունը Java-ին դարձնում է բազմակողմանի ընտրություն վեբ քերիչ առաջադրանքների համար, քանի որ ձեր կոդը հեշտությամբ կարող է գործարկվել և տեղակայվել տարբեր հարթակներում:
  • Գերազանց կատարում. Java-ն հայտնի է իր կատարողականությամբ, ինչը հատկապես կարևոր է վեբ քերծման լայնածավալ առաջադրանքներ կատարելիս: Java-ի ճիշտ ժամանակին (JIT) կոմպիլյացիան և աղբի հավաքումը երաշխավորում են, որ ձեր վեբ քերծող կոդը արդյունավետ գործարկվի, նույնիսկ երբ գործ ունեք մեծ քանակությամբ տվյալների կամ բարդ կայքերի հետ:
  • Ուժեղ մուտքագրում և սխալների ստուգում. Java-ի ուժեղ մուտքագրման և կոմպիլյացիայի ժամանակի սխալների ստուգումը կարող է օգնել կանխել վրիպակները և գործարկման ժամանակի սխալները ձեր վեբ գրագրման կոդում: Այս հատկությունը հեշտացնում է հնարավոր խնդիրները հայտնաբերելը նախքան ձեր քերիչը տեղադրելը, ինչը հանգեցնում է ավելի կայուն և հուսալի կոդի:
  • Մեծ համայնք և էկոհամակարգ. Java-ն ունի ծրագրավորողների հսկայական համայնք և գրադարանների և շրջանակների հարուստ էկոհամակարգ, ինչը նշանակում է, որ դուք կարող եք գտնել լուծումներ, աջակցություն և ռեսուրսներ գրեթե ցանկացած խնդրի համար, որին կարող եք հանդիպել վեբ քերման ժամանակ:

Որո՞նք են վեբ քերծման համար Java-ի օգտագործման թերությունները:

  • Ուսուցման ավելի կտրուկ կոր. Java-ն կարող է ավելի դժվար լինել, քան Python-ի նման այլ լեզուները, հատկապես սկսնակների համար: Դրա շարահյուսությունը և հասկացությունները կարող են ավելի դժվար ըմբռնել նրանց համար, ովքեր նոր են ծրագրավորում կամ վեբ գրություն:
  • Բազմախոսություն: Java-ն խոսուն լեզու է, որը կարող է ավելի երկար և բարդ դարձնել վեբ գրագրման կոդը, քան Python-ի նման այլ լեզուներում: Այս խոսակցականությունը կարող է հանգեցնել մշակման ժամանակի ավելացմանը և ավելի դժվար դարձնել կոդերի ընթերցումն ու պահպանումը:
  • Կաթսայի կոդ. Java-ն հաճախ պահանջում է զգալի քանակությամբ boilerplate կոդ՝ դասեր, օբյեկտներ և մեթոդներ ստեղծելու համար: Սա կարող է հանգեցնել կրկնվող և ծանր կոդի՝ դանդաղեցնելով զարգացման գործընթացը:
  • Ավելի քիչ ուշադրություն վեբ քերման վրա. Թեև Java-ն ունի հզոր գրադարաններ, լեզուն ինքնին հատուկ նախատեսված չէ վեբ քերծման առաջադրանքների համար: Python-ի նման լեզուները, որոնք ունեն հատուկ վեբ քերիչ գրադարաններ, ինչպիսիք են Beautiful Soup-ը և Scrapy-ը, կարող են ավելի շատ կենտրոնանալ վեբ քերծման առաջադրանքների վրա և ապահովել ավելի պարզ փորձառություն:
  • Ժամանակակից լեզվի առանձնահատկությունների բացակայություն. Java-ն գոյություն ունի երկար ժամանակ, և մինչ այն շարունակում է զարգանալ, որոշ ժամանակակից լեզվական առանձնահատկություններ, ինչպիսիք են Python-ում կամ JavaScript-ում հայտնաբերվածները, չկան Java-ում: Այս հատկանիշները կարող են վեբ քերծման առաջադրանքները դարձնել ավելի արդյունավետ և հեշտ իրականացնել:

Քաղեք տեքստ ցանկացած վեբ էջից ընդամենը մեկ սեղմումով: Անցեք Nanonets կայքի քերիչ, ավելացրեք URL-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:

Nanonets կայքի քերիչ


Եզրակացություն

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

Զգուշորեն հաշվի առեք ձեր նախագծի պահանջները, փորձը և նախասիրությունները, երբ որոշեք, թե որ լեզուն օգտագործել վեբ քերծման համար: Հետևելով այս հոդվածում նկարագրված քայլերին, ներկայացված օրինակների և նկարազարդումների հետ մեկտեղ, դուք կարող եք հեշտությամբ ստեղծել վեբ քերման նախագիծ՝ օգտագործելով Java-ն և սկսել արժեքավոր տվյալներ կորզել կայքերից:

Մեկ այլ այլընտրանք է Nanonets-ի նման վեբկայքերի քերման ավտոմատացված գործիքների օգտագործումը: Դուք կարող եք օգտվել կայքից տեքստ անվճար գործիքից: Բայց, եթե ձեզ անհրաժեշտ է ավտոմատացնել վեբ քերծումը ավելի մեծ նախագծերի համար, կարող եք կապվել Nanonets-ի հետ:

ՀՏՀ

Q1. Ի՞նչ գրադարաններ կարող եմ օգտագործել Java-ում վեբ քերծման համար:

Որոշ հանրաճանաչ Java գրադարաններ վեբ գրության համար ներառում են JSoup, HtmlUnit և Selenium WebDriver: JSoup-ը հիանալի ընտրություն է ստատիկ HTML-ից տվյալների վերլուծության և արդյունահանման համար, մինչդեռ HtmlUnit-ը և Selenium WebDriver-ն ավելի հարմար են JavaScript-ով դինամիկ կայքերը վարելու համար:

Q2. Ինչպե՞ս կարող եմ կարգավորել JavaScript-ը Java-ով վեբ քերելիս:

Վեբ գրելու ժամանակ JavaScript-ը կարգավորելու համար կարող եք օգտագործել HtmlUnit կամ Selenium WebDriver-ը: Երկու գրադարաններն էլ կարող են փոխազդել JavaScript-ի հետ և ցուցադրել դինամիկ բովանդակություն՝ թույլ տալով մուտք գործել և արդյունահանել JavaScript-ի կողմից ստեղծված տվյալները վեբ էջում:

Q3. Ինչպե՞ս խուսափել արգելափակումից Java-ով վեբ քերելիս:

Վեբ քերելու ժամանակ արգելափակվելուց խուսափելու համար կարող եք կիրառել այնպիսի տեխնիկա, ինչպիսին են օգտատերերի գործակալների պտտումը, վստահված անձանց օգտագործումը, հարցումների տեմպերի սահմանափակումը և կայքի robots.txt ֆայլը հարգելը: Տեղյակ եղեք կայքի ծառայության պայմաններին և միշտ պատասխանատու կերպով քերեք:

Q4. Կարո՞ղ եմ Java-ում վեբ քերելու համար օգտագործել բազմաշերտություն:

Այո, դուք կարող եք Java-ում վեբ քերելու համար օգտագործել բազմաթելեր՝ գործընթացը արագացնելու և մի քանի վեբ էջեր միաժամանակ քերելու համար: Java-ն ապահովում է ներկառուցված աջակցություն Thread դասի և ExecutorService ինտերֆեյսի միջոցով multithreading-ի համար:

Q5. Կարո՞ղ եմ տվյալները քերել այն կայքերից, որոնք պահանջում են նույնականացում Java-ով:

Այո, դուք կարող եք քերել տվյալները վեբկայքերից, որոնք պահանջում են նույնականացում՝ տրամադրելով մուտքի հավատարմագրեր և մշակելով թխուկներ՝ օգտագործելով Java վեբ քերծող գրադարանները, ինչպիսիք են HtmlUnit-ը կամ Selenium WebDriver-ը: Երկու գրադարաններն էլ թույլ են տալիս շփվել վեբ ձևերի հետ, ներկայացնել մուտքի հավատարմագրերը և պահպանել նիստերը թխուկներով:

Q6. Ինչպե՞ս կարող եմ պահպանել քերված տվյալները CSV կամ JSON կառուցվածքային ձևաչափով:

Պահանջվող տվյալները հանելուց հետո կարող եք օգտագործել Java գրադարանները, ինչպիսիք են OpenCSV-ը կամ Jackson-ը, որպեսզի պահպանեք տվյալները CSV կամ JSON կառուցվածքային ձևաչափով: Այս գրադարանները տրամադրում են հեշտ օգտագործվող API՝ տարբեր ձևաչափերով տվյալներ կարդալու և գրելու համար:

Q7. Արդյո՞ք վեբ քերծումը օրինական է:

Web scraping-ի օրինականությունը կախված է կոնկրետ հանգամանքներից, կայքի ծառայության պայմաններից և այն իրավասությունից, որտեղ դուք գործում եք: Միշտ հարգեք կայքի սպասարկման պայմանները, robots.txt ֆայլը և համապատասխան օրենքներն ու կանոնակարգերը՝ համոզվելու համար, որ ձեր վեբ հավաքման գործունեությունը օրինական և էթիկական է:

Q8. Ինչպե՞ս կարող եմ կարգավորել CAPTCHA-ները Java-ով վեբ քերելիս:

Վեբ գրագրման ժամանակ CAPTCHA-ները կարգավորելու համար կարող եք օգտագործել երրորդ կողմի ծառայություններ, ինչպիսիք են 2Captcha-ն կամ Anti-Captcha-ն, որոնք տրամադրում են API-ներ՝ CAPTCHA-ները լուծելու համար: Կարող եք նաև օգտվել վստահված անձի ծառայություններից՝ CAPTCHA-ների հետ ընդհանրապես չհանդիպելուց: Այնուամենայնիվ, կարևոր է հարգել կայքի սեփականատիրոջ մտադրությունը՝ պաշտպանելու իրենց տվյալները և հաշվի առնել CAPTCHA-ների շրջանցման էթիկական հետևանքները:

Q9. Կարո՞ղ եմ տվյալների հանել վեբկայքերից անսահման պտտվող Java-ի միջոցով:

Այո, դուք կարող եք վեբկայքերից տվյալներ հանել անսահման ոլորմամբ՝ օգտագործելով Java վեբ քերծող գրադարանները, ինչպիսիք են Selenium WebDriver-ը: Selenium WebDriver-ը կարող է փոխազդել JavaScript-ի հետ, ոլորել էջը և դինամիկ կերպով բեռնել լրացուցիչ բովանդակություն՝ թույլ տալով մուտք գործել և արդյունահանել տվյալներ կայքերից անսահման պտտման միջոցով:

Q10. Ինչպե՞ս կարող եմ պլանավորել իմ վեբ քերիչը Java-ում ինքնաբերաբար գործարկելու համար:

Որպեսզի ձեր Java վեբ քերիչը ինքնաբերաբար աշխատի, կարող եք օգտագործել առաջադրանքների ժամանակացույց, ինչպիսին է cron-ը (Linux-ի և macOS-ի համար) կամ Task Scheduler-ը (Windows-ի համար): Որպես այլընտրանք, դուք կարող եք օգտագործել Java գրադարանները, ինչպիսիք են Quartz-ը, ձեր Java հավելվածում կրկնվող առաջադրանքները պլանավորելու և կառավարելու համար:

Q11: Java-ն կամ Python-ն ավելի լավն է վեբ քերելու համար:

Ե՛վ Java-ն, և՛ Python-ն ունեն իրենց առավելությունները վեբ քերման համար: Java-ն առաջարկում է գերազանց կատարում, բազմահարթակ համատեղելիություն և հզոր գրադարաններ: Մյուս կողմից, Python-ն ունի ավելի պարզ շարահյուսություն, ավելի նուրբ ուսուցման կոր և վեբ քերելու հատուկ գրադարաններ, ինչպիսիք են Beautiful Soup-ը և Scrapy-ը: Java-ի և Python-ի միջև ընտրությունը կախված է ձեր նախագծի պահանջներից, փորձից և անձնական նախասիրություններից:

Q12: Արդյո՞ք API-ն ավելի լավն է, քան վեբ քերծումը:

API-ները և վեբ քերծումը ծառայում են տարբեր նպատակների: API-ներն ապահովում են վեբկայքից տվյալներ մուտք գործելու կառուցվածքային և հուսալի միջոց, մինչդեռ վեբ քերծումը ներառում է տվյալների արդյունահանում անմիջապես կայքի HTML-ից: Եթե ​​վեբկայքն առաջարկում է API, ապա ընդհանուր առմամբ ավելի լավ է օգտագործել API-ն, քանի որ այն ավելի կայուն է, արդյունավետ և հարգում է կայքի սեփականատիրոջ մտադրությունները: Այնուամենայնիվ, եթե API-ն հասանելի չէ կամ չի տրամադրում անհրաժեշտ տվյալները, վեբ քերծումը կարող է կենսունակ այլընտրանք լինել:

Source link