java爬虫抓取网页数据(项目名称数据库Java爬虫项目技术选型及实训环境实训案例)

优采云 发布时间: 2021-12-10 11:06

  java爬虫抓取网页数据(项目名称数据库Java爬虫项目技术选型及实训环境实训案例)

  项目名称:java爬虫

  项目技术选择:Java、Maven、Mysql、WebMagic、Jsp、Servlet

  项目实现方法:主要开发认知java爬虫框架WebMagic,利用所学的java知识完成指定的网站数据爬取分析,并使用Servlet和Jsp在页面上展示

  培训环境:一人一机,边讲边练

  培训介绍:

  本次培训的主要目的是增强学员对WebMagic框架和Servlet的理解,结合所学的理论知识进行爬虫实战。要求学生掌握市场上广泛使用的Mysql数据、Java语言、WebMagic框架和Servlet的开发,了解大中型大数据行业的基本模型知识。

  本次培训选定的案例包括:

  Mysql数据库的基本操作

  Java基本语法使用

  构建和开发爬虫项目的WebMagic框架

  通过学习这些内容,可以大大提高学生对计算机知识的理解,促进专业课程的学习,从而潜移默化地提高学生的就业竞争力。

  步:

  1、下载安装Maven,在Eclipse中配置Maven相关设置。

  1),下载安装Maven

  下载地址:/download.cgi,根据自己的系统选择合适的版本下载:

  

  将下载的文件解压到合适的位置,完成Maven安装:

  

  2),设置环境变量

  将Maven安装路径下bin目录的路径复制到电脑的环境变量中:

  复制bin目录所在的路径:

  

  添加环境变量:

  

  在cmd下输入:mvn --version查看Maven是否安装成功,出现如下提示则表示安装成功:

  

  3),可以忽略:修改Maven安装目录conf(E:\apache-maven-3.5.4\conf\settings.xml)中的settings.xml文件进行配置本地仓库位置和远程仓库镜像修改为阿里云镜像:

  配置本地仓库,在下面添加你要创建的本地仓库地址(根据自己的情况设置):

  

  Maven仓库默认位于国外,使用起来难免会很慢,尤其是下载依赖的时候。速度很慢。换成国产阿里云镜像后,速度会有很大的提升:

  

      aliyun

      aliyun Maven

      *

      http://maven.aliyun.com/nexus/content/repositories/central

    

  

  4)、Eclipse配置

  以下步骤中,每个人电脑上显示的内容可能不同(截图来自不同项目,请忽略包名、类名等信息,部分截图来自网络,不同截图中的相关信息可能不同),但是操作步骤是一样的,只要你在Eclipse上安装maven,打开Eclipse点击window>preferences,就会弹出来:

  

  

  点击确定后,会出现:

  

  点击完成后:

  

  在 Eclipse 中配置 Maven:

  打开 Eclipse 首选项设置

  

  查找Maven配置项

  

  设置Maven的全局配置文件settings.xml

  

  更新配置信息

  

  2、在Eclipse中创建Maven项目

  1),打开eclipse,右键new——》other,找到maven项目如下图或者直接搜索maven projec:

  创建项目:

  

  2),选择Maven Project,请选择Create a simple project(skip archetype selection),然后点击Next:

  

  3),填写Group id和Artifact id,Version默认,Packaging默认为jar,Name,Description可选,其他不需要填写:

  

  然后单击完成。这时候需要稍等片刻才能下载所需的文件。创建后完整的项目结构应该如下图所示:

  

  3、编写Java爬虫项目代码,抓取/position.php网站的相关信息:

  1),需要抓取的网页内容:职位名称、职位类别、人数、地点、发布时间

  

  2)。根据要爬取的内容(爬取的内容包括:职位、职位类别、人数、地点、发布时间),可以参考如下SQL语句设计数据库(mysql):

  /*

SQLyog Ultimate v12.5.0 (64 bit)

MySQL - 5.5.27 : Database - mysql_java

*********************************************************************

*/

/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

CREATE DATABASE /*!32312 IF NOT EXISTS*/`mysql_java` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `mysql_java`;

/*Table structure for table `tencent_position` */

DROP TABLE IF EXISTS `tencent_position`;

CREATE TABLE `tencent_position` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`p_name` varchar(200) NOT NULL,

`p_link` varchar(200) NOT NULL,

`p_type` varchar(100) NOT NULL,

`p_num` varchar(20) NOT NULL,

`p_location` varchar(20) NOT NULL,

