1. 程式人生 > >java爬蟲入門實戰

java爬蟲入門實戰

爬蟲

百度百科:網路爬蟲(又被稱為網頁蜘蛛,網路機器人,在FOAF社群中間,更經常的稱為網頁追逐者),是一種按照一定的規則,自動地抓取全球資訊網資訊的程式或者指令碼。另外一些不常使用的名字還有螞蟻、自動索引、模擬程式或者蠕蟲。

爬蟲的實質,就是獲取靜態資料,並對此進行分析從而獲取對我們有價值的資料,從中可見,最重要的就是分析資料這一部分。資料的格式有json,xml,html等等,在此我們就分析鏈家網的html資料!

網路連接獲取鏈家網二手房列表頁面的頁面資料

public class ConnectionUtil {

    public static String Connect
(String address){ HttpURLConnection conn = null; URL url = null; InputStream in = null; BufferedReader reader = null; StringBuffer stringBuffer = null; try { url = new URL(address); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000
); conn.setReadTimeout(5000); conn.setDoInput(true); conn.connect(); in = conn.getInputStream(); reader = new BufferedReader(new InputStreamReader(in)); stringBuffer = new StringBuffer(); String line = null; while
((line = reader.readLine()) != null){ stringBuffer.append(line); } } catch (Exception e) { e.printStackTrace(); } finally{ conn.disconnect(); try { in.close(); reader.close(); } catch (Exception e) { e.printStackTrace(); } } return stringBuffer.toString(); } }

在這裡使用了HttpURLConnection這個類進行網路連線,我在這裡傳入的url就是鏈家網二手房列表的url:http://bj.lianjia.com/ershoufang/pg1/
這裡返回的結果肯定就是這個url對應的頁面原始碼(程式碼量太大,就不上該頁面原始碼)

這裡寫圖片描述

我們現在要做的就是分析獲取到的資料!

(重點)分析資料

我們現在需要的資料有:
1. 每套房的標題
2. 房的資訊(面積,坐向等)
3. 樓層資訊(建成年份等)
4. 價格
5. 詳細介紹的連結

對應的頁面,我們需要這些:

這裡寫圖片描述

然後我們分析資料所在的原始碼:

這裡寫圖片描述

然後檢視每一item的程式碼:

這裡寫圖片描述

程式碼中使用正則表示式匹配解析資料:

在此只分析title的匹配,其餘資料的分析思路一致,完整程式碼在博文末提供

private void regexTitle(List<HouseInfo> houseList, String targetStr) {
        Pattern pattern1 = Pattern
                .compile("<div class=\"title\">\\s{1,}<a(.+?)</div>");
        Matcher matcher1 = pattern1.matcher(targetStr);
        while (matcher1.find()) {
            //設定title
            Pattern pattern2 = Pattern.compile(">[\u0391-\uFFE5]+.+?</a>");
            Matcher matcher2 = pattern2.matcher(matcher1.group());
            String matcherString = "";
            HouseInfo info = new HouseInfo();
            if (matcher2.find()) {
                matcherString = matcher2.group();
                info.setTitle(matcherString.substring(1,
                        matcherString.length() - 4));
            }
            //設定外連線
            pattern2 = Pattern.compile("((http|https)://)?([\\w-]+\\.)+[\\w-]+(/[\\w-./?%&=]*)?");
            matcher2 = pattern2.matcher(matcher1.group());
            if (matcher2.find()) {
                info.setLink(matcher2.group());
            }
            houseList.add(info);
        }
    }

爬取的資料如下:

[銷售標題 : 楊莊22號院 2室1廳 350萬 總價 : 350萬 單位價格 : 單價50000元/平米 房子資訊 : 楊莊22號院 | 2室1廳 | 70平米 | 南 北 | 精裝 | 無電梯 樓層資訊 : 中樓層(共6層) 1998年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100766770.html]

[銷售標題 : 六裡屯東里 2室1廳 340萬 總價 : 340萬 單位價格 : 單價55375元/平米 房子資訊 : 六裡屯東里 | 2室1廳 | 61.4平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 高樓層(共7層) 1987年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100717445.html]

[銷售標題 : 麗水嘉園 3室2廳 1000萬 總價 : 1000萬 單位價格 : 單價78703元/平米 房子資訊 : 麗水嘉園 | 3室2廳 | 127.06平米 | 西北 | 精裝 | 有電梯 樓層資訊 : 低樓層(共27層) 2005年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100584510.html]

