前回のエピソードでは、Zhihu クローラーを作成するために Java を使用する必要性について話しました。今回は、コードを使用して Web ページのコンテンツを取得する方法を学習します。
まず、HTML、CSS、JS、AJAX の経験がない場合は、W3C (ここをクリックしてください) にアクセスして少し学ぶことをお勧めします。
HTMLと言えば、GETアクセスとPOSTアクセスの問題があります。
この側面についての理解が不足している場合は、W3C の記事「GET vs. POST」を読むことができます。
あ、ここでは詳しくは説明しません。
次に、Java を使用して Web ページのコンテンツをクロールする必要があります。
このとき、Baiduが役に立ちます。
はい、彼はもはや無名のインターネット速度テスターではなく、私たちの爬虫類モルモットになろうとしています! ~
まず Baidu のホームページを見てみましょう:
このようなページが HTML と CSS の共同作業の結果であることは誰もが知っていると思います。
ブラウザでページを右クリックし、「ページのソースコードを表示」を選択します:
はい、これは次のようなものです。これはBaiduページのソースコードです。
次のタスクは、クローラーを使用して同じものを取得することです。
まず簡単なソースコードを見てみましょう:
import java.io.*; import java.net.*; public class Main { public static void main(String[] args) { // 定义即将访问的链接 String url = "http://www.baidu.com"; // 定义一个字符串用来存储网页内容 String result = ""; // 定义一个缓冲字符输入流 BufferedReader in = null; try { // 将string转成url对象 URL realUrl = new URL(url); // 初始化一个链接到那个url的连接 URLConnection connection = realUrl.openConnection(); // 开始实际的连接 connection.connect(); // 初始化 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); // 用来临时存储抓取到的每一行的数据 String line; while ((line = in.readLine()) != null) { //遍历抓取到的每一行并将其存储到result里面 result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } System.out.println(result); } }
上記は、Baidu にアクセスする Java をシミュレートする Main メソッドです
それを実行して結果を確認できます:
ああ、それはまさに以前ブラウザで見たものと同じです。この時点で、最も単純なクローラーの準備が整いました。
しかし、これらすべてが私が望むものであるわけではありません。
Baidu の大きな足のロゴを例に挙げてみましょう。
一時的な必要性:
Baidu ロゴの大きな足の画像リンクを取得します。
まずはブラウザでの見方について説明します。
画像を右クリックし、[要素の検査] を選択します (Firefox、Google、IE11 にはすべてこの機能がありますが、名前は異なります):
ああ、たくさんの div に囲まれていることがわかります。貧弱な img タグ。
このsrcは画像へのリンクです。
では、Java ではどうすればよいでしょうか?
コードのデモンストレーションを容易にするために、すべてのコードがクラスによってカプセル化されていないことをあらかじめご了承ください。ご理解ください。
まず前のコードを sendGet 関数にカプセル化しましょう:
import java.io.*; import java.net.*; public class Main { static String sendGet(String url) { // 定义一个字符串用来存储网页内容 String result = ""; // 定义一个缓冲字符输入流 BufferedReader in = null; try { // 将string转成url对象 URL realUrl = new URL(url); // 初始化一个链接到那个url的连接 URLConnection connection = realUrl.openConnection(); // 开始实际的连接 connection.connect(); // 初始化 BufferedReader输入流来读取URL的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream())); // 用来临时存储抓取到的每一行的数据 String line; while ((line = in.readLine()) != null) { // 遍历抓取到的每一行并将其存储到result里面 result += line; } } catch (Exception e) { System.out.println("发送GET请求出现异常!" + e); e.printStackTrace(); } // 使用finally来关闭输入流 finally { try { if (in != null) { in.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return result; } public static void main(String[] args) { // 定义即将访问的链接 String url = "http://www.baidu.com"; // 访问链接并获取页面内容 String result = sendGet(url); System.out.println(result); } }
これで少しすっきりしましたが、私の強迫性障害を許してください。
次のタスクは、取得したたくさんのものから写真へのリンクを見つけることです。
最初に考えられる方法は、indexof 関数を使用して、ページのソース コードの文字列結果内の文字列の部分文字列を検索することです。
はい、このメソッドは、直接 IndexOf("src") を実行して開始シリアル番号を見つけ、その後急いで終了シリアル番号を取得するなど、この問題をゆっくりと解決できます。
しかし、この方法を常に使用できるわけではありません。結局のところ、わらじは歩き回るのにのみ適しています。後は、頭を保持するために義足を切断する必要があります。
私の侵入を許して続行してください。
それでは、この写真のソースをどのように見つけられるのでしょうか?
はい、下の視聴者が言ったように、通常のマッチングです。
正規表現についてよくわからない学生がいる場合は、この記事を参照してください: [Python] Web クローラー (7): Python の正規表現チュートリアル。
簡単に言えば、正規表現はマッチングのようなものです。
たとえば、3人の太った男性がここに立っていて、赤い服、青い服、緑の服を着ています。
ルールは次のとおりです: 緑色のものを捕まえてください!
そして、太った緑色の男は一人で捕まりました。
とても簡単です。
しかし、正規文法は依然として広範囲で奥が深いため、初めて触れると少し混乱するのは避けられません
私は定期的なオンライン テスト ツール、つまり正規表現オンライン テストを皆さんにお勧めします。
規則性を魔法の武器として、Java で規則性を使用するにはどうすればよいですか?
上記は、基礎知識ゼロで Java Zhihu クローラーを作成する内容です。まずは、Baidu ホームページで練習してください。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。

JVMは、Javaコードをマシンコードに変換し、リソースを管理することで機能します。 1)クラスの読み込み:.classファイルをメモリにロードします。 2)ランタイムデータ領域:メモリ領域を管理します。 3)実行エンジン:実行バイトコードを解釈またはコンパイルします。 4)ローカルメソッドインターフェイス:JNIを介してオペレーティングシステムと対話します。

