Դուք գտել եք լավ կայք և այժմ ցանկանում եք տվյալներ հանել վեբ էջից Excel-ի համար: Ինչպե՞ս դա կանեիր: Copy-past-ը այնքան խաղողի բերքահավաք է, հատկապես համացանցում առկա հետաքրքիր վեբ քերիչ գործիքներով:
Web scraping-ը կայքերից տվյալների ավտոմատ արդյունահանման գործընթաց է: Java-ն այն լեզուներից մեկն է, որն օգտագործվում է վեբ քերծող API-ներ ստեղծելու համար: Դուք կարող եք Java-ն օգտագործել՝ վեբ քերելու բարդ առաջադրանքները լուծելու, մեծ քանակությամբ տվյալների մշակման և վեբ քերելու հատուկ հավելվածներ ստեղծելու համար:
Այս java վեբ քերելու ձեռնարկում մենք կտեսնենք, թե ինչպես կարելի է օգտագործել Java-ն վեբ էջերը հեշտությամբ քերելու համար՝ օգտագործելով հանրաճանաչ Jsoup գրադարանը և այլ կարևոր գործիքներ: Այսպիսով, վերցրեք ձեր սիրած տեքստային խմբագրիչը, գործարկեք ձեր JVM-ը և եկեք սկսենք:
Քաղեք տեքստ ցանկացած վեբ էջից ընդամենը մեկ սեղմումով: Անցեք Nanonets կայքի քերիչ, ավելացրեք URL-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:
Ինչու՞ օգտագործել 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-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:
Որո՞նք են 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-ը և կտտացրեք «Սքրեյփ» և անմիջապես ներբեռնեք կայքի տեքստը որպես ֆայլ: Փորձեք այն հիմա անվճար:
Եզրակացություն
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-ն հասանելի չէ կամ չի տրամադրում անհրաժեշտ տվյալները, վեբ քերծումը կարող է կենսունակ այլընտրանք լինել: