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));
}
}
分享到:
相关推荐
RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/...
通过正则表达式解析源码,即解析页面,然后提取相关数据。最后使用pymongo库连接MongoDB数据库和Python将爬取的数据存入该数据库。通过这几个步骤我们就能实现基本的爬虫功能并将数据保存。 爬取完成产品信息后,...
首先通过构造统一资源器即网址(URL),进行豆瓣电影Top250主页的网页获取,利用Beautiful Soup解析html获得数据,再利用正则表达式匹配并获取开发者工具调试页面中的电影各项信息,接着对其中的一些无用的字符进行...
81、原生JavaScript用正则表达式提取页面代码中所有网址 82、原生JavaScript用正则表达式清除相同的数组(低效率) 83、原生JavaScript用正则表达式清除相同的数组(高效率) 84、原生JavaScript用正则表达式按字母排序...
课程内容: ...第15课:正则表达式 第16课:小域名大学问之域名的重要性 第17课:小域名大学问之域名大众化问题 第18课:小域名大学问之域名解析方式 第19课:小域名大学问之领动官网支持的域名使用方式
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
基于Python的1024爬虫是一个功能强大的工具,可以从1024网站上抓取文章和图片并保存到本地目录。...5. 爬虫具有很好的可扩展性,可以通过修改相应的正则表达式和解析逻辑,适应1024网站的更新或其他类似网站。
智能化辅助操作熊猫采集软件利用智能化搜索引擎的解析内核,可以帮助用户自动找到分页链接、分离页面框架内容等等,努力减少用户的操作过程。 可视化鼠标操作全程可视化鼠标操作,用户无需使用正则表达式技术,轻松...
页面解析:网络爬虫会解析抓取到的网页内容,提取出其中的有用信息,如链接、文本内容、图片等。常用的解析技术包括正则表达式、HTML解析器(如Jsoup)、XPath等。 链接管理:爬虫会管理已抓取的链接,并根据一定的...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
这将在Python3中进行介绍。 练习: 从任何网站解析一个简单的标题 解析维基百科文章中的一段 解析网站或Wikipedia文章...使用简单的正则表达式解决方案来抓取简单的内容,例如页面上的标题和其他易于查找的内容 除非
在“拉取请求列表”页面上:该扩展将使用提供的正则表达式解析PR中的注释。 主要是我这样做是为了帮助我工作,但也许也会对其他人有所帮助。 更改列表2.0.0-重命名扩展名。 添加了对除jira之外的其他问题跟踪器的...
- Python基础知识,如文件操作、正则表达式等 - 网络爬虫技术,如请求发送、response解析等 - HTML解析技术,如BeautifulSoup等解析库的使用 - 多线程编程,如Thread模块的应用 - 异步I/O和事件循环模型,可选择asyncio等...
* 提取出上图所示位置的页面信息(仅图中所要求的内容),将其内容按如下格式,输出到控制台 * GrapWeatherInfo * @author lihsh * @version 1.0 * */ public class HtmlParse { List<String> configList = ...
提取数据:通过选择器、Xpath和正则表达式等方法,从DOM结构中提取所需的数据,如标题、链接、文本内容、图片等。 数据处理和存储:对提取的数据进行进一步处理和清洗,可以进行数据过滤、去重、格式化等操作。然后...
2.根据抓取的对象html特征,制定不同的正则表达式筛选出需要的内容 2.1类别:提前的关键字,用\连接,组成创建目录的格式,mkdir函数创建目录 2.2图片:提取图片地址,判断图片数量,去前缀,补充链接,使用...
较好的性能:基于正则表达式的页面解析、适度加锁、维持HTTP连接等。 今后有空可能加入的特性: 新特性 介绍 爬取文件用Berkeley DB存储 提高性能: 常用操作系统不善于处理大量小文件 基于URL Ranking的优先级...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...