导航:首页 > 编程大全 > 自己动手写网络爬虫源代码

自己动手写网络爬虫源代码

发布时间:2022-09-28 15:27:02

『壹』 自己动手写网络爬虫的作品目录

第1章 全面剖析网络爬虫 3 1.1 抓取网页1.3.3 使用berkeley db构建爬虫队列示例1.1.1 深入理解url1.3.4 使用布隆过滤器构建visited表1.1.2 通过指定的url抓取网页内容1.3.5 详解heritrix爬虫队列1.1.3 java网页抓取示例1.4 设计爬虫架构 .1.1.4 处理http状态码1.4.1 爬虫架构1.2 宽度优先爬虫和带偏好的爬虫1.4.2 设计并行爬虫架构1.2.1 图的宽度优先遍历1.4.3 详解heritrix爬虫架构1.2.2 宽度优先遍历互联网1.5 使用多线程技术提升爬虫性能1.2.3 java宽度优先爬虫示例1.5.1 详解java多线程1.2.4 带偏好的爬虫1.5.2 爬虫中的多线程1.2.5 java带偏好的爬虫示例1.5.3 一个简单的多线程爬虫实现1.3 设计爬虫队列1.5.4 详解heritrix多线程结构1.3.1 爬虫队列1.6 本章小结1.3.2 使用berkeley db构建爬虫队列第2章 分布式爬虫 69 2.1 设计分布式爬虫2.4.2 开源bigtable——hbase2.1.1 分布式与云计算2.5 google的成功之道——maprece算法2.1.2 分布式与云计算技术在爬虫中的应用——浅析google的云计算架构2.5.1 详解maprece算法2.2 分布式存储2.5.2 maprece容错处理2.2.1 从ralation_db到key/value存储2.5.3 maprece实现架构2.2.2 consistent hash算法2.5.4 hadoop中的maprece简介2.2.3 consistent hash代码实现2.5.5 wordcount例子的实现2.3 google的成功之道——gfs2.6 nutch中的分布式2.3.1 gfs详解2.6.1 nutch爬虫详解2.3.2 开源gfs——hdfs2.6.2 nutch中的分布式2.4 google网页存储秘诀——bigtable2.7 本章小结2.4.1 详解bigtable第3章 爬虫的“方方面面”121 3.1 爬虫中的“黑洞”3.2.3 理解限定爬虫3.2 限定爬虫和主题爬虫3.2.4 java限定爬虫示例3.2.1 理解主题爬虫3.3 有“道德”的爬虫3.2.2 java主题爬虫3.4 本章小结第4章 “处理”html页面 159 4.1 征服正则表达式4.3 抽取正文4.1.1 学习正则表达式4.4 从javascript中抽取信息4.1.2 java正则表达式4.4.1 javascript抽取方法4.2 抽取html正文4.4.2 javascript抽取示例4.2.1 了解htmlparser4.5本章小结4.2.2 使用正则表达式抽取示例第5章 非html正文抽取 201 5.1 抽取pdf文件5.2.2 使用poi抽取word示例5.1.1 学习pdfbox5.2.3 使用poi抽取ppt示例5.1.2 使用pdfbox抽取示例5.2.4 使用poi抽取excel示例5.1.3 提取pdf文件标题5.3 抽取rtf 5.3.1 开源rtf文件解析器5.1.4 处理pdf格式的公文5.3.2 实现一个rtf文件解析器5.2 抽取office文档5.3.3 解析rtf示例5.2.1 学习poi5.4 本章小结第6章 多媒体抽取 231 6.1 抽取视频6.2 音频抽取6.1.1 抽取视频关键帧6.2.1 抽取音频6.1.2 java视频处理框架6.2.2 学习java音频抽取技术6.1.3 java视频抽取示例6.3 本章小结第7章去掉网页中的“噪声” 257 7.1 “噪声”对网页的影响7.3 利用“视觉”消除“噪声”7.2 利用“统计学”消除“噪声”7.3.1 “视觉”与“噪声”7.2.1 网站风格树7.3.2 “视觉去噪”java实现7.2.2“统计学去噪”java实现7.4 本章小结第8章 分析web图 283 8.1 存储web“图”8.4 pagerank的兄弟hits8.2 利用web“图”分析链接8.4.1 深入理解hits算法8.3 google的秘密——pagerank8.4.2 hits算法的java实现8.3.1 深入理解pagerank算法8.4.3 应用hits进行链接分析8.3.2 pagerank算法的java实现8.5 pagerank与hits的比较8.3.3 应用pagerank进行链接分析8.6 本章小结第9章 去掉重复的“文档” 317 9.1 何为“重复”的文档9.4 simhash排重9.2 去除“重复”文档——排重9.4.1 理解simhash9.3 利用“语义指纹”排重9.4.2 simhash排重的java实现9.3.1 理解“语义指纹”9.5 分布式文档排重9.3.2 “语义指纹”排重的java实现9.6 本章小结第10章 分类与聚类的应用 333 10.1 网页分类 10.1.1 收集语料库10.2 网页聚类10.1.2 选取网页的“特征”10.2.1 深入理解dbscan算法10.1.3 使用支持向量机进行网页分类10.2.2 使用dbscan算法聚类实例10.1.4 利用url地址进行网页分类10.3 本章小结10.1.5 使用adaboost进行网页分类

