導航:首頁 > 編程語言 > java爬蟲練習

java爬蟲練習

發布時間:2021-03-16 16:43:06

java爬蟲代理如何實現

爬蟲離不開的就是代理伺服器了,如果我們不用http來爬蟲,ip不更改的情況下,是很難進行的內。當我們在使用爬蟲容爬取網站資料,速度快,可以不知疲倦地連續工作。但是由於爬蟲軟體在訪問網站時,行為過於頻繁,遠超人力操作速度,就很容易被網站察覺,而封掉用戶的IP。
所以,使用爬蟲軟體時,為了防止IP被封,或者IP已經被封,還想用自己的IP訪問封了自己IP的網站時,就要用到代理IP了。http能夠對我們的ip地址進行更改,這一操作能夠有效減少了網站的ip限制的影響,對爬蟲是很有幫助的。Ipidea含有240+國家地區的ip,真實住宅網路高度匿名強力保護本地信息。

⑵ 如何使用Java語言實現一個網頁爬蟲

我給你代碼
public class DEmo {
public static void match(String s1) {
Pattern p = Pattern.compile("<a(.*)>.*</a>");
Matcher m = p.matcher(s1);
while (m.find()) {
System.out.println(m.group(1));
}
}

public static void main(String args[]) {
URL url;
int responsecode;
HttpURLConnection urlConnection;
BufferedReader reader;
String line;
try {
// 生成一個對象,要獲取源代碼的網頁地址為:http://www.sina.com.cn
url = new URL("http://www.jb51.net/article/97787.htm");
// 打開URL
urlConnection = (HttpURLConnection) url.openConnection();
// 獲取伺服器響應代碼
responsecode = urlConnection.getResponseCode();
String temp = "";
if (responsecode == 200) {
// 得到輸入流,即獲得了網頁的內容
reader = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), "GBK"));
while ((line = reader.readLine()) != null) {
temp = temp + line;
}
System.out.println(temp);
match(temp);

} else {
System.out.println("獲取不到網頁的源碼,伺服器響應代碼為:" + responsecode);
}
} catch (Exception e) {
System.out.println("獲取不到網頁的源碼,出現異常:" + e);
}

}
}

⑶ java如何做高級爬蟲

下面說明知乎爬蟲的源碼和涉及主要技術點:
(1)程序package組織

(2)模擬登錄(爬蟲主要技術點1)
要爬去需要登錄的網站數據,模擬登錄是必要可少的一步,而且往往是難點。知乎爬蟲的模擬登錄可以做一個很好的案例。要實現一個網站的模擬登錄,需要兩大步驟是:(1)對登錄的請求過程進行分析,找到登錄的關鍵請求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(3)網頁下載(爬蟲主要技術點2)
模擬登錄後,便可下載目標網頁html了。知乎爬蟲基於HttpClient寫了一個網路連接線程池,並且封裝了常用的get和post兩種網頁下載的方法。

(4)自動獲取網頁編碼(爬蟲主要技術點3)
自動獲取網頁編碼是確保下載網頁html不出現亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網頁亂碼問題。

(5)網頁解析和提取(爬蟲主要技術點4)
使用Java寫爬蟲,常見的網頁解析和提取方法有兩種:利用開源Jar包jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現Jsoup不能解析和提取的情況。Jsoup強大功能,使得解析和提取異常簡單。知乎爬蟲採用的就是Jsoup。 ...展開下面說明知乎爬蟲的源碼和涉及主要技術點:
(1)程序package組織

(2)模擬登錄(爬蟲主要技術點1)
要爬去需要登錄的網站數據,模擬登錄是必要可少的一步,而且往往是難點。知乎爬蟲的模擬登錄可以做一個很好的案例。要實現一個網站的模擬登錄,需要兩大步驟是:(1)對登錄的請求過程進行分析,找到登錄的關鍵請求和步驟,分析工具可以有IE自帶(快捷鍵F12)、Fiddler、HttpWatcher;(2)編寫代碼模擬登錄的過程。

(3)網頁下載(爬蟲主要技術點2)
模擬登錄後,便可下載目標網頁html了。知乎爬蟲基於HttpClient寫了一個網路連接線程池,並且封裝了常用的get和post兩種網頁下載的方法。

(4)自動獲取網頁編碼(爬蟲主要技術點3)
自動獲取網頁編碼是確保下載網頁html不出現亂碼的前提。知乎爬蟲中提供方法可以解決絕大部分亂碼下載網頁亂碼問題。

