Ⅰ java適合做爬蟲嗎
JAVA也可以實現爬蟲,比如jsoup包,一個非常方便解析html的工具呢。
不過相對來說,java語言笨重,稍微有些麻煩。
Ⅱ java 網路爬蟲怎麼實現
以爬取豆瓣《紅海行動》的所有評論為例,目標是爬取所有評論以及發表評論的用戶名。
getHtml()類,首先是URL url1=new URL(url);模擬在網頁輸入網址,接著 URLConnection uc=url1.openConnection();模擬敲回車鍵打開該網址頁面,後面的看注釋應該能看懂了。bf.readLine()是依次每行讀取頁面的源碼,
/**
* 下載HTML頁面源碼
* @author yangjianxin
* @return string @author yangjianxin
* @time 2018-03-09
*/
public static String getHtml(String url,String encoding) {
StringBuffer sb=new StringBuffer();
BufferedReader bf = null;
InputStreamReader isr = null;
try {
//創建網路連接
URL url1=new URL(url);
//打開網路
URLConnection uc=url1.openConnection();
uc.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//建立文件輸入流
isr=new InputStreamReader(uc.getInputStream(),encoding);
//高效率讀取
bf=new BufferedReader(isr);
//下載頁面源碼
String temp=null;
while((temp=bf.readLine())!=null) {
sb.append(temp+"\n");
}
//System.out.println(sb.toString());
} catch (MalformedURLException e) {
System.out.println("網頁打開失敗,請重新輸入網址。");
e.printStackTrace();
}catch (IOException e) {
System.out.println("網頁打開失敗,請檢查網路。");
e.printStackTrace();
}finally {
if(bf!=null) {try {
bf.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(isr!=null) {
try {
isr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
return sb.toString();
}
getGoalDate()類,Document document=Jsoup.parse(html),運用Jsoup.parse()解析網頁源碼,接著就是開始確定自己需要爬取的東西在網頁里的位置,這需要我們對html有點了解,能看、讀懂網頁標簽,可以看出當前頁面的所有評論都在id為"content"的大盒子里,每條評論都在class名為"main review-item"的小盒子里, for(Element el:elments)是指對象el在當前頁面循環去小盒子"main review-item"查找我們要爬取的東西,也就是用戶名和評論, String name=el.getElementsByClass("name").text()中的「name」可以在當前盒子里查找到用戶名,用.text()將它賦予給變數name,同理評論也是這樣抓取,如果不用將它存入磁碟,則可以後面那段文件操作刪除,只列印就行
Ⅲ java 爬蟲怎麼做
python">代碼如下:
packagewebspider;
import
java.util.HashSet;
importjava.util.PriorityQueue;
import
java.util.Set;
importjava.util.Queue;
publicclassLinkQueue{
//已訪問的url集合
privatestaticSetvisitedUrl
=newHashSet();
//待訪問的url集合
=new
PriorityQueue();
//獲得URL隊列
(){
return
unVisitedUrl;
}
//添加到訪問過的URL隊列中
publicstaticvoidaddVisitedUrl(Stringurl)
{
visitedUrl.add(url);
}
//移除訪問過的URL
(Stringurl)
{
visitedUrl.remove(url);
}
//未訪問的URL出隊列
(){
return
unVisitedUrl.poll();
}
//保證每個url只被訪問一次
(Stringurl)
{
if(url!=null&&!url.trim().equals("")&&
!visitedUrl.contains(url)
&&
!unVisitedUrl.contains(url))
unVisitedUrl.add(url);
}
//獲得已經訪問的URL數目
(){
return
visitedUrl.size();
}
//判斷未訪問的URL隊列中是否為空
()
{
returnunVisitedUrl.isEmpty();
}
}
配合極光HTTP使用更佳喔
Ⅳ java可以寫爬蟲嗎
codeblocks能不能寫我不知道,但不僅僅只有java可以寫爬蟲,還有像python等的語言也可以寫
Ⅳ java爬蟲代理如何實現
爬蟲離不開的就是代理伺服器了,如果我們不用http來爬蟲,ip不更改的情況下,是很難進行的。當我們在使用爬蟲爬取網站資料,速度快,可以不知疲倦地連續工作。但是由於爬蟲軟體在訪問網站時,行為過於頻繁,遠超人力操作速度,就很容易被網站察覺,而封掉用戶的IP。
所以,使用爬蟲軟體時,為了防止IP被封,或者IP已經被封,還想用自己的IP訪問封了自己IP的網站時,就要用到代理IP了。http能夠對我們的ip地址進行更改,這一操作能夠有效減少了網站的ip限制的影響,對爬蟲是很有幫助的。Ipidea含有240+國家地區的ip,真實住宅網路高度匿名強力保護本地信息。
Ⅵ java簡單爬蟲
你都已經有源代碼了,重構一下代碼,換一下包名不就可以了。
Ⅶ java網路爬蟲
源代碼如下
package com.cellstrain.icell.util;
import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* java實現爬蟲
*/
public class Robot {
public static void main(String[] args) {
URL url = null;
URLConnection urlconn = null;
BufferedReader br = null;
PrintWriter pw = null;
// String regex = "http://[\\w+\\.?/?]+\\.[A-Za-z]+";
String regex = "https://[\\w+\\.?/?]+\\.[A-Za-z]+";//url匹配規則
Pattern p = Pattern.compile(regex);
try {
url = new URL("網址");//爬取的網址、這里爬取的是一個生物網站
urlconn = url.openConnection();
pw = new PrintWriter(new FileWriter("D:/SiteURL.txt"), true);//將爬取到的鏈接放到D盤的SiteURL文件中
br = new BufferedReader(new InputStreamReader(
urlconn.getInputStream()));
String buf = null;
while ((buf = br.readLine()) != null) {
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
pw.println(buf_m.group());
}
}
System.out.println("爬取成功^_^");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
}
}
Ⅷ 如何用Java寫一個爬蟲
我主要使用Jsoup解析,獲取源碼有時候使用Jsoup,比較復雜的時候比如需要換ip,改編碼或者模擬登陸的時候使用HttpClient,以下是抓取開源中國新聞的一段代碼,可以運行。
package demo;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* 使用JSoup 解析網頁,語法使用 JS,css,Jquery 選擇器語法,方便易懂
*
* Jsoup教程網:jsoup開發指南,jsoup中文使用手冊,jsoup中文文檔
*
* @author geekfly
*
*/
public class JsoupDemo {
public static void main(String[] args) throws IOException {
String url = "新聞資訊 - 開源中國社區";
Document document = Jsoup.connect(url).userAgent("Mozilla/5.0 (Windows NT 6.1; rv:30.0) Gecko/20100101 Firefox/30.0").get();
Elements elements = document.select("#RecentNewsList .List > li");
for (Element element : elements) {
Elements titleElement = element.select("h2 a");
String title = titleElement.text();
String link = titleElement.attr("href").trim();
Elements dataElement = element.select(".date");
Elements autherElement = dataElement.select("a");
String auther = autherElement.text();
autherElement.remove();
String date = dataElement.text();
String detail = element.select(".detail").text();
System.out.println("鏈接: " + link);
System.out.println("標題: " + title);
System.out.println("作者: " + auther);
System.out.println("發布時間: " + date);
System.out.println("詳細信息: " + detail);
System.out.println();
System.out.println();
}
System.out.println(elements.size());
}
}
Ⅸ 寫爬蟲和用Java寫爬蟲的區別是什麼
沒得區別的,用Java寫爬蟲代碼
public class DownMM {
public static void main(String[] args) throws Exception {
//out為輸出的路徑,注意要以\\結尾
String out = "D:\\JSP\\pic\\java\\";
try{
File f = new File(out);
if(! f.exists()) {
f.mkdirs();
}
}catch(Exception e){
System.out.println("no");
}
String url = "http://www.mzitu.com/share/comment-page-";
Pattern reg = Pattern.compile("<img src=\"(.*?)\"");
for(int j=0, i=1; i<=10; i++){
URL uu = new URL(url+i);
URLConnection conn = uu.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko");
Scanner sc = new Scanner(conn.getInputStream());
Matcher m = reg.matcher(sc.useDelimiter("\\A").next());
while(m.find()){
Files.(new URL(m.group(1)).openStream(), Paths.get(out + UUID.randomUUID() + ".jpg"));
System.out.println("已下載:"+j++);
}
}
}
}
Ⅹ java 實現網路爬蟲用哪個爬蟲框架比較好
有些人問,開發網路爬蟲應該選擇Nutch、Crawler4j、WebMagic、scrapy、WebCollector還是其他的?這里按照我的經驗隨便扯淡一下:
上面說的爬蟲,基本可以分3類:
1.分布式爬蟲:Nutch
2.JAVA單機爬蟲:Crawler4j、WebMagic、WebCollector
3. 非JAVA單機爬蟲:scrapy
第一類:分布式爬蟲
爬蟲使用分布式,主要是解決兩個問題:
1)海量URL管理
2)網速
現在比較流行的分布式爬蟲,是Apache的Nutch。但是對於大多數用戶來說,Nutch是這幾類爬蟲里,最不好的選擇,理由如下:
1)Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。也就是說,用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新寫一個分布式爬蟲框架了。
2)Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲快。
3)Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。而且Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text文本)。
4)用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
5)很多人說Nutch2有gora,可以持久化數據到avro文件、hbase、mysql等。很多人其實理解錯了,這里說的持久化數據,是指將URL信息(URL管理所需要的數據)存放到avro、hbase、mysql。並不是你要抽取的結構化數據。其實對大多數人來說,URL信息存在哪裡無所謂。
6)Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。如果想用hbase配合nutch(大多數人用nutch2就是為了用hbase),只能使用0.90版本左右的hbase,相應的就要將hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比較有誤導作用,Nutch2的教程有兩個,分別是Nutch1.x和Nutch2.x,這個Nutch2.x上寫的是可以支持到hbase 0.94。但是實際上,這個Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。
所以,如果你不是要做搜索引擎,盡量不要選擇Nutch作為爬蟲。有些團隊就喜歡跟風,非要選擇Nutch來開發精抽取的爬蟲,其實是沖著Nutch的名氣(Nutch作者是Doug Cutting),當然最後的結果往往是項目延期完成。
如果你是要做搜索引擎,Nutch1.x是一個非常好的選擇。Nutch1.x和solr或者es配合,就可以構成一套非常強大的搜索引擎了。如果非要用Nutch2的話,建議等到Nutch2.3發布再看。目前的Nutch2是一個非常不穩定的版本。