Java+Jsoup+EasyExcel は、流行後の 2023 年の国内上位 100 郡の GDP データをクロールします。

背景

ポストエピデミック時代の到来により、過去2022年の国家経済状況は多くの学者や研究対象者にとって大きな懸念事項となったに違いない。これらのデータは国家統計局のウェブサイトに記録されています。これらのデータを分析することで、現在の経済状況をある視点から検証・観察することができます。

全国の合計 1,279 の県レベル単位が 2022 年の GDP と一般公共予算収入のデータを公開しています。これらのデータに基づいて、Enterprise Alert は中国トップ 100 県の GDP ランキングと中国トップ 100 県の一般公共予算収入ランキングをまとめました。 100の郡。その中で、昆山市はGDP5,006億6,600万元でトップを維持しており、江陰市と晋江市は上位100県の中で2位と3位にランクされており、長沙県は湖南省で唯一トップ10に入っている。国(トップ7)。写真

写真

最初の画像は画像の形式で公開され、2 番目の画像は HTML テーブルの形式で表示されます。オフラインで使用状況データを分析するのは非常に不便です。プログラマーにとって、これは難しいことではありません。Web スクレイピング技術を使用してデータを整理できます。

この記事では、プログラミング言語として Java 言語を使用して、Web ページの知識をクロールするための Jsoup の使用方法を説明し、詳細なサンプル コードを示します。

1. Jsoup クロールの最初の紹介

1. Webページの構造解析

Jsoup を使用してページをクロールする場合、対応するクロール戦略を策定するために、Web ページの構造の予備分析を行う必要があります。まずブラウザを開き、ターゲット Web サイトのアドレスを入力し、同時に F12 キーを開いてデバッグを開始し、ターゲット Web ページの要素を見つけます。写真

上記の GDP トップ 100 リストの div の下にあるテーブル table を開き、次のデータを見つけます。

写真

同様に、一般財政収入のデータ処理にも同じ方法が使用されますが、ここでは再度説明しません。

2. Java 開発 Jsoup クローリング

1. Jsoup 関連の依存パッケージを参照する

ここでは、パッケージの依存関係の処理と管理に Maven の jar を使用します。したがって、Pom.xml が最初に定義され、キーコードは次のようになります。

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.yelang</groupId>
 <artifactId>jsoupdemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 
 <dependencies>
  <dependency>
   <groupId>org.jsoup</groupId>
   <artifactId>jsoup</artifactId>
   <version>1.11.3</version>
  </dependency>
 
  <dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>3.0.5</version>
  </dependency>
 </dependencies>
 
</project>

2. 情報エンティティクラスの処理

比較すると、2 つの表は異なる特定の指標を扱っていることがわかりますが、以前のランキング、郡名、州名はすべて同じです。そこで、オブジェクト指向設計手法を用いて情報処理クラスを開発します。対応するクラス図は次のとおりです。写真

3. データ収集主体

import java.io.Serializable;
import com.alibaba.excel.annotation.ExcelProperty;
public class CountyBase implements Serializable {
    
    
 private static final long serialVersionUID = -1760099890427975758L;
 
 @ExcelProperty(value= {
    
    "序号"},index = 1)
 private Integer index;
 
 @ExcelProperty(value= {
    
    "县级地区"},index = 2)
 private String name;
 
 @ExcelProperty(value= {
    
    "所属省"},index = 3)
 private String province;
 
 public Integer getIndex() {
    
    
  return index;
 }
 
 public void setIndex(Integer index) {
    
    
  this.index = index;
 }
 
 public String getName() {
    
    
  return name;
 }
 
 public void setName(String name) {
    
    
  this.name = name;
 }
 
 public String getProvince() {
    
    
  return province;
 }
 
 public void setProvince(String province) {
    
    
  this.province = province;
 }
 
 public CountyBase(Integer index, String name, String province) {
    
    
  super();
  this.index = index;
  this.name = name;
  this.province = province;
 }
 
 public CountyBase() {
    
    
  super();
 }
 
}

上記のコードでは、並べ替え、郡レベルの地域、および州が親クラスとして抽象化され、GDP クラスと一般公共収入クラスの 2 つのサブクラスが設計されています。ここで注意する必要があるのは、収集したデータをローカルの Excel テーブルに保存する必要があるため、技術生成コンポーネントとして EasyExcel を使用していることです。@ExcelPropertyこのプロパティでは、書き込まれる Excel ヘッダーと特定の並べ替えを定義します。

import java.io.Serializable;
import com.alibaba.excel.annotation.ExcelProperty;
public class Gdp extends CountyBase implements Serializable {
    
    
 
 private static final long serialVersionUID = 5265057372502768147L;
 
 @ExcelProperty(value= {
    
    "GDP(亿元)"},index = 4)
 private String gdp;
 
 public String getGdp() {
    
    
  return gdp;
 }
 