[銷售標題 : 萬國城MOMA 3室2廳 2250萬 總價 : 2250萬 單位價格 : 單價91931元/平米 房子資訊 : 萬國城MOMA | 3室2廳 | 244.75平米 | 東南 | 精裝 | 有電梯 樓層資訊 : 中樓層(共26層) 2006年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100275093.html]

[銷售標題 : 翠屏北里西區 4室2廳 685萬 總價 : 685萬 單位價格 : 單價36777元/平米 房子資訊 : 翠屏北里西區 | 4室2廳 | 186.26平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 高樓層(共7層) 2002年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100543850.html]

[銷售標題 : 草橋欣園18號院 2室1廳 460萬 總價 : 460萬 單位價格 : 單價63889元/平米 房子資訊 : 草橋欣園18號院 | 2室1廳 | 72平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 低樓層(共6層) 2000年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100804309.html]

[銷售標題 : 綠蔭芳鄰二居客廳朝南主臥室朝南小臥室朝北滿五年 總價 : 800萬 單位價格 : 單價59809元/平米 房子資訊 : 綠蔭芳鄰 | 2室2廳 | 133.76平米 | 南 北 | 精裝 | 有電梯 樓層資訊 : 低樓層(共14層) 2003年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100740674.html]

[銷售標題 : 綠島家園 3室1廳 500萬 總價 : 500萬 單位價格 : 單價39969元/平米 房子資訊 : 綠島家園 | 3室1廳 | 125.1平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 低樓層(共6層) 2006年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100770868.html]

[銷售標題 : 天通西苑二區 2室2廳 400萬 總價 : 400萬 單位價格 : 單價32266元/平米 房子資訊 : 天通西苑二區 | 2室2廳 | 123.97平米 | 東 西 | 精裝 | 有電梯 樓層資訊 : 低樓層(共13層) 2003年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100736254.html]

[銷售標題 : 天通苑北二區 3室1廳 495萬 總價 : 495萬 單位價格 : 單價36373元/平米 房子資訊 : 天通苑北二區 | 3室1廳 | 136.09平米 | 南 北 | 精裝 | 有電梯 樓層資訊 : 低樓層(共18層) 2005年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100750501.html]