『贰』 用java编写网络爬虫,用来爬网络音乐资源,再返回java页面显示该怎么实现

下面是源代码,希望可以帮到你~~
package com.ly.mainprocess;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Consts;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

public class Test1 {
public static void main(String[] args){
Test1 test1 = new Test1();
System.out.println(test1.process("******","******"));
}

@SuppressWarnings("deprecation")
public boolean process(String username,String password) {
boolean ret=false;
DefaultHttpClient httpclient = new DefaultHttpClient();
try {
HttpGet httpget;
HttpResponse response;
HttpEntity entity;

List<Cookie> cookies;

//组建登录的post包
HttpPost httppost = new HttpPost("http://login.hi.mop.com/Login.do"); // 用户登录
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("nickname", username));
nvps.add(new BasicNameValuePair("password", password));
nvps.add(new BasicNameValuePair("origURL", "http://hi.mop.com/SysHome.do"));
nvps.add(new BasicNameValuePair("loginregFrom", "index"));
nvps.add(new BasicNameValuePair("ss", "10101"));

httppost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));
httppost.addHeader("Referer", "http://hi.mop.com/SysHome.do");
httppost.addHeader("Connection", "keep-alive");
httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
httppost.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
httppost.addHeader("Origin", "http://hi.mop.com");
httppost.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36");
response = httpclient.execute(httppost);
entity = response.getEntity();
// System.out.println("Login form get: " + response.getStatusLine());
EntityUtils.consume(entity);

// System.out.println("Post logon cookies:");
cookies = httpclient.getCookieStore().getCookies();
if (cookies.isEmpty()) {
// System.out.println("None");
} else {
for (int i = 0; i < cookies.size(); i++) {
// System.out.println("- " + cookies.get(i).toString());
}
}

//进行页面跳转
String url = ""; // 页面跳转
Header locationHeader = response.getFirstHeader("Location");
// System.out.println(locationHeader.getValue());
if (locationHeader != null) {
url = locationHeader.getValue(); // 得到跳转href
HttpGet httpget1 = new HttpGet(url);
response = httpclient.execute(httpget1);
// 登陆成功。。。hoho
}
entity = response.getEntity();
// System.out.println(response.getStatusLine());
if (entity != null) {
// System.out.println("Response content length: " + entity.getContentLength());
}
// 显示结果
BufferedReader reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
while ((line = reader.readLine()) != null) {
// System.out.println(line);
}

//自动打卡
// 访问网站的子网页。
HttpPost httppost1 = new HttpPost("http://home.hi.mop.com/ajaxGetContinusLoginAward.do"); // 设置个人信息页面
httppost1.addHeader("Content-Type", "text/plain;charset=UTF-8");
httppost1.addHeader("Accept", "text/plain, */*");
httppost1.addHeader("X-Requested-With", "XMLHttpRequest");
httppost1.addHeader("Referer", "http://home.hi.mop.com/Home.do");
response = httpclient.execute(httppost1);
entity = response.getEntity();
// System.out.println(response.getStatusLine());
if(response.getStatusLine().toString().indexOf("HTTP/1.1 200 OK")>=0){
ret = true;
}
if (entity != null) {
// System.out.println("Response content length: " + entity.getContentLength());
}
// 显示结果
reader = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (Exception e) {

} finally {
httpclient.getConnectionManager().shutdown();
}
return ret;
}
}