(5)網頁解析和提取(爬蟲主要技術點4)
使用Java寫爬蟲,常見的網頁解析和提取方法有兩種:利用開源Jar包Jsoup和正則。一般來說,Jsoup就可以解決問題,極少出現Jsoup不能解析和提取的情況。Jsoup強大功能,使得解析和提取異常簡單。知乎爬蟲採用的就是Jsoup。

(6)正則匹配與提取(爬蟲主要技術點5)
雖然知乎爬蟲採用Jsoup來進行網頁解析,但是仍然封裝了正則匹配與提取數據的方法,因為正則還可以做其他的事情,如在知乎爬蟲中使用正則來進行url地址的過濾和判斷。

(7)數據去重(爬蟲主要技術點6)
對於爬蟲,根據場景不同,可以有不同的去重方案。(1)少量數據,比如幾萬或者十幾萬條的情況,使用Map或Set便可;(2)中量數據,比如幾百萬或者上千萬,使用BloomFilter(著名的布隆過濾器)可以解決;(3)大量數據,上億或者幾十億,Redis可以解決。知乎爬蟲給出了BloomFilter的實現,但是採用的Redis進行去重。

(8)設計模式等Java高級編程實踐
除了以上爬蟲主要的技術點之外,知乎爬蟲的實現還涉及多種設計模式,主要有鏈模式、單例模式、組合模式等,同時還使用了Java反射。除了學習爬蟲技術,這對學習設計模式和Java反射機制也是一個不錯的案例。
4. 一些抓取結果展示收起

⑷ java簡單爬蟲

你都已經有源代碼了,重構一下代碼,換一下包名不就可以了。

⑸ java 爬蟲怎麼做

代碼如下:

packagewebspider;
import
java.util.HashSet;
importjava.util.PriorityQueue;
import
java.util.Set;
importjava.util.Queue;

publicclassLinkQueue{
//已訪問的集合
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怎麼實現js中html()或者是text()方法

你可以用 jQuery 這個函式庫,然後用法會像是這樣 $('.class').text('輸入文字');
不懂可以私信問我詳細

⑺ 用java 編寫爬蟲是不是很簡單

用java編寫爬蟲, 有豐富的第三方包, 使用起來比較容易

JSOUP : 強大的HMTL解析能力版, 但抓取能力較弱.

HttpClient: 強大專業的權爬取能力.功能強大, 代碼量較多. 解析起來稍微麻煩點

HtmlUnit: 可以模擬瀏覽器.沒有界面,可以模擬填表,模擬點擊等,甚至還支持JavaScript.但是內存佔用較多,速度較慢.

一般根據需要,進行搭配使用

經常使用的搭配.

HttpClient爬取---->Jsoup解析-->MySQL存儲

⑻ 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網路爬蟲

不知道怎麼去教你,只能說說我自己的學習經歷。
初學Java,包括學習一兩年的,很難精通版Java。特別權是對於在校的學生,學生只是帶著學習Java這種情況,對於多態、重載、介面的運用等等的理解並不夠。
說理論太難說,你現在的情況就直接上手項目,自己做東西。1、先跟著做一個整體的項目,比如坦克大戰之類的,這樣能帶著你整體理解Java,藉此自己反思Java基礎哪裡學的不好,補。2、然後做JavaWeb項目,理解框架、一些簡單的設計模式,嘗試做一個微博的項目(不好意思,我當年做的第一個web項目就是微博系統,嘿嘿)或者其他的。我自己覺得做web項目最好,很多Java只是都能在項目中加深理解。
其實想說的就是,java入門不難,但是想精通很難。學習.....反思....項目......學習.....反思....
我就簡單說這么一點點。有什麼你跟我私聊。只要堅持下來,相信你會成功。

閱讀全文

與java爬蟲練習相關的資料

熱點內容
新手機換機用什麼app 瀏覽:115
linux文件夾執行許可權不夠 瀏覽:127
vivoy51怎麼連接4g網路 瀏覽:10
口琴哪個網站好用 瀏覽:111
微信群怎麼恢復 瀏覽:280
iphone微信監控插件 瀏覽:82
資料庫拆分方式 瀏覽:515
增肥該用哪個app 瀏覽:90
輻射4金代碼 瀏覽:622
馬上金融app客戶端 瀏覽:939
楊浦區同城婚介網站有哪些 瀏覽:640
資料庫常用函數是什麼 瀏覽:243
手游編程公司有哪些 瀏覽:427
手機qq文件過期7天怎麼恢復 瀏覽:198
打包資料庫用哪些 瀏覽:777
散步在網路里怎麼說 瀏覽:561
java設置網頁 瀏覽:412
java中按鈕 瀏覽:653
dvd光碟里的exe視頻文件轉換 瀏覽:846
蘋果文件掃描為什麼只能24張 瀏覽:572

友情鏈接