[銷售標題 : 首城國際 2室1廳 850萬 總價 : 850萬 單位價格 : 單價94867元/平米 房子資訊 : 首城國際 | 2室1廳 | 89.6平米 | 東南 北 | 精裝 | 有電梯 樓層資訊 : 低樓層(共28層) 2010年建板塔結合 詳細連線 : http://bj.lianjia.com/ershoufang/101100718581.html]

[銷售標題 : 探礦家屬院 3室1廳 282萬 總價 : 282萬 單位價格 : 單價49474元/平米 房子資訊 : 探礦家屬院 | 3室1廳 | 57平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 高樓層(共6層) 1996年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100734525.html]

[銷售標題 : 天暢園 2室1廳 635萬 總價 : 635萬 單位價格 : 單價59352元/平米 房子資訊 : 天暢園 | 2室1廳 | 106.99平米 | 西北 | 精裝 | 有電梯 樓層資訊 : 高樓層(共32層) 2008年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100742525.html]

[銷售標題 : 南湖東園二區 2室1廳 540萬 總價 : 540萬 單位價格 : 單價77254元/平米 房子資訊 : 南湖東園二區 | 2室1廳 | 69.9平米 | 南 | 簡裝 | 有電梯 樓層資訊 : 低樓層(共12層) 1999年建板塔結合 詳細連線 : http://bj.lianjia.com/ershoufang/101100763580.html]

[銷售標題 : 國美第一城3號院 2室1廳 580萬 總價 : 580萬 單位價格 : 單價59794元/平米 房子資訊 : 國美第一城3號院 | 2室1廳 | 97平米 | 西南 | 精裝 樓層資訊 : 中樓層(共26層) 2007年建板塔結合 詳細連線 : http://bj.lianjia.com/ershoufang/101100743081.html]

[銷售標題 : 安慧裡四區 3室1廳 608萬 總價 : 608萬 單位價格 : 單價77502元/平米 房子資訊 : 安慧裡四區 | 3室1廳 | 78.45平米 | 東南 | 精裝 | 有電梯 樓層資訊 : 低樓層(共20層) 1991年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100743598.html]

[銷售標題 : 南湖東園一區 2室2廳 585萬 總價 : 585萬 單位價格 : 單價60805元/平米 房子資訊 : 南湖東園一區 | 2室2廳 | 96.21平米 | 東南 | 精裝 | 有電梯 樓層資訊 : 低樓層(共18層) 1998年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100745643.html]

[銷售標題 : 龍澤苑西區 2室1廳 460萬 總價 : 460萬 單位價格 : 單價57250元/平米 房子資訊 : 龍澤苑西區 | 2室1廳 | 80.35平米 | 南 北 | 精裝 | 無電梯 樓層資訊 : 低樓層(共6層) 2000年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100762406.html]

[銷售標題 : 百旺茉莉園 3室2廳 1130萬 總價 : 1130萬 單位價格 : 單價89406元/平米 房子資訊 : 百旺茉莉園 | 3室2廳 | 126.39平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 中樓層(共5層) 2005年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100758710.html]

[銷售標題 : 北京青年城 2室1廳 480萬 總價 : 480萬 單位價格 : 單價65307元/平米 房子資訊 : 北京青年城 | 2室1廳 | 73.5平米 | 南 北 | 精裝 | 無電梯 樓層資訊 : 高樓層(共6層) 2003年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100716217.html]

[銷售標題 : 新龍城 2室1廳 560萬 總價 : 560萬 單位價格 : 單價57549元/平米 房子資訊 : 新龍城 | 2室1廳 | 97.31平米 | 南 北 | 精裝 | 有電梯 樓層資訊 : 低樓層(共9層) 2006年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100736278.html]

[銷售標題 : 天秀花園澄秀園 3室1廳 880萬 總價 : 880萬 單位價格 : 單價59073元/平米 房子資訊 : 天秀花園澄秀園 | 3室1廳 | 148.97平米 | 東 南 北 | 精裝 | 無電梯 樓層資訊 : 高樓層(共6層) 2007年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100562161.html]

[銷售標題 : 世紀星城 3室1廳 700萬 總價 : 700萬 單位價格 : 單價55791元/平米 房子資訊 : 世紀星城 | 3室1廳 | 125.47平米 | 南 北 | 簡裝 | 有電梯 樓層資訊 : 高樓層(共12層) 2005年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100526434.html]

[銷售標題 : 望京新城 3室2廳 850萬 總價 : 850萬 單位價格 : 單價59470元/平米 房子資訊 : 望京新城 | 3室2廳 | 142.93平米 | 東南 | 精裝 | 有電梯 樓層資訊 : 高樓層(共25層) 2000年建板塔結合 詳細連線 : http://bj.lianjia.com/ershoufang/101100671982.html]

[銷售標題 : 新華聯錦園 3室2廳 779萬 總價 : 779萬 單位價格 : 單價56032元/平米 房子資訊 : 新華聯錦園 | 3室2廳 | 139.03平米 | 南 北 | 精裝 | 無電梯 樓層資訊 : 低樓層(共6層) 2002年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100717698.html]

[銷售標題 : 垂虹園 2室1廳 1230萬 總價 : 1230萬 單位價格 : 單價100953元/平米 房子資訊 : 垂虹園 | 2室1廳 | 121.84平米 | 東南 | 簡裝 | 有電梯 樓層資訊 : 低樓層(共18層) 2004年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100793010.html]

[銷售標題 : 北京畫素北區 2室1廳 335萬 總價 : 335萬 單位價格 : 單價55908元/平米 房子資訊 : 北京畫素北區 | 2室1廳 | 59.92平米 | 西南 | 精裝 | 有電梯 樓層資訊 : 低樓層(共14層) 2011年建板塔結合 詳細連線 : http://bj.lianjia.com/ershoufang/101100731481.html]

[銷售標題 : 六建 南北通透三居 看房方便 總價 : 595萬 單位價格 : 單價80953元/平米 房子資訊 : 六建 | 3室1廳 | 73.5平米 | 南 北 | 簡裝 | 無電梯 樓層資訊 : 低樓層(共6層) 1985年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100785347.html]

[銷售標題 : 勝古南里 3室1廳 575萬 總價 : 575萬 單位價格 : 單價77766元/平米 房子資訊 : 勝古南里 | 3室1廳 | 73.94平米 | 南 北 | 毛坯 樓層資訊 : 低樓層(共6層) 1981年建板樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100775727.html]

[銷售標題 : 時代國際嘉園 2室1廳 750萬 總價 : 750萬 單位價格 : 單價82156元/平米 房子資訊 : 時代國際嘉園 | 2室1廳 | 91.29平米 | 南 北 | 精裝 | 有電梯 樓層資訊 : 高樓層(共12層) 2006年建塔樓 詳細連線 : http://bj.lianjia.com/ershoufang/101100773483.html]

完整程式碼