『叁』 求一个网络爬虫的完整代码,需要能自动递归爬取站内页面



importjava.net.*;
importjava.io.*;
importjava.util.regex.*;

//搜索Web爬行者
{

/*
*disallowListCache缓存robot不允许搜索的URL。Robot协议在Web站点的根目录下设置一个robots.txt文件,
*规定站点上的哪些页面是限制搜索的。搜索程序应该在搜索过程中跳过这些区域,下面是robots.txt的一个例子:#robots.txtfor
*http://somehost.com/User-agent:*Disallow:/cgi-bin/Disallow:
*/registration#/:/login
*/

privateHashMap<String,ArrayList<String>>disallowListCache=newHashMap<String,ArrayList<String>>();
ArrayList<String>errorList=newArrayList<String>();//错误信息
ArrayList<String>result=newArrayList<String>();//搜索到的结果
StringstartUrl;//开始搜索的起点
intmaxUrl;//最大处理的url数
StringsearchString;//要搜索的字符串(英文)
booleancaseSensitive=false;//是否区分大小写
booleanlimitHost=false;//是否在限制的主机内搜索

publicSearchCrawler(StringstartUrl,intmaxUrl,StringsearchString){
this.startUrl=startUrl;
this.maxUrl=maxUrl;
this.searchString=searchString;
}

publicArrayList<String>getResult(){
returnresult;
}

publicvoidrun(){//启动搜索线程

crawl(startUrl,maxUrl,searchString,limitHost,caseSensitive);
}

//检测URL格式
privateURLverifyUrl(Stringurl){
//只处理HTTPURLs.
if(!url.toLowerCase().startsWith("http://"))
returnnull;

URLverifiedUrl=null;
try{
verifiedUrl=newURL(url);
}catch(Exceptione){
returnnull;
}

returnverifiedUrl;
}

//检测robot是否允许访问给出的URL.
privatebooleanisRobotAllowed(URLurlToCheck){
Stringhost=urlToCheck.getHost().toLowerCase();//获取给出url的主机
//System.out.println("主机="+host);

//获取主机不允许搜索的URL缓存
ArrayList<String>disallowList=disallowListCache.get(host);

//如果还没有缓存,下载并缓存。
if(disallowList==null){
disallowList=newArrayList<String>();
try{
URLrobotsFileUrl=newURL("http://"+host+"/robots.txt");
BufferedReaderreader=newBufferedReader(
newInputStreamReader(robotsFileUrl.openStream()));

//读robot文件,创建不允许访问的路径列表。
Stringline;
while((line=reader.readLine())!=null){
if(line.indexOf("Disallow:")==0){//是否包含"Disallow:"
StringdisallowPath=line.substring("Disallow:"
.length());//获取不允许访问路径

//检查是否有注释。
intcommentIndex=disallowPath.indexOf("#");
if(commentIndex!=-1){
disallowPath=disallowPath.substring(0,
commentIndex);//去掉注释
}

disallowPath=disallowPath.trim();
disallowList.add(disallowPath);
}
}

//缓存此主机不允许访问的路径。
disallowListCache.put(host,disallowList);
}catch(Exceptione){
returntrue;//web站点根目录下没有robots.txt文件,返回真
}
}

Stringfile=urlToCheck.getFile();
//System.out.println("文件getFile()="+file);
for(inti=0;i<disallowList.size();i++){
Stringdisallow=disallowList.get(i);
if(file.startsWith(disallow)){
returnfalse;
}
}

returntrue;
}

privateStringdownloadPage(URLpageUrl){
try{
//OpenconnectiontoURLforreading.
BufferedReaderreader=newBufferedReader(newInputStreamReader(
pageUrl.openStream()));

//Readpageintobuffer.
Stringline;
StringBufferpageBuffer=newStringBuffer();
while((line=reader.readLine())!=null){
pageBuffer.append(line);
}

returnpageBuffer.toString();
}catch(Exceptione){
}

returnnull;
}

//从URL中去掉"www"
privateStringremoveWwwFromUrl(Stringurl){
intindex=url.indexOf("://www.");
if(index!=-1){
returnurl.substring(0,index+3)+url.substring(index+7);
}

return(url);
}

//解析页面并找出链接
privateArrayList<String>retrieveLinks(URLpageUrl,StringpageContents,
HashSetcrawledList,booleanlimitHost){
//用正则表达式编译链接的匹配模式。
Patternp=Pattern.compile("<a\s+href\s*=\s*"?(.*?)["|>]",
Pattern.CASE_INSENSITIVE);
Matcherm=p.matcher(pageContents);

ArrayList<String>linkList=newArrayList<String>();
while(m.find()){
Stringlink=m.group(1).trim();

if(link.length()<1){
continue;
}

//跳过链到本页面内链接。
if(link.charAt(0)=='#'){
continue;
}

if(link.indexOf("mailto:")!=-1){
continue;
}

if(link.toLowerCase().indexOf("javascript")!=-1){
continue;
}

if(link.indexOf("://")==-1){
if(link.charAt(0)=='/'){//处理绝对地
link="http://"+pageUrl.getHost()+":"
+pageUrl.getPort()+link;
}else{
Stringfile=pageUrl.getFile();
if(file.indexOf('/')==-1){//处理相对地址
link="http://"+pageUrl.getHost()+":"
+pageUrl.getPort()+"/"+link;
}else{
Stringpath=file.substring(0,
file.lastIndexOf('/')+1);
link="http://"+pageUrl.getHost()+":"
+pageUrl.getPort()+path+link;
}
}
}

intindex=link.indexOf('#');
if(index!=-1){
link=link.substring(0,index);
}

link=removeWwwFromUrl(link);

URLverifiedLink=verifyUrl(link);
if(verifiedLink==null){
continue;
}

/*如果限定主机,排除那些不合条件的URL*/
if(limitHost
&&!pageUrl.getHost().toLowerCase()
.equals(verifiedLink.getHost().toLowerCase())){
continue;
}

//跳过那些已经处理的链接.
if(crawledList.contains(link)){
continue;
}

linkList.add(link);
}

return(linkList);
}

//搜索下载Web页面的内容,判断在该页面内有没有指定的搜索字符串

(StringpageContents,
StringsearchString,booleancaseSensitive){
StringsearchContents=pageContents;
if(!caseSensitive){//如果不区分大小写
searchContents=pageContents.toLowerCase();
}

Patternp=Pattern.compile("[\s]+");
String[]terms=p.split(searchString);
for(inti=0;i<terms.length;i++){
if(caseSensitive){
if(searchContents.indexOf(terms[i])==-1){
returnfalse;
}
}else{
if(searchContents.indexOf(terms[i].toLowerCase())==-1){
returnfalse;
}
}
}

returntrue;
}

//执行实际的搜索操作
publicArrayList<String>crawl(StringstartUrl,intmaxUrls,
StringsearchString,booleanlimithost,booleancaseSensitive){

System.out.println("searchString="+searchString);
HashSet<String>crawledList=newHashSet<String>();
LinkedHashSet<String>toCrawlList=newLinkedHashSet<String>();

if(maxUrls<1){
errorList.add("InvalidMaxURLsvalue.");
System.out.println("InvalidMaxURLsvalue.");
}

if(searchString.length()<1){
errorList.add("MissingSearchString.");
System.out.println("MissingsearchString");
}

if(errorList.size()>0){
System.out.println("err!!!");
returnerrorList;
}

//从开始URL中移出www
startUrl=removeWwwFromUrl(startUrl);

toCrawlList.add(startUrl);
while(toCrawlList.size()>0){

if(maxUrls!=-1){
if(crawledList.size()==maxUrls){
break;
}
}

//GetURLatbottomofthelist.
Stringurl=toCrawlList.iterator().next();

//RemoveURLfromthetocrawllist.
toCrawlList.remove(url);

//ConvertstringurltoURLobject.
URLverifiedUrl=verifyUrl(url);

//.
if(!isRobotAllowed(verifiedUrl)){
continue;
}

//增加已处理的URL到crawledList
crawledList.add(url);
StringpageContents=downloadPage(verifiedUrl);

if(pageContents!=null&&pageContents.length()>0){
//从页面中获取有效的链接
ArrayList<String>links=retrieveLinks(verifiedUrl,
pageContents,crawledList,limitHost);

toCrawlList.addAll(links);

if(searchStringMatches(pageContents,searchString,
caseSensitive)){
result.add(url);
System.out.println(url);
}
}

}
returnresult;
}

//主函数
publicstaticvoidmain(String[]args){
if(args.length!=3){
System.out
.println("Usage:");
return;
}
intmax=Integer.parseInt(args[1]);
SearchCrawlercrawler=newSearchCrawler(args[0],max,args[2]);
Threadsearch=newThread(crawler);
System.out.println("Startsearching...");
System.out.println("result:");
search.start();

}
}

参考:http://www.cnblogs.com/tjsquall/archive/2007/12/22/1010831.html

『肆』 java网络爬虫

1,网络机器人Java编程指南,浅显易懂,有点过时,但适合新手
2,自己动手写网络爬虫,有点基础还可以看看,写的有点乱,很多内容交代不清楚,并且大篇幅代码抄袭。。。
3,搜索引擎 ——原理、技术与系统,北大天网为案例,很好很强大,有点学术味道
4,Web数据挖掘 Bing Liu,刘兵的书,强烈推荐
5,搜索引擎:信息检索实践,很好的书,强烈推荐
还有一些论文,自己去找吧
案例的话,可以研究下Nutch爬虫部分代码,写的很清晰
有了以上这些,应该算是入门了~

『伍』 求《自己动手写网络爬虫(修订版)》全文免费下载百度网盘资源,谢谢~

《自己动手写网络爬虫(修订版) 》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1zsVIGi0y6tWLohjyVfelSg

?pwd=rsce 提取码: rsce
简介:主要包括从互联网获取信息与提取信息和对Web信息挖掘等内容,本书适用于有Java程序设计基础的开发人员。同时也可以作为计算机相关专业本科生或研究生的参考教材

『陆』 java 网络爬虫怎么实现

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。对于垂直搜索来说,聚焦爬虫,即有针对性地爬取特定主题网页的爬虫,更为适合。

以下是一个使用java实现的简单爬虫核心代码:
public void crawl() throws Throwable {
while (continueCrawling()) {
CrawlerUrl url = getNextUrl(); //获取待爬取队列中的下一个URL
if (url != null) {
printCrawlInfo();
String content = getContent(url); //获取URL的文本信息

//聚焦爬虫只爬取与主题内容相关的网页,这里采用正则匹配简单处理
if (isContentRelevant(content, this.regexpSearchPattern)) {
saveContent(url, content); //保存网页至本地

//获取网页内容中的链接,并放入待爬取队列中
Collection urlStrings = extractUrls(content, url);
addUrlsToUrlQueue(url, urlStrings);
} else {
System.out.println(url + " is not relevant ignoring ...");
}

//延时防止被对方屏蔽
Thread.sleep(this.delayBetweenUrls);
}
}
closeOutputStream();
}
private CrawlerUrl getNextUrl() throws Throwable {
CrawlerUrl nextUrl = null;
while ((nextUrl == null) && (!urlQueue.isEmpty())) {
CrawlerUrl crawlerUrl = this.urlQueue.remove();
//doWeHavePermissionToVisit:是否有权限访问该URL,友好的爬虫会根据网站提供的"Robot.txt"中配置的规则进行爬取
//isUrlAlreadyVisited:URL是否访问过,大型的搜索引擎往往采用BloomFilter进行排重,这里简单使用HashMap
//isDepthAcceptable:是否达到指定的深度上限。爬虫一般采取广度优先的方式。一些网站会构建爬虫陷阱(自动生成一些无效链接使爬虫陷入死循环),采用深度限制加以避免
if (doWeHavePermissionToVisit(crawlerUrl)
&& (!isUrlAlreadyVisited(crawlerUrl))
&& isDepthAcceptable(crawlerUrl)) {
nextUrl = crawlerUrl;
// System.out.println("Next url to be visited is " + nextUrl);
}
}
return nextUrl;
}
private String getContent(CrawlerUrl url) throws Throwable {
//HttpClient4.1的调用与之前的方式不同
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url.getUrlString());
StringBuffer strBuf = new StringBuffer();
HttpResponse response = client.execute(httpGet);
if (HttpStatus.SC_OK == response.getStatusLine().getStatusCode()) {
HttpEntity entity = response.getEntity();
if (entity != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(entity.getContent(), "UTF-8"));
String line = null;
if (entity.getContentLength() > 0) {
strBuf = new StringBuffer((int) entity.getContentLength());
while ((line = reader.readLine()) != null) {
strBuf.append(line);
}
}
}
if (entity != null) {
nsumeContent();
}
}
//将url标记为已访问
markUrlAsVisited(url);
return strBuf.toString();
}
public static boolean isContentRelevant(String content,
Pattern regexpPattern) {
boolean retValue = false;
if (content != null) {
//是否符合正则表达式的条件
Matcher m = regexpPattern.matcher(content.toLowerCase());
retValue = m.find();
}
return retValue;
}
public List extractUrls(String text, CrawlerUrl crawlerUrl) {
Map urlMap = new HashMap();
extractHttpUrls(urlMap, text);
extractRelativeUrls(urlMap, text, crawlerUrl);
return new ArrayList(urlMap.keySet());
}
private void extractHttpUrls(Map urlMap, String text) {
Matcher m = (text);
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
// System.out.println("Term = " + term);
if (term.startsWith("http")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
urlMap.put(term, term);
System.out.println("Hyperlink: " + term);
}
}
}
}
private void extractRelativeUrls(Map urlMap, String text,
CrawlerUrl crawlerUrl) {
Matcher m = relativeRegexp.matcher(text);
URL textURL = crawlerUrl.getURL();
String host = textURL.getHost();
while (m.find()) {
String url = m.group();
String[] terms = url.split("a href=\"");
for (String term : terms) {
if (term.startsWith("/")) {
int index = term.indexOf("\"");
if (index > 0) {
term = term.substring(0, index);
}
String s = //" + host + term;
urlMap.put(s, s);
System.out.println("Relative url: " + s);
}
}
}

}
public static void main(String[] args) {
try {
String url = "";
Queue urlQueue = new LinkedList();
String regexp = "java";
urlQueue.add(new CrawlerUrl(url, 0));
NaiveCrawler crawler = new NaiveCrawler(urlQueue, 100, 5, 1000L,
regexp);
// boolean allowCrawl = crawler.areWeAllowedToVisit(url);
// System.out.println("Allowed to crawl: " + url + " " +
// allowCrawl);
crawler.crawl();
} catch (Throwable t) {
System.out.println(t.toString());
t.printStackTrace();
}
}

