導航:首頁 > 編程大全 > 自己動手寫網路爬蟲源代碼

自己動手寫網路爬蟲源代碼

發布時間: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爬蟲如何寫

有專門的教程,在網路資源里搜一下。

閱讀全文

與自己動手寫網路爬蟲源代碼相關的資料

熱點內容
電影理發師殺死女友 瀏覽:419
word2003剪貼板 瀏覽:208
手機微信文件已過期或已被清理怎麼辦 瀏覽:997
免費看會員電影網站 瀏覽:639
女生去找在北京送快遞的男朋友的電影 瀏覽:67
子非魚網路技術有限公司 瀏覽:119
適合二人看的愛情片怦然心動 瀏覽:830
Linux安裝軟體還是文件啊 瀏覽:322
如何在線找網路主播 瀏覽:493
趣味編程如何下載 瀏覽:26
測繪大數據處理 瀏覽:739
appstore禁用銀行卡 瀏覽:369
ios支持文件夾導入的看書軟體 瀏覽:657
微信轉賬5000元圖片 瀏覽:703
桂林萬象城電影院今日影訊 瀏覽:58
note4文件管理移植 瀏覽:682
那種在線觀看網址鏈 瀏覽:321
資料庫中性別用什麼字元 瀏覽:672
易捷文件加密軟體注冊碼 瀏覽:312
一部關於偵探下馬和綉花鞋的老電影 瀏覽:19

友情鏈接