数据抓取模块

package crowling1;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils; /**
* An example that performs GETs from multiple threads.
*
*/
public class ClientMultiThreadedExecution { public static void main(String[] args) throws Exception {
// Create an HttpClient with the ThreadSafeClientConnManager.
// This connection manager must be used if more than one thread will
// be using the HttpClient.
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(1000); CloseableHttpClient httpclient = HttpClients.custom()
.setConnectionManager(cm)
.build();
GetThread[] threads = new GetThread[5000];
for (int i = 0; i < threads.length; i++) {
HttpGet httpget = new HttpGet(reportIP());
threads[i] = new GetThread(httpclient, httpget, i + 1);
} // start the threads
for (int j = 0; j < threads.length; j++) {
threads[j].start();
} // join the threads
for (int j = 0; j < threads.length; j++) {
threads[j].join();
} } finally {
httpclient.close();
}
} /**
* A thread that performs a GET.
*/
static class GetThread extends Thread { private final CloseableHttpClient httpClient;
private final HttpContext context;
private final HttpGet httpget;
private final int id; public GetThread(CloseableHttpClient httpClient, HttpGet httpget, int id) {
this.httpClient = httpClient;
this.context = new BasicHttpContext();
this.httpget = httpget;
this.id = id;
} /**
* Executes the GetMethod and prints some status information.
*/
@Override
public void run() {
try {
System.out.println(id + " - about to get something from " + httpget.getURI());
CloseableHttpResponse response = httpClient.execute(httpget, context);
try {
System.out.println(id + " - get executed");
// get the response body as an array of bytes
HttpEntity entity = response.getEntity();
String str = null;
if (entity != null) {
byte[] bytes = EntityUtils.toByteArray(entity);
str=new String(bytes,"utf-8");
System.out.println(id + " - " + bytes.length + " bytes read");
}
demo3 d=new demo3();
String mys="'"+httpget.getURI()+"'";
String ip=mys;
int begin=str.indexOf("<title>")+7;
int end=str.indexOf("</title>");
int debegin=str.indexOf("Description");
String title="";
if (begin!=-1){
title="'"+str.substring(begin, end)+"'";
}
String desc=null;
if (debegin!=-1){
desc="'"+str.substring(debegin, debegin+10)+"'";
}else {
desc="'没有获取到描述'";
}
System.out.println(title);
d.createconn();
String sql="insert into web values("+ip+","+title+","+desc+")";
d.savedata(sql);
} finally {
response.close();
}
} catch (Exception e) {
System.out.println(id + " - error: " + e);
}
} }
static int a=110;
static int b=75;
static int c=114;
static int d=0;
public synchronized static String reportIP(){
if (d==255){
d=0;
c++;
}else if(b==255){
b=0;
a++;
}else if(c==255){
c=0;
b++;
}else {
d++;
}
return new String("http://"+a+"."+b+"."+c+"."+d); } }

数据存储模块