『柒』 java网络爬虫程序怎么运行

用HTTPclient或者htmlunit工具包,他们都可以做爬虫获取网页的工具。比如htmlunit,楼主可以这样获取网页源码:

importcom.gargoylesoftware.htmlunit.WebClient;
importcom.gargoylesoftware.htmlunit.html.HtmlPage;
importcom.gargoylesoftware.htmlunit.BrowserVersion;
importcom.gargoylesoftware.htmlunit.html.HtmlDivision;
importcom.gargoylesoftware.htmlunit.html.HtmlAnchor;
importcom.gargoylesoftware.htmlunit.*;
importcom.gargoylesoftware.htmlunit.WebClientOptions;
importcom.gargoylesoftware.htmlunit.html.HtmlInput;
importcom.gargoylesoftware.htmlunit.html.HtmlBody;
importjava.util.List;

publicclasshelloHtmlUnit{
publicstaticvoidmain(String[]args)throwsException{
Stringstr;
//创建一个webclient
WebClientwebClient=newWebClient();
//htmlunit对css和javascript的支持不好,所以请关闭之
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);
//获取页面
HtmlPagepage=webClient.getPage("http://www..com/");
//获取页面的TITLE
str=page.getTitleText();
System.out.println(str);
//获取页面的XML代码
str=page.asXml();
System.out.println(str);
//获取页面的文本
str=page.asText();
System.out.println(str);
//关闭webclient
webClient.closeAllWindows();
}
}