JVMにより、Javaはプラットフォームを介して実行できます。 1)jvmは、bytecodeをロード、検証、実行します。 2)JVMの作業には、クラスの読み込み、バイトコード検証、解釈の実行、およびメモリ管理が含まれます。 3)JVMは、動的クラスの読み込みや反射などの高度な機能をサポートしています。

Javaアプリケーションは、次の手順を通じて異なるオペレーティングシステムで実行できます。1)ファイルまたはパスクラスを使用してファイルパスを処理します。 2)System.getEnv()を介して環境変数を設定および取得します。 3)MavenまたはGradleを使用して、依存関係を管理し、テストします。 Javaのクロスプラットフォーム機能は、JVMの抽象化レイヤーに依存していますが、特定のオペレーティングシステム固有の機能の手動処理が必要です。

Javaには、さまざまなプラットフォームでの特定の構成とチューニングが必要です。 1)-XMSや-XMXなどのJVMパラメーターを調整して、ヒープサイズを設定します。 2)ParallelGCやG1GCなどの適切なごみ収集戦略を選択します。 3)さまざまなプラットフォームに適応するようにネイティブライブラリを構成します。これらの測定により、Javaアプリケーションはさまざまな環境で最適に機能することができます。

Osgi、apachecommonslang、jna、andjvmoptionsareeffectiveforformplatform-specificchallengesinjava.1)osgimanagesdependenciesandisolatescomponents.2)apachecommonslangprovidesutilityfunctions.3)jnaallowsnativecode.4)

jvmmanagesgarbagecollectionacrossplatformseftivivivivitybyusagenerationalaphadadadaptingtosandhardwaredefferences.itemployscollectorslikeserial、parallel、cms、andg1、各sutitedfordifferentscenarios

Javaは、Javaの「Write and Averywherewhere」という哲学がJava Virtual Machine(JVM)によって実装されているため、変更なしで異なるオペレーティングシステムで実行できます。コンパイルされたJavaバイトコードとオペレーティングシステムの間の仲介者として、JVMはバイトコードを特定のマシン命令に変換し、JVMがインストールされた任意のプラットフォームでプログラムが独立して実行できることを確認します。

Javaプログラムの編集と実行は、BytecodeとJVMを通じてプラットフォームの独立性を達成します。 1)Javaソースコードを書き、それをbytecodeにコンパイルします。 2)JVMを使用して、任意のプラットフォームでByteCodeを実行して、コードがプラットフォーム間で実行されるようにします。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ホットトピック