package crowling1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class demo3 {
public Connection con;
public void createconn(){ try{
//加载MySql的驱动类
Class.forName("com.mysql.jdbc.Driver") ;
}catch(ClassNotFoundException e){
System.out.println("找不到驱动程序类 ,加载驱动失败!");
e.printStackTrace() ;
}
String url = "jdbc:mysql://localhost:3306/webcro" ;
String username = "root" ;
String password = "root" ;
try{
//连接
con =
DriverManager.getConnection(url , username , password ) ;
}catch(SQLException se){
System.out.println("数据库连接失败!");
se.printStackTrace() ;
}
}
public void savedata(String sql) throws SQLException{
//sql insert into web
//、创建一个Statement
PreparedStatement pstmt = con.prepareStatement(sql) ;
// 执行SQL语句
int rows = pstmt.executeUpdate() ; //如果没有返回,rows=0
}
public static void main(String[] args) throws SQLException {
demo3 d=new demo3();
String ip="'255.255.255.253'";
String title="'百度'";
String desc="'百度'";
d.createconn();
String sql="insert into web values("+ip+","+title+","+desc+")";
d.savedata(sql);
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

利用httpclient和mysql模拟搜索引擎的更多相关文章

  1. Java通过httpclient获取cookie模拟登录

    package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Htt ...

  2. Android之网络编程利用PHP操作MySql插入数据(四)

    因为最近在更新我的项目,就想着把自己在项目中用到的一些的简单的与网络交互的方法总结一下,所以最近Android网络编程方面的博文会比较多一些,我尽量以最简单的方法给大家分享,让大家明白易懂.如果有什么 ...

  3. LoadRunner利用ODBC编写MySql脚本

    最近做了几周的LoadRunner测试,有一些心得,记录下来,以便以后查找. LoadRunner测试数据库是模拟客户端去连接数据库服务器,因此,需要协议(或者说驱动的支持).LoadRunner本身 ...

  4. Hadoop 中利用 mapreduce 读写 mysql 数据

    Hadoop 中利用 mapreduce 读写 mysql 数据   有时候我们在项目中会遇到输入结果集很大,但是输出结果很小,比如一些 pv.uv 数据,然后为了实时查询的需求,或者一些 OLAP ...

  5. 利用oneproxy部署mysql数据库的读写分离

    实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel ...

  6. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

  7. 利用phpmyadmin修改mysql的root密码及如何进入修改密码后的phpmyadmin

    1.利用phpmyadmin修改mysql的root密码 很多人利用phpmyadmin或者命令行来修改了mysql的root密码,重启后发现mysql登录错误,这是为什么呢?修改mysql的root ...

  8. 【mysql】利用Navicat for MySQL的使用

    1. 查看sql语句 如果忘记了某个SQL语句怎么写,可以利用Navicat for MySQL的历史日志来查看 在Navicat for MySQL中,直接对数据库进行想要的操作,然后点击工具-&g ...

  9. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

随机推荐

  1. 【logback】认识logback

    一. Reference:http://www.cnblogs.com/yongze103/archive/2012/05/05/2484753.html 1. Logback为取代log4j而生,l ...

  2. Android 双u盘方案【转】

    本文转载自:https://blog.csdn.net/kc58236582/article/details/49618445 1      L1813系统上双U盘设计方案——系统设计 1.1     ...

  3. <a href

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEnco ...

  4. kafka常用的shell命令

    kafka常用shell命令: ------------------------------------ 1.创建topic bin/kafka-topics.sh --create --zookee ...

  5. 第二天(1)声明式验证之使用验证框架验证域模型和ModelDriven验证

    有一类特殊的属性,即这个属性的类型是另外一个JavaBean,如有一个User类,代码如下: package data; public class User { private String name ...

  6. linux sed 命

    sed(stream editor):是流编辑器,按行进行操作,对符合模式的行在内存中进行操作,不对原文件进行修改,处理结束后将模式空间打印到屏幕. sed 的模式空间 处理文件流的内存空间叫模式空间 ...

  7. 分享知识-快乐自己:SpringBoot集成热部署配置(一)

    摘要: 热部署与热加载: ava热部署与Java热加载的联系和区别: 1):Java热部署与热加载的联系: 1.不重启服务器编译/部署项目 2.基于Java的类加载器实现 2):Java热部署与热加载 ...

  8. 关于_T()说明

    #define  _T(X)  L##X _T()是MFC里的宏.VS支持两种编码方式ASCII和Unicode,前者是用单字节编码,只能表示0~255个字符.为了表示各个国家的字符,采用了UNICO ...

  9. 大白话AOP

    工作一年多后, 第二次看了韩顺平老师讲的AOP (11年的Spring 教学视频) AOP还是比较艰涩的东西. 从刚开始 碰Java项目去找书看开始, 到学了拦截器知道AOP就是处理事务, 日志, 安 ...

  10. linux命令学习笔记(10):cat 命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示, 或者从标准输入读取内容并显示,它常与重定向符号配合使用. .命令格式: cat [选项] [文件] ...