`
legend9999
  • 浏览: 30583 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

正则表达式解析出页面所有链接,并得到链接的内容

阅读更多
Main类的main方法得到所有链接,此方法是带链接状态的
package com.logistics;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;

public class Main1 {

	/**
	 * @param args
	 * @throws IOException
	 * @throws ClientProtocolException
	 */
	public static void main(String[] args) throws Exception {
		 // Create and initialize HTTP parameters  
        HttpParams params = new BasicHttpParams();  
        ConnManagerParams.setMaxTotalConnections(params, 10);  
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);  
  
        // Create and initialize scheme registry  
        SchemeRegistry schemeRegistry = new SchemeRegistry();  
        schemeRegistry.register(  
                new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));  
  
        ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);  
		HttpClient client = new DefaultHttpClient(cm, params);
		HttpGet get = new HttpGet("http://localhost:8080/docs/");
		HttpResponse response = client.execute(get);
		HttpEntity entity = response.getEntity();
		byte[] b = new byte[1024];
		ByteArrayOutputStream stream = new ByteArrayOutputStream();
		if (entity != null) {
			InputStream is = entity.getContent();
			while (is.read(b) != -1) {
				stream.write(b);
			}
		}
		Pattern pattern = Pattern.compile("\\w+\\.html");
		Matcher matcher = pattern.matcher(stream.toString("utf-8"));
		ArrayList<String> list=new ArrayList<String>();
		while (matcher.find()) {
			list.add("http://localhost:8080/docs/"+matcher.group());
		}
		for (int i = 0; i < list.size(); i++) {
			new SpiderThread(client, new HttpGet(list.get(i)), i + 1).run();
		}
	}
}


然后使用线程得到链接内容
package com.logistics;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.EntityUtils;

public class SpiderThread extends Thread {
	 private final HttpClient httpClient;  
     private final HttpContext context;  
     private final HttpGet httpGet;  
     private final int id;  

     public SpiderThread(HttpClient 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() {  
    	Long start = System.currentTimeMillis();
         try {  
             HttpResponse response = httpClient.execute(httpGet);  
             HttpEntity entity = response.getEntity();  
             if (entity != null) {  
                 byte[] bytes = EntityUtils.toByteArray(entity);  
//                 System.out.println(new String(bytes,"utf-8"));  
                 System.out.println(httpGet.getURI().getPath());  
             }  
         } catch (Exception e) {  
             httpGet.abort();  
             System.out.println(id + " - error: " + e);  
         }  
         Long end = System.currentTimeMillis();
 		System.out.println(id +"  --  用时:"+(end-start));
     }  
}
0
1
分享到:
评论
8 楼 wxq594808632 2012-01-11  
legend9999 写道
杨胜寒 写道
legend9999 写道
杨胜寒 写道
legend9999 写道
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!

那你未免太小看Apache的工程师们了,


那他们用什么来匹配 

你不应该这么问,应为HtmlParser不是为了抽取页面链接而生的,它主要是用来解析或纠正html的。如果楼主对网页解析感兴趣,可以查查HtmlParser的资料,因为它应该是当前java语言中最好的网页解析组件了

HtmlParser
这个东东在现在的项目中也使用了,用来抓取页面,做日志了!


相比HtmlParser,我更推荐jsoup
7 楼 legend9999 2012-01-10  
杨胜寒 写道
legend9999 写道
杨胜寒 写道
legend9999 写道
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!

那你未免太小看Apache的工程师们了,


那他们用什么来匹配 

你不应该这么问,应为HtmlParser不是为了抽取页面链接而生的,它主要是用来解析或纠正html的。如果楼主对网页解析感兴趣,可以查查HtmlParser的资料,因为它应该是当前java语言中最好的网页解析组件了

HtmlParser
这个东东在现在的项目中也使用了,用来抓取页面,做日志了!
6 楼 杨胜寒 2012-01-10  
legend9999 写道
杨胜寒 写道
legend9999 写道
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!

那你未免太小看Apache的工程师们了,


那他们用什么来匹配 

你不应该这么问,应为HtmlParser不是为了抽取页面链接而生的,它主要是用来解析或纠正html的。如果楼主对网页解析感兴趣,可以查查HtmlParser的资料,因为它应该是当前java语言中最好的网页解析组件了
5 楼 legend9999 2012-01-10  
杨胜寒 写道
legend9999 写道
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!

那你未免太小看Apache的工程师们了,


那他们用什么来匹配 
4 楼 杨胜寒 2012-01-10  
legend9999 写道
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!

那你未免太小看Apache的工程师们了,
3 楼 legend9999 2012-01-10  
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

那为什么不采用HtmlParser或其他网页解析器来解析网页呢?
这类网页解析器也是用正则来匹配的吧!
2 楼 legend9999 2012-01-10  
杨胜寒 写道
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。


这是前一段时间,一个朋友想让我帮他抓页面的数据,好2000多分页,还要登录进去才行,就给他弄了个这。没考虑什么速度问题。
1 楼 杨胜寒 2012-01-10  
不知道楼主做这样一个东西是干什么用的,说真的,一点价值都没有。
既然是用HttpClient,那为什么不采用HtmlParser或其他网页解析器来解析网页呢?且不说正则匹配的效率有多低,网页中的链接可不会都是html后缀的,且有绝对路径和相对路径的区分,以楼主的算法,玩玩还可以。

相关推荐

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...

    基于电商网络的数据采集与分析毕业论文(33页12525字数).docx

    通过正则表达式解析源码,即解析页面,然后提取相关数据。最后使用pymongo库连接MongoDB数据库和Python将爬取的数据存入该数据库。通过这几个步骤我们就能实现基本的爬虫功能并将数据保存。 爬取完成产品信息后,...

    豆瓣电影TOP250网络爬虫并保存为表格

    首先通过构造统一资源器即网址(URL),进行豆瓣电影Top250主页的网页获取,利用Beautiful Soup解析html获得数据,再利用正则表达式匹配并获取开发者工具调试页面中的电影各项信息,接着对其中的一些无用的字符进行...

    100个直接可以拿来用的JavaScript实用功能代码片段(1-10)

    81、原生JavaScript用正则表达式提取页面代码中所有网址 82、原生JavaScript用正则表达式清除相同的数组(低效率) 83、原生JavaScript用正则表达式清除相同的数组(高效率) 84、原生JavaScript用正则表达式按字母排序...

    谷歌SEO营销推广课,零基础的小白也能看懂-教程网盘链接提取码下载.txt

    课程内容: ...第15课:正则表达式 第16课:小域名大学问之域名的重要性 第17课:小域名大学问之域名大众化问题 第18课:小域名大学问之域名解析方式 第19课:小域名大学问之领动官网支持的域名使用方式

    网页解析器,用于网络爬虫解析页面, 不懂网页解析也能写爬虫.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    基于python的1024爬虫,可爬下1024的文章和图片放到当前目录上

    基于Python的1024爬虫是一个功能强大的工具,可以从1024网站上抓取文章和图片并保存到本地目录。...5. 爬虫具有很好的可扩展性,可以通过修改相应的正则表达式和解析逻辑,适应1024网站的更新或其他类似网站。

    分类信息采集软件-熊猫采集介绍文档.doc

    智能化辅助操作熊猫采集软件利用智能化搜索引擎的解析内核,可以帮助用户自动找到分页链接、分离页面框架内容等等,努力减少用户的操作过程。 可视化鼠标操作全程可视化鼠标操作,用户无需使用正则表达式技术,轻松...

    java项目源码之网络爬虫(蜘蛛)的实现.rar

    页面解析:网络爬虫会解析抓取到的网页内容,提取出其中的有用信息,如链接、文本内容、图片等。常用的解析技术包括正则表达式、HTML解析器(如Jsoup)、XPath等。 链接管理:爬虫会管理已抓取的链接,并根据一定的...

    Java爬虫入门——使用Jsoup解析HTML页面.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    基于Apache Nutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

    MataHacks-2021-Python-webscraping

    这将在Python3中进行介绍。 练习: 从任何网站解析一个简单的标题 解析维基百科文章中的一段 解析网站或Wikipedia文章...使用简单的正则表达式解决方案来抓取简单的内容,例如页面上的标题和其他易于查找的内容 除非

    Oh That Issue-crx插件

    在“拉取请求列表”页面上:该扩展将使用提供的正则表达式解析PR中的注释。 主要是我这样做是为了帮助我工作,但也许也会对其他人有所帮助。 更改列表2.0.0-重命名扩展名。 添加了对除jira之外的其他问题跟踪器的...

    python多线程爬虫爬取电影天堂资源

    - Python基础知识,如文件操作、正则表达式等 - 网络爬虫技术,如请求发送、response解析等 - HTML解析技术,如BeautifulSoup等解析库的使用 - 多线程编程,如Thread模块的应用 - 异步I/O和事件循环模型,可选择asyncio等...

    java解析给定url

    * 提取出上图所示位置的页面信息(仅图中所要求的内容),将其内容按如下格式,输出到控制台 * GrapWeatherInfo * @author lihsh * @version 1.0 * */ public class HtmlParse { List&lt;String&gt; configList = ...

    淘宝已买到的商品数据爬虫.rar

    提取数据:通过选择器、Xpath和正则表达式等方法,从DOM结构中提取所需的数据,如标题、链接、文本内容、图片等。 数据处理和存储:对提取的数据进行进一步处理和清洗,可以进行数据过滤、去重、格式化等操作。然后...

    MATLABMYSQL爬虫-zhgd.m

    2.根据抓取的对象html特征,制定不同的正则表达式筛选出需要的内容  2.1类别:提前的关键字,用\连接,组成创建目录的格式,mkdir函数创建目录  2.2图片:提取图片地址,判断图片数量,去前缀,补充链接,使用...

    winform模拟网络蜘蛛源码

    较好的性能:基于正则表达式的页面解析、适度加锁、维持HTTP连接等。 今后有空可能加入的特性: 新特性 介绍 爬取文件用Berkeley DB存储 提高性能: 常用操作系统不善于处理大量小文件 基于URL Ranking的优先级...

    网页爬虫,目前能爬拉钩职位一级页面JSON内容和二级职位详情内容.zip

    常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...

Global site tag (gtag.js) - Google Analytics