 public void setGdp(String gdp) {
    
    
  this.gdp = gdp;
 }
 
 public Gdp(Integer index, String name, String province, String gdp) {
    
    
  super(index,name,province);
  this.gdp = gdp;
 }
 
 public Gdp(Integer index, String name, String province) {
    
    
  super(index, name, province);
 }
 
}

import java.io.Serializable;
 
import com.alibaba.excel.annotation.ExcelProperty;
 
public class Gpbr extends CountyBase implements Serializable {
    
    
 
 private static final long serialVersionUID = 8612514686737317620L;
 
 @ExcelProperty(value= {
    
    "一般公共预算收入(亿元)"},index = 4)
 private String gpbr;// General public budget revenue
 
 public String getGpbr() {
    
    
  return gpbr;
 }
 
 public void setGpbr(String gpbr) {
    
    
  this.gpbr = gpbr;
 }
 
 public Gpbr(Integer index, String name, String province, String gpbr) {
    
    
  super(index, name, province);
  this.gpbr = gpbr;
 }
 
 public Gpbr(Integer index, String name, String province) {
    
    
  super(index, name, province);
 }
}

4.実際のクロール

以下は GDP データを処理するための変換コードです。Jsoup に慣れていない場合は、まず関連する構文に慣れることができます。Jquery と同様の開発経験がある場合は、すぐに Jsoup を使い始めることができます。


static void grabGdp() {
    
    
  String target = "https://www.maigoo.com/news/665462.html";
  try {
    
    
            Document doc = Jsoup.connect(target)
                    .ignoreContentType(true)
                    .userAgent(FetchCsdnCookie.ua[1])
                    .timeout(300000)
                    .header("referer","https://www.maigoo.com")
                    .get();
            Elements elements = doc.select("#t_container > div:eq(3) table tr");
            List<Gdp> list = new ArrayList<Gdp>();
            for(int i = 1;i<elements.size();i++) {
    
    
             Element tr = elements.get(i);//获取表头
             Elements tds = tr.select("td");
             Integer index = Integer.valueOf(tds.get(0).text());
             String name = tds.get(1).text();
             String province = tds.get(2).text();
             String gdp = tds.get(3).text();
             Gdp county = new Gdp(index, name, province, gdp);
             list.add(county);
            }
            String fileName = "E:/gdptest/2023全国百强县GDP排行榜 .xlsx";
            EasyExcel.write(fileName, Gdp.class).sheet("GDP百强榜").doWrite(list);
            System.out.println("完成...");
  } catch (Exception e) {
    
    
   System.out.println(e.getMessage());
   System.out.println("发生异常,继续下一轮循环");
  }
 }

ここで注意する必要があるのは、jsoup 内の Web ページ要素を見つけてキャプチャする方法です。上記ではjquery風のDom取得方法を使用しています。

Elements elements = doc.select("#t_container > div:eq(3) table tr");

この行を使用してテーブルの下の各 tr を取得し、各 td をループして対応するデータを取得します。

3. プロセス分析と結果

1. 収集プロセスの分析

ここではソースプログラムをデバッグする方法を使ってWebページを解析します。jsou を使用して Web ページへのアクセスをシミュレートする

写真

ページ要素を取得するために使用されるメソッドselect(xxx)

写真

tr の下の td セル データを取得します。

写真

2. 運用実績

上記のコードを実行すると、宛先ディスクに次の 2 つのファイルが表示されます。

写真

上記の2つのExcelファイルを開くと、収集したいデータが収集されており、データの順序もWebページ上の順序に従って完全に生成されていることがわかります。写真

写真

要約する

以上がこの記事の主な内容です。この記事では、プログラミング言語として Java 言語を使用し、Jsoup を使用して Web ページの知識を巡回する方法と、EasyExcel を組み合わせて Web ページのテーブルを Excel テーブルに変換する方法を詳しく説明し、同時に詳細なサンプル コードも示します。急いで書いたので間違いは避けられませんが、批判、修正、交換は歓迎です。

収集するデータは収集されており、データの順序は Web ページ上の順序に従って完全に生成されます。[外部リンク画像は転送中です...(img-ApNKEilI-1686618919683)]

[外部リンク画像を転送中...(img-TA0QC4Hk-1686618919683)]

要約する

以上がこの記事の主な内容です。この記事では、プログラミング言語として Java 言語を使用し、Jsoup を使用して Web ページの知識を巡回する方法と、EasyExcel を組み合わせて Web ページのテーブルを Excel テーブルに変換する方法を詳しく説明し、同時に詳細なサンプル コードも示します。急いで書いたので間違いは避けられませんが、批判、修正、交換は歓迎です。

原文:blog.csdn.net/yelangkingwuzuhu/article/details/130901172

おすすめ

転載: blog.csdn.net/weixin_44030143/article/details/131181369