利用htmlparser爬蟲獲取指定完整的完整區域資訊
package com.hundsun.pc; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; 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.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filters.TagNameFilter; import org.htmlparser.nodes.TagNode; import org.htmlparser.tags.LinkTag; import org.htmlparser.util.NodeList; public class Url { ArrayList<String> links= new ArrayList<String>(); final static String url="http://www.diqudaima.com"; public static void main(String[] args) { String vistor = null ; try { LinkQueue queue = new LinkQueue(); queue.addUnvisitedUrl("/zhejiang/hangzhoushi/"); do{ try { HttpClient http = new DefaultHttpClient(); vistor = queue.unVisitedUrlDeQueue().toString(); System.out.println("開始訪問:" + url + vistor); HttpGet hg = new HttpGet(url + vistor); HttpResponse hr; hr = http.execute(hg); HttpEntity he = hr.getEntity();// Url Url = new Url(); if (he != null) { String charset = EntityUtils.getContentCharSet(he); InputStream is = he.getContent(); BufferedReader br = new BufferedReader( new InputStreamReader(is, "GBK")); String line = null; int i = 0; while ((line = br.readLine()) != null) { Url.geUrl(line, queue); } } queue.addVisitedUrl(vistor); http.getConnectionManager().shutdown(); System.out.println("獲取區域資訊數:"+queue.getMap().size()+"已經訪問連結數:"+queue.getVisitedUrl().size()+"異常連結數:"+queue.getErrorUrl().size()); } catch (Exception e) { System.out.println("訪問異常:"+url+vistor); queue.adderrorUrl(vistor); queue.addUnvisitedUrl(vistor); } }while(!queue.isUnvisitedUrlsEmpty()); } catch (Exception e) { e.printStackTrace(); }finally{ } } public void geUrl(String html,LinkQueue queue){ try{ NodeFilter filter = new TagNameFilter("li"); Parser p=new Parser(); p.setInputHTML(html); NodeList list = p.extractAllNodesThatMatch(filter); for (int i = 0; i < list.size(); i++) { Node textnode = (Node) list.elementAt(i); NodeList listChildren =textnode.getChildren(); String key=""; String value=""; for (int j = 0; j < listChildren.size(); j++) { Node textnodeChildren = (Node) listChildren.elementAt(j); if(textnodeChildren.getClass()==LinkTag.class){ LinkTag nodeChildren = (LinkTag)textnodeChildren; key=nodeChildren.getLinkText(); queue.addUnvisitedUrl(nodeChildren.getLink()); }else{ value=textnodeChildren.getText(); if(value.split("郵編").length>1) value= value.substring(value.indexOf("地區編碼:")+5, value.indexOf("郵編:")); if(value.startsWith("[")){ value=value.replace("[", ""); value=value.replace("]", ""); } if(key.equals("")){ String[] args = value.split("\\["); key = args[0]; value = args[1].replace("]", ""); } } } System.out.println("key="+key+" value="+value); if(!key.equals("")) queue.getMap().put(key, value); } }catch (Exception e) { e.printStackTrace(); } }
輔助類
package com.hundsun.pc;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Created by amosli on 14-7-9.
*/
public class LinkQueue {
//已經訪問的佇列
private static Set visitedUrl = new HashSet();
//已經訪問的佇列
private static Set errorUrl = new HashSet();
//未訪問的佇列
private static Queue unVisitedUrl = new Queue();
private Map map = new HashMap<String,String>();
//獲得URL佇列
public static Queue getUnVisitedUrl() {
return unVisitedUrl;
}
public static Set getVisitedUrl() {
return visitedUrl;
}
//新增到訪問過的URL佇列中
public static void addVisitedUrl(String url) {
visitedUrl.add(url);
}
public static void adderrorUrl(String url) {
errorUrl.add(url);
}
//刪除已經訪問過的URL
public static void removeVisitedUrl(String url){
visitedUrl.remove(url);
}
//未訪問的URL出佇列
public static Object unVisitedUrlDeQueue(){
return unVisitedUrl.deQueue();
}
//保證每個URL只被訪問一次,url不能為空,同時已經訪問的URL佇列中不能包含該url,而且因為已經出隊列了所未訪問的URL佇列中也不能包含該url
public static void addUnvisitedUrl(String url){
if(url!=null&&!url.trim().equals("")&&!visitedUrl.contains(url)&&!unVisitedUrl.contains(url))
unVisitedUrl.enQueue(url);
}
//獲得已經訪問過的URL的數量
public static int getVisitedUrlNum(){
return visitedUrl.size();
}
//判斷未訪問的URL佇列中是否為空
public static boolean isUnvisitedUrlsEmpty(){
return unVisitedUrl.empty();
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public static Set getErrorUrl() {
return errorUrl;
}
public static void setErrorUrl(Set errorUrl) {
LinkQueue.errorUrl = errorUrl;
}
}
執行結果如下圖
相關推薦
利用htmlparser爬蟲獲取指定完整的完整區域資訊
package com.hundsun.pc; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Ar
zabbix:利用zabbix api獲取指定組中的主機的名字並將其修改
思路講解:首先利用hostgroup.get方法獲取zabbix組的id與名字,然後檢索獲得指定組的id,再利用host.get獲取該指定組下的所有主機的id與名字,最後利用host.update根據主機的id更新主機的名字。 程式碼如下: #!/usr/bin/env python
zabbix:利用zabbix api獲取指定組中的主機的名字並將其修改
思路講解:首先利用hostgroup.get方法獲取zabbix組的id與名字,然後檢索獲得指定組的id,再利用host.get獲取該指定組下的所有主機的id與名字,最後利用host.update根據主機的id更新主機的名字。 程式碼如下: #!/usr/bin
利用python爬蟲獲取黃金價格
繼續練手,根據之前獲取汽油價格的方式獲取了金價,暫時沒錢投資,看看而已 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 獲取每天黃金價格 @author: yufei @site: http://www.a
利用python爬蟲獲取豆瓣讀書資料建立書單
0. 寫在前面 網路爬蟲: A Web crawler, sometimes called a spider, is an Internet bot that systematically browses the World Wide Web, t
字串遞迴獲取指定字元位置內容資訊
針對目前字串處理indexof 無法直接獲取指定到的位置字元處理 /// <summary> /// 字串擷取,獲取 /// 原字串:啊啊啊\\不不不\\擦擦擦\\嗯嗯嗯\\打算 /// 次數是1: 啊啊啊\\
通過ip地址獲取ip地址的區域資訊
return $res1['data']["country"].$res1['data'][ "region"].$res1['data']["city"]."_".$res1['data'][ "isp"];
編寫網路爬蟲獲取餓了麼商家資訊(一)
利用HttpClient和Jsoup兩種工具分別進行爬取資料 maven座標: <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons
python 獲取指定pool的成員資訊
2. 獲取pool的成員: pool 方法: get_ltm_pool_members sub __get_pool_members { my ($self, $pool, $module)= @_; return $self->_
獲取中文的完整拼音並輸出
stat rtert bin tca spa nat ++ () one 1.添加maven依賴 <dependency> <groupId>com.belerweb</groupId>
python 利用爬蟲獲取頁面上下拉框裏的所有國家
span googl lec ram chrome color 模塊 獲取 ica 前段時間,領導說列一下某頁面上的所有國家信息,話說這個國家下拉框裏的國家有兩三百個,是第三方模塊導入的,手動從頁面拷貝,不切實際,於是想著用爬蟲去獲取這個國家信息,並保存到文件裏。 下面是具
前端獲取http和完整項目名
tex etc TE sch 需要 h+ ext contex 斜杠 <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+reques
python xpath 獲取指定頁面中指定區域的html代碼
pytho sts clas xpath nbsp install .get element XML 最近一個朋友問我怎麽把一個指定區域的內容轉成pdf,網上查了一下python裏面有個wkhtmltopdf模塊可以將str、file、url轉成pdf,我們今天不聊
2018 - Python 3.7 爬蟲之 利用 Scrapy 框架 獲取圖片並下載(二)
一、 通過命令構建一個爬蟲專案 二、定義 item 三、啟用 pipeline 管道 四、編寫爬蟲 Spider 五、執行爬蟲 六、結果檢視 未安裝 Scrapy 框架,見上一篇文章:框架安裝及配置 一、 通過命令構建一個爬蟲專
Python爬蟲1-獲取指定網頁原始碼
1、任務簡介 前段時間一直在學習Python基礎知識,故未更新部落格,近段時間學習了一些關於爬蟲的知識,我會分為多篇部落格對所學知識進行更新,今天分享的是獲取指定網頁原始碼的方法,只有將網頁原始碼抓取下來才能從中提取我們需要的資料。 2、任務程式碼 Python獲取指定網頁
利用 FilesystemIterator 獲取指定目錄下的所有檔案
/** * 獲取指定目錄下的所有檔案 * @param null $path * @return array */ public function getFileByPath($path = null) { $dirs = new \FilesystemIterator($path); $ar
利用 FilesystemIterator 獲取指定目錄下的所有文件
目錄 files details csdn 所有 lena turn func article /** * 獲取指定目錄下的所有文件 * @param null $path * @return array */ public function getFileByPath($
獲取模型中完整的多對多資料
可獲取到model中query多對多的完整資料 query = queryset.order_by(ordering).first() for topic in query._meta.many_to_many: lista = l
【原創】網頁全站下載器4.0黑色版,利用爬蟲獲取所有js、css、img!
此程式是作者原創,轉載請註明出處(csdn:pythoning183)!!!!!!!版本號:WebFileSpider4.0使用前,點個贊謝謝!此下載器可以下載任意網頁的原始碼和所有js、css、img檔案,包括隱藏網頁和js和css裡隱藏的檔案,實現了幾乎不遺漏的模仿建站,
Python unittest利用discover獲取指定目錄或多級目錄下的測試用例
最近在寫介面自動化框架,由python+requests+unittest構建(其他還有些匯入模組,這裡暫且不說),目前還在搭建當中,整體其框架結構如下: 在編寫Common下的RunTools元件(主要封裝的是獲取測試用例、執行測試、生成測試報告、傳送郵件等相關函式)