- 浏览: 1849 次
- 性别:
最新评论
package crawls.crawls;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class crawlsClient extends Thread{
Scanner b= new Scanner(System.in);
private PrintWriter pw;
private BufferedReader br;
private Socket ss;
private String name;
public crawlsClient(){}
public crawlsClient(String a,int s,String name){
try {
this.name=name;
ss=new Socket(a,s);
br=new BufferedReader(new InputStreamReader(ss.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(ss.getOutputStream()),true);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
start();
}
@Override
public void run(){
try {
pw.println("你好,我是客户端:"+name);
String a=br.readLine();
System.out.println(a);
a=br.readLine();
System.out.println(a);
a=br.readLine();
System.out.println(a);
a=br.readLine();
System.out.println(a);
int t=6;
String a1;
a1=b.nextLine();
pw.println(a1);
a=br.readLine();
System.out.println(a);
a=br.readLine();
String [] a2=a.split("!");
for(String a3:a2)
{
System.out.println(a3);
}
while(t>=1) {
t--;
a=br.readLine();
System.out.println(a);
a1=b.nextLine();
pw.println(a1);
a=br.readLine();
if(a.equals("查询已结束")){
break;
}
System.out.println(a);
a=br.readLine();
String [] a4=a.split("!");
for(String a5:a4)
{
System.out.println(a5);
}
}
} catch (IOException e) {
e.printStackTrace();
}
try {
pw.close();
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/--------------------------------------------------/
package crawls.crawls;
import java.io.BufferedReader;
import java.io.File;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.io.OutputStreamWriter;
import java.io.OutputStreamWriter;
public class crawlSData extends Thread {
private static BufferedReader br1;
private static BufferedReader br;
private static PrintWriter pw;
private static Socket ss;
private static ArrayList<String> list1=new ArrayList<String>();
private static ArrayList<String> list2=new ArrayList<String>();
private static ArrayList<String> list3=new ArrayList<String>();
private static ArrayList<String> list4=new ArrayList<String>();
private static Scanner b= new Scanner(System.in);//new一个输入语句
private static File file =new File("D:/tom/data.txt");//导入一个包含数据的文本
public crawlSData(){}
public crawlSData(Socket ss){
this.ss=ss;
try {
br1=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
br=new BufferedReader(new InputStreamReader(ss.getInputStream()));
pw=new PrintWriter(new OutputStreamWriter(ss.getOutputStream()),true);
} catch (IOException e) {
e.printStackTrace();
}
start();// 运行时立即启动线程
}
@Override
public void run(){
try {
String clientLine=br.readLine();// 定义a用于接受客户端第一句输入的字符串
String [] clientLines=clientLine.split(":");//定义字符串数组a2将a以“:”进行分割
System.out.println(clientLines[0]+":"+clientLines[1]);
pw.println("2014年7月22日-2014年7月28日国内航班表");
pw.println("你好!"+clientLines[1]+",有如下五个地方时间表");
pw.println("上海,北京,武汉,广州,长沙");
pw.println("请输入条件之一:例如:07-22,周六,吉祥航空,HO1251,出发21:50,出发虹桥国际机场T2,到达00:20,到达首都国际机场T3,520起"); //向客户端输出字符串
String console=br.readLine(); // 定义b用于接受客户端第二句输入的字符串
while(br1.read()!=-1){ //循环判断从文本中 输入的字符串是否为空
String input=br1.readLine();//定义c用于接受文本 输入的字符串
String[] inputs=input.split(",");//定义字符串数组c1将c以“,”分割
for(String inpu:inputs){ //定义字符串c2遍历字符串数组c1
if(inpu.equals(console))//判断
{
list1.add(input);//添加
list3.add("!"+input);//加上“!”添加到集合list3 以下有用
}
}
}if(list1.size()==0){//判断
pw.println("没有这个查询条件");
return;
}
ArrayList<String> list33=list3;//用String类型的list33copy集合list3用于对客户端输出
pw.println("时间 星期 航空公司 公司编号 出发时间 出发地点 到达时间 到达地点 预计价格");
pw.println(list33);
int t=6;
while(t>=1)
{
pw.println("请输入子查询条件:");
String d=br.readLine();//定义
if(d.equals("结束")){
pw.println("查询已结束");
break;
}
for(String lists1:list1)//遍历
{
String[] a1=lists1.split(",");
for(String b3:a1)//遍历
{
if(b3.equals(d))//判断
{
list2.add(lists1); //添加
list4.add("!"+lists1);
}
}
}
if(list2.size()==0){//判断
pw.println("没有这个查询条件");
return;
}
ArrayList<String> list44=list4;//用String类型的list44copy集合list4用于对客户端输出
pw.println("时间 星期 航空公司 公司编号 出发时间 起飞地点 到达时间 到达地点 预计价格");
pw.println(list44);
list1.removeAll(list1);//清空
list1.addAll(list2);//添加
list2.removeAll(list2);
list4.removeAll(list4);
t--;
}
} catch (IOException e) {
e.printStackTrace();
}
try {
br.close();//关闭
pw.close();
br1.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/--------------------------------------------------/
package crawls.crawls;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class crawlServer {
public static void main(String[] args) {
//Scanner console=new Scanner(System.in);
try {
ServerSocket server=new ServerSocket(8080);
System.out.println("等待客户端连接:......");
while(true){
Socket st=server.accept();
new crawlSData(st);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/--------------------------------------------------/
package crawls.crawls;
public class crawlsRun {
public static void main(String[] args) {
Thread t1=new crawlsClient("localhost",8080,"中国国航");
}
}
/--------------------------------------------------/
package crawls.crawls;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class CrawlUtil {
private static File file=new File("D:/tom/data.txt");
private static ArrayList<String> list=new ArrayList<String>();
private static ArrayList<String> list1=new ArrayList<String>();
private static PrintWriter writer;
private static BufferedReader reader;
private static int count;
private static int no=count++;
public static void saveData(){
File search =new File("C:/Users/virusea/Desktop/2.htm");
Document doc;
try {
doc = Jsoup.parse(search,"GBK");
Elements eles = doc.select("#searchPannel").select(".searchresult_content").select(".search_table_header").select("tbody");
Elements tds1 = doc.select("#searchPannel").select("#searchControlPannel").select(".current").select(".calendar_date");
for (Element ele : eles) {
Elements tds = ele.select("tr").select("td");
Elements planeTime = tds.get(0).select("div");
String datanow=tds1.get(0).text().trim();
String plan=planeTime.get(0).select("span").text().trim();
String planumber=planeTime.get(0).select("strong").text().trim();
String startime=tds.get(1).select("div").get(0).text().trim();
String startadd=tds.get(1).select("div").get(1).text().trim();
String arrivrtime=tds.get(3).text().trim().substring(0,5);
String arrivradd=tds.get(3).html();
String arrivradds=arrivradd.substring(arrivradd.lastIndexOf("</div>") + 6);
String price=tds.get(7).text().trim().substring(1);
list.add(" "+datanow+","+plan+","+planumber+", 出发时间:"+startime+", 出发地点:"+startadd+", 到达时间:"+arrivrtime+", 到达地点"+arrivradds+","+price);
}
writer=new PrintWriter(new OutputStreamWriter(new FileOutputStream(file)),true);
//writer.clear();
} catch (IOException e) {
e.printStackTrace();
}
//writer.close();
}
public static void readData() throws IOException{
reader=new BufferedReader(new InputStreamReader(new FileInputStream(file)));
for(String lists:list)
{
writer.println(lists);
}
Scanner console= new Scanner(System.in);
System.out.println("请输入查询条件:");
String input=console.nextLine();
if(reader==null)
{
}else{
try {
while(reader.read()!=-1){
String b1=reader.readLine();
if(b1==null){
System.out.println("被查询内容为空!");
}else{
String[] a1=b1.split(",");
for(String b3:a1){
if(b3.equals(input))
{
System.out.println(Arrays.toString(a1));
count++;
System.out.println("共查询到数据数:"+count+"条");
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
reader.close();
}
public static void main(String[] args) throws IOException {
saveData();
readData();
}
}
/--------------------------------------------------/
相关推荐
在“java抓取网页数据”这个主题中,我们将深入探讨如何利用Java来抓取并处理互联网上的信息。 首先,我们要了解什么是网络爬虫。网络爬虫(Web Crawler)是自动遍历互联网的程序,通过抓取网页内容并存储在本地,...
它不仅考验开发者对Java编程、多线程处理、网络通信以及数据存储等技术的掌握,还要求对爬虫算法、网页结构有深刻理解,同时需关注爬虫的伦理与法律规定。通过精心设计和不断优化,可以构建出高效、稳定的网络爬虫...
总之,这个项目通过Java多线程技术实现了一个搜索引擎,涵盖了从网页抓取、数据存储、索引构建到查询服务的完整流程。开发者不仅需要熟悉Java编程,还要理解搜索引擎的基本原理,掌握相关的数据结构和算法,以及并发...
Java 多线程下载网站是一种技术,用于提高从互联网上获取大文件或整个网站内容的效率。...通过学习和实践这个项目,开发者不仅可以掌握多线程下载的技巧,还能深入理解Java并发编程和Web抓取的相关知识。
6. **多线程**:为了提高爬虫效率,可以使用多线程同时下载多个图片。Java的并发库提供了ExecutorService和Future等工具,可以帮助我们实现这一功能。 7. **异常处理**:在编写爬虫时,需要考虑各种可能的异常情况...
根据提供的文件信息,文档标题为“java爬虫抓取网页数据教程”,此文件属于IT技术类教程,特别关注于Java编程语言在编写网络爬虫方面的应用。在这份教程中,将会涉及到使用HttpClient工具在Java环境中抓取网页数据的...
在IT行业中,Java爬虫是一种常见的技术,用于自动抓取网页信息,特别是在处理大量数据时,采用多线程可以显著提升爬取效率。本项目是一个使用Java编写的多线程爬虫,专为爬取小说网站设计。在这个项目中,我们将深入...
1. **爬虫框架**:提供多线程或异步处理,以便同时抓取多个网页,提高效率。 2. **数据解析模块**:解析HTML和XML文档,提取所需信息。 3. **请求管理**:处理重试、延迟、代理和反爬虫策略,以确保抓取过程稳定且...
在多线程环境下,开发者可能设计了一个线程池,将每个网页的抓取任务分配给不同的线程,这样可以并行处理多个网页,显著提高整体的抓取速度。线程池的创建和管理通常涉及到了Java的ExecutorService接口和...
2. **多线程**:为了提高抓取效率,我们可以使用多线程同时处理多个图片的下载任务。Java的`ExecutorService`和`Future`接口可以帮助我们管理线程池和异步任务。 3. **缓存机制**:为了避免重复下载同一张图片,...
本项目提供了一个基础的Java实现,帮助你理解网络爬虫的工作原理,并且可以根据自己的需求进行配置来抓取特定的网页和云盘中的内容。 在编写网络爬虫时,我们通常会涉及到以下几个关键知识点: 1. **HTTP协议**:...
在这里,我们将深入探讨“搜索引擎,spider抓取”这一主题,包括多线程抓取、网页结构化保存以及相关的技术实现。 首先,我们要理解搜索引擎的爬虫是如何工作的。爬虫是一个自动遍历互联网页面的程序,它从一个或...
12. **缓存策略**:为了优化性能,可以实现缓存机制,对已下载过的网页进行本地存储,避免重复下载。 以上就是关于"现实网页下载java源代码"的相关知识点。实际的源代码可能包含了上述部分或全部技术,通过这些技术...
本示例项目“基于Java语言的BT网页内容爬虫程序”提供了如何使用Java进行网页抓取的具体实践,这对于数据分析、网站监控或者信息检索等场景都非常有价值。下面将详细介绍这个项目的相关知识点。 首先,我们需要理解...
【标题】:“居于多线程的网络爬虫”指的是使用多线程技术来提高网络爬虫抓取网页效率的一种编程实践。在Java环境中,这种爬虫设计旨在优化资源利用,提升爬取速度,同时应对复杂的网络环境。 【描述】:网络爬虫是...
3. **多线程**:为了提高抓取速度,爬虫通常会并行处理多个URL,涉及多线程编程。 4. **异常处理**:处理网络错误、解析错误等各种异常情况。 5. **数据结构与算法**:合理使用队列、栈等数据结构实现URL调度。 6. *...
8. **线程安全**:如果需要多线程操作,还需要考虑线程安全问题,避免并发访问时的数据冲突。 9. **依赖管理**:项目中引入的外部库(如HttpClient、Jsoup)需要通过Maven或Gradle等工具进行管理,确保版本兼容性。...
Java网络爬虫是一个用于自动化抓取互联网数据的程序,它能遍历网页,提取所需信息并存储在本地。本项目“java网络爬虫小项目”是使用Java编程语言实现的一个小型爬虫应用,旨在帮助初学者理解网络爬虫的基本原理和...
- **多线程**:为了提高爬虫的效率,通常会使用多线程技术并发地下载网页和图片。 - **URL编码与解码**:在处理URL时,需要对特殊字符进行编码以确保正确传输。 - **异常处理**:在网络爬虫中,需要处理各种可能...