`p_publish_time` varchar(20) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1125 DEFAULT CHARSET=utf8;

  3)。在创建的项目下,需要先配置pom.xml,然后创建四个类和一个接口(自己命名):MySQLUtils、TencentPageProcessor、TencentPosition、TencentPositionDao(接口)、TencentPositionDaoImpl

  

  配置 pom.xml:

  pom.xml文件的设置:填写完内容后记得按Ctrl+S/save键,然后Eclipse会自动从设置好的Maven仓库下载需要的文件。可能需要一定的时间:

  

  依赖数据来自:/单独搜索:webmagic,mysql会显示相关内容

  

  点击搜索到的内容,将框中的代码复制到pom.xml的代码块中:

  

  可以在Maven Dependencies库中查看下载是否完成:

  

  以下为示例代码,自行编码时请记得更改代码。

  MySQLUtils 类代码如下:

  import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class MySQLUtils {

private static Connection connection;

public static Connection getConnection() throws ClassNotFoundException, SQLException {

if (connection == null) {

Class.forName("com.mysql.jdbc.Driver");

String url = "jdbc:mysql://localhost:3306/mysql_java";//URL、User、Password需根据自己的实际情况填写

String user = "root";

String password = "root";

return DriverManager.getConnection(url, user, password);

}

return connection;

}

}

  腾讯位置代码如下:

  public class TencentPosition {

private String positionName;

private String positionLink;

private String positionType;

private String positionNum;

private String workLocation;

private String publishTime;

public TencentPosition() {

super();

}

public TencentPosition(String positionName, String positionLink, String positionType, String positionNum,

String workLocation, String publishTime) {

super();

this.positionName = positionName;

this.positionLink = positionLink;

this.positionType = positionType;

this.positionNum = positionNum;

this.workLocation = workLocation;

this.publishTime = publishTime;

}

public String getPositionName() {

return positionName;

}

public void setPositionName(String positionName) {

this.positionName = positionName;

}

public String getPositionLink() {

return positionLink;

}

public void setPositionLink(String positionLink) {

this.positionLink = positionLink;

}

public String getPositionType() {

return positionType;

}

public void setPositionType(String positionType) {

this.positionType = positionType;

}

public String getPositionNum() {

return positionNum;

}

public void setPositionNum(String positionNum) {

this.positionNum = positionNum;

}

public String getWorkLocation() {

return workLocation;

}

public void setWorkLocation(String workLocation) {

this.workLocation = workLocation;

}

public String getPublishTime() {

return publishTime;

}

public void setPublishTime(String publishTime) {

this.publishTime = publishTime;

}

@Override

public String toString() {

return "TencentPosition [positionName=" + positionName + ", positionLink=" + positionLink + ", positionType="

+ positionType + ", positionNum=" + positionNum + ", workLocation=" + workLocation + ", publishTime="

+ publishTime + "]";

}

}

  腾讯PositionDao接口代码如下:

  public interface TencentPositionDao {

int add(TencentPosition position);

}

  腾讯PositionDaoImpl类代码如下:

  import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

public class TencentPositionDaoImpl implements TencentPositionDao {

public int add(TencentPosition position) {

String sql = "INSERT INTO tencent_position(p_name, p_link, p_type, p_num, p_location, p_publish_time)"

+ " VALUES(?, ?, ?, ?, ?, ?)";

Connection conn = null;

PreparedStatement pst = null;

try {

conn = MySQLUtils.getConnection();

pst = conn.prepareStatement(sql);

pst.setString(1, position.getPositionName());

pst.setString(2, position.getPositionLink());

pst.setString(3, position.getPositionType());

pst.setString(4, position.getPositionNum());

pst.setString(5, position.getWorkLocation());

pst.setString(6, position.getPublishTime());

return pst.executeUpdate();

} catch (SQLException e) {

e.printStackTrace();

} catch (ClassNotFoundException e) {

e.printStackTrace();

} finally {

if (pst != null) {

try {

pst.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

pst = null;

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

} finally {

conn = null;

}

}

}

return 0;

}

}

  TencentPageProcessor 类代码如下:

<p>import java.util.List;

import java.util.concurrent.atomic.AtomicLong;import us.codecraft.webmagic.Page;

import us.codecraft.webmagic.Site;

import us.codecraft.webmagic.Spider;

import us.codecraft.webmagic.pipeline.JsonFilePipeline;

import us.codecraft.webmagic.processor.PageProcessor;

public class TencentPageProcessor implements PageProcessor {

private Site site = Site.me().setRetryTimes(5).setSleepTime(1000);

private static TencentPositionDao dao = new TencentPositionDaoImpl();

public static AtomicLong count = new AtomicLong();

public static AtomicLong total = new AtomicLong();

public Site getSite() {

return site;

}

public void process(Page page) {

List urlList = page.getHtml().links().regex("https://hr.tencent.com/position.php\\?&start=\\d+").all();

System.out.println(urlList);

page.addTargetRequests(urlList);

List positionNames = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[1]/a/text()").all();

List positionLinks = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[1]/a/@href").all();

List positionTypes = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[2]/text()").all();

List positionNums = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[3]/text()").all();

List workLocations = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[4]/text()").all();

List publishTimes = page.getHtml().xpath("//tr[@class=&#39;odd&#39;]/td[5]/text()").all();

for (int i = 0; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线