摘要:一個(gè)爬蟲(chóng)租房軟件。獲取導(dǎo)航頁(yè)以及數(shù)據(jù)打開(kāi)同城主頁(yè),我主要針對(duì)杭州的二手房進(jìn)行了爬取分析,所以進(jìn)入杭州租房。這次我們需要解析房屋所在地信息,用來(lái)可視化顯示。具體做法可以參照相關(guān)反爬蟲(chóng)策略的文章。
一個(gè)爬蟲(chóng)租房軟件。
先上一個(gè)源代碼吧。
https://github.com/answershuto/Rental
歡迎指導(dǎo)交流。
效果圖搭建Node.js環(huán)境及啟動(dòng)服務(wù)
安裝node以及npm,用express模塊啟動(dòng)服務(wù),加入自己所需要的中間件即可,這個(gè)不是本文所要討論的重點(diǎn),可以參考網(wǎng)上的一些教程搭建環(huán)境。
獲取導(dǎo)航頁(yè)URL以及數(shù)據(jù)打開(kāi)58同城主頁(yè),我主要針對(duì)杭州的二手房進(jìn)行了爬取分析,所以進(jìn)入杭州租房。
http://hz.58.com/chuzu/pn1/?key=%E6%9D%AD%E5%B7%9E%E7%A7%9F%E6%88%BF%E5%AD%90&cmcskey=%E7%A7%9F%E6%88%BF%E5%AD%90&final=1&PGTID=0d3090a7-0004-f43c-ee04-95c2ea3d031f&ClickID=6
可以得到這一串URL,上下頁(yè)查看后就不難發(fā)現(xiàn),pn后面的數(shù)字就是頁(yè)面的頁(yè)碼,?后面的是一些get請(qǐng)求帶帶參數(shù)。用一個(gè)函數(shù)即可通過(guò)頁(yè)碼得到正確的URL。
function getUrl(page = 1){ return "http://hz.58.com/chuzu/pn"+page+"/?key=%E6%9D%AD%E5%B7%9E%E7%A7%9F%E6%88%BF%E5%AD%90&cmcskey=%E7%A7%9F%E6%88%BF%E5%AD%90&final=1&PGTID=0d3090a7-0004-f43c-ee04-95c2ea3d031f&ClickID=6"; }
根據(jù)上面的URL我們就可以訪問(wèn)到每一頁(yè)的所有租房信息
用cheerio模塊解析dom
安裝cheerio模塊,使用cheerio模塊解析dom,然后就可以類似jquery一樣訪問(wèn)dom了。
var cheerio = require("cheerio"); let $ = cheerio.load(html);獲取每個(gè)租房信息的URL
打開(kāi)開(kāi)發(fā)者模式,osX(option + command + I),windows( F12 ),然后就可以在elements中看到文檔結(jié)構(gòu)了。(這里以chrome為例)
可以看到對(duì)應(yīng)的a標(biāo)簽,我們只需要提取出該url即可,及對(duì)應(yīng)的href,就是它點(diǎn)擊跳轉(zhuǎn)的URL。
[單間]支持月付 文一路梧桐公寓 耀江文萃苑 中豪晴元
該a標(biāo)簽的class為t,用$("a.t")即可得到所有的a標(biāo)簽的對(duì)象,得到的是一個(gè)數(shù)組,遍歷取出href屬性即可。
for(let i = 0; i < $("a.t").length; i++){ rentalObj.add($("a.t")[i].attribs.href) }
得到了這些URL,接下來(lái)就可以用這些URL訪問(wèn)具體的租房信息了,每個(gè)URL對(duì)應(yīng)一個(gè)租房頁(yè)面。
根據(jù)租房信息的URL訪問(wèn)相應(yīng)頁(yè)面,爬取數(shù)據(jù)還是先進(jìn)入頁(yè)面打開(kāi)開(kāi)發(fā)者模式。
這次我們需要解析房屋所在地信息,用來(lái)可視化顯示。
$("td.house-xqxq-content a.ablue")
加上父標(biāo)簽可以過(guò)濾出更有針對(duì)性的dom,此時(shí)過(guò)濾出的是小區(qū)名稱、本月均價(jià)、所在商圈等信息的dom,我們現(xiàn)在只需要第一個(gè)dom里面的數(shù)據(jù),所以訪問(wèn)數(shù)組的[0]即可。
除此之外為還需要頁(yè)面里面的一張展示房屋信息的一張圖片,找到對(duì)應(yīng)dom可以發(fā)現(xiàn)id為smainPic。
$("#smainPic")["0"].attribs.src
這樣訪問(wèn)即可得到圖片的URL。
其他我們還可以用同樣的方法獲取很多相關(guān)數(shù)據(jù),比如$(".house-price").text()得到價(jià)格數(shù)據(jù),$("span.tel-num.tel-font").text()可以得到房東的聯(lián)系方式。
通過(guò)百度地圖進(jìn)行可視化展示這里使用百度地圖api
http://lbsyun.baidu.com/index.php?title=jspopular
var map = new BMap.Map("container"); // 創(chuàng)建地圖實(shí)例 map.centerAndZoom("杭州", 12); var localSearch = new BMap.LocalSearch(map); localSearch.setSearchCompleteCallback(function(searchResult){ var poi = searchResult.getPoi(0);/*地理位置信息*/ }) ocalSearch.search(params[url].location);
獲取經(jīng)緯度以后再掉用相應(yīng)的api在地圖上顯示即可,顯示后再做什么效果,可自行發(fā)揮想象了。
關(guān)于反爬蟲(chóng)在爬取過(guò)程中發(fā)現(xiàn)58同城的反爬蟲(chóng)策略,快速訪問(wèn)會(huì)讓你輸入驗(yàn)證碼來(lái)驗(yàn)證是人在操作而不是代碼訪問(wèn)。只要是人可以正常訪問(wèn)并不影響用戶正常體驗(yàn)的網(wǎng)站都有辦法繞過(guò)反爬蟲(chóng)策略。
先采用較慢的方式發(fā)送http請(qǐng)求訪問(wèn),此外每隔一段時(shí)間最好停一下,然后再繼續(xù)訪問(wèn)。除此之外用User-Agent字段偽裝成瀏覽器。最保險(xiǎn)的方法就是購(gòu)買(mǎi)代理,讓代理用不同的ip地址去訪問(wèn)網(wǎng)站,即可繞過(guò)反爬蟲(chóng)機(jī)制。
具體做法可以參照相關(guān)反爬蟲(chóng)策略的文章。
關(guān)于作者:染陌
Email:answershuto@gmail.com or answershuto@126.com
Github: https://github.com/answershuto
Blog:http://answershuto.github.io/
知乎專欄:https://zhuanlan.zhihu.com/ranmo
掘金: https://juejin.im/user/58f87ae844d9040069ca7507
osChina:https://my.oschina.net/u/3161824/blog
轉(zhuǎn)載請(qǐng)注明出處,謝謝。
歡迎關(guān)注我的公眾號(hào)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/82687.html
摘要:智聯(lián)其實(shí)一共寫(xiě)了兩次,有興趣的可以在源碼看看,第一版的是回調(diào)版,只能一次一頁(yè)的爬取。 寫(xiě)在前面的話, .......還是不寫(xiě)了,直接上效果圖。附上源碼地址 github.lonhon showImg(https://segmentfault.com/img/bVUM3F?w=714&h=543);showImg(https://segmentfault.com/img/bVUM...
摘要:微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法摘要微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法。先說(shuō)說(shuō)很難爬的知乎,假如我們想爬取知乎主頁(yè)的內(nèi)容,就必須要先登陸才能爬,不然看不到這個(gè)界面。圖片描述知乎需要手機(jī)號(hào)才能注冊(cè)登陸。 微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法摘要:微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法。 網(wǎng)絡(luò)上有形形色色的網(wǎng)站,不同類型的網(wǎng)站爬蟲(chóng)策略不同,難易程度也不一樣。從是...
摘要:成功爬取了拉鉤網(wǎng)上多個(gè)招聘崗位的具體信息后,數(shù)據(jù)可視化并得出分析結(jié)果如下從整體看,北上廣深杭這五個(gè)城市前端工程師招聘崗位,北京是遙遙領(lǐng)先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發(fā)于 github blog 不想看爬蟲(chóng)過(guò)程只想看職位錢(qián)途數(shù)據(jù)分析請(qǐng)看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...
摘要:最近看前端都展開(kāi)了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書(shū)籍的介紹,大部分截取自是官方介紹。但從開(kāi)始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類,實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫(xiě)線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書(shū), 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...
摘要:數(shù)目限制應(yīng)該省略的條數(shù)數(shù)目限制排序方式函數(shù)的參數(shù)個(gè)數(shù),必須是個(gè),或者個(gè)。 基本思路 1.通過(guò)node中的 superagent 模擬http請(qǐng)求,去讀取豆瓣小組的信息,對(duì)讀取到的信息通過(guò)cheerio插件進(jìn)行解析格式化以便于獲取body中的信息存儲(chǔ)到mongodb中 2.因?yàn)槎拱陼?huì)ban掉一寫(xiě)爬蟲(chóng)ip,所以爬取過(guò)程中會(huì)使用ip池挑選沒(méi)有使用過(guò)的ip進(jìn)行代理去爬取,并且會(huì)避免并發(fā) 使用m...
閱讀 3231·2021-11-18 10:02
閱讀 2712·2021-10-13 09:47
閱讀 3261·2021-09-22 15:07
閱讀 974·2019-08-30 15:43
閱讀 1928·2019-08-30 10:59
閱讀 1811·2019-08-29 15:34
閱讀 1827·2019-08-29 15:06
閱讀 547·2019-08-29 13:28