如果用HTTPclient,楼主可以网络它的教程,有本书叫做《自己动手写网络爬虫》,里面是以java语言为基础讲的,作为一个爬虫入门者可以去看看

『捌』 Java源码 实现网络爬虫

//Java爬虫demo

importjava.io.File;
importjava.net.URL;
importjava.net.URLConnection;
importjava.nio.file.Files;
importjava.nio.file.Paths;
importjava.util.Scanner;
importjava.util.UUID;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;

publicclassDownMM{
publicstaticvoidmain(String[]args)throwsException{
//out为输出的路径,注意要以\结尾
Stringout="D:\JSP\pic\java\";
try{
Filef=newFile(out);
if(!f.exists()){
f.mkdirs();
}
}catch(Exceptione){
System.out.println("no");
}

Stringurl="http://www.mzitu.com/share/comment-page-";
Patternreg=Pattern.compile("<imgsrc="(.*?)"");
for(intj=0,i=1;i<=10;i++){
URLuu=newURL(url+i);
URLConnectionconn=uu.openConnection();
conn.setRequestProperty("User-Agent","Mozilla/5.0(WindowsNT6.3;WOW64;Trident/7.0;rv:11.0)likeGecko");
Scannersc=newScanner(conn.getInputStream());
Matcherm=reg.matcher(sc.useDelimiter("\A").next());
while(m.find()){
Files.(newURL(m.group(1)).openStream(),Paths.get(out+UUID.randomUUID()+".jpg"));
System.out.println("已下载:"+j++);
}
}
}
}

『玖』 爬取某个网站上所有页面,并根据页面内容正则匹配,存入数据库

不知道你用什么编程语言,我用的java的给你参考一下。用到了apache的httpComponents下的包,你也可以用java自带的URLConnection。

//根据网址url和网页编码获取网页源代码
privateStringgetHTML(Stringurl,Stringencode){
HttpPosthttpPost=newHttpPost(url);
CloseableHttpResponseresponse=null;
StringBuildersb=newStringBuilder();
try{
CloseableHttpClienthttpClient=HttpClients.createDefault();
response=httpClient.execute(httpPost);
HttpEntityentity=response.getEntity();
InputStreamis=entity.getContent();
BufferedReaderbr=newBufferedReader(newInputStreamReader(is,encode));
Stringline;
while((line=br.readLine())!=null){
sb.append(line);
}
EntityUtils.consume(entity);
response.close();
}catch(IllegalStateException|IOExceptione){
e.printStackTrace();
}
returnsb.toString();
}

至于正则表达式匹配,这个要根据你匹配的内容来定义正则表达式

//定义正则表达式
Patternpattern=Pattern.compile("");
//需要匹配的字符串
Strings="";
Matchermatcher=pattern.matcher(s);
//每次查找到匹配的字符串时,输出匹配结果
while(matcher.find()){
System.out.println(matcher.group());
}

『拾』 Python爬虫如何写

有专门的教程,在网络资源里搜一下。

阅读全文

与自己动手写网络爬虫源代码相关的资料

热点内容
男人长的像男孩和一群女的洗澡电影 浏览:718
大胸妹的电影 浏览:121
韩国电影推荐尺度性感 浏览:846
百合弱受 浏览:267
男男大尺度男插男 浏览:857
红领巾的故事扮演者陈虹池 浏览:179
看电脑的网站 浏览:947
泽达士智能手环下载什么app 浏览:689
美国电影 爱情片 till 浏览:196
小说女主被男主囚禁生娃 浏览:42
韩剧19禁电影 浏览:316
蝉妈妈直播数据为什么不准 浏览:897
梅花档案好看吗 浏览:420
win10系统怎么调低亮度 浏览:345
火影忍者小说主角是女的 浏览:406
韩国电影我的变态邻居女演员是谁 浏览:79
电影枪版在哪看 浏览:796
视频区小说区图片区 浏览:784
一个男的和一个骑自行车的女人外国电影 浏览:152
有什么好看3a的电影网址么 浏览:565

友情链接