摘要:一個爬蟲租房軟件。獲取導航頁以及數據打開同城主頁,我主要針對杭州的二手房進行了爬取分析,所以進入杭州租房。這次我們需要解析房屋所在地信息,用來可視化顯示。具體做法可以參照相關反爬蟲策略的文章。
一個爬蟲租房軟件。
先上一個源代碼吧。
https://github.com/answershuto/Rental
歡迎指導交流。
效果圖搭建Node.js環境及啟動服務
安裝node以及npm,用express模塊啟動服務,加入自己所需要的中間件即可,這個不是本文所要討論的重點,可以參考網上的一些教程搭建環境。
獲取導航頁URL以及數據打開58同城主頁,我主要針對杭州的二手房進行了爬取分析,所以進入杭州租房。
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,上下頁查看后就不難發現,pn后面的數字就是頁面的頁碼,?后面的是一些get請求帶帶參數。用一個函數即可通過頁碼得到正確的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"; }
根據上面的URL我們就可以訪問到每一頁的所有租房信息
用cheerio模塊解析dom
安裝cheerio模塊,使用cheerio模塊解析dom,然后就可以類似jquery一樣訪問dom了。
var cheerio = require("cheerio"); let $ = cheerio.load(html);獲取每個租房信息的URL
打開開發者模式,osX(option + command + I),windows( F12 ),然后就可以在elements中看到文檔結構了。(這里以chrome為例)
可以看到對應的a標簽,我們只需要提取出該url即可,及對應的href,就是它點擊跳轉的URL。
[單間]支持月付 文一路梧桐公寓 耀江文萃苑 中豪晴元
該a標簽的class為t,用$("a.t")即可得到所有的a標簽的對象,得到的是一個數組,遍歷取出href屬性即可。
for(let i = 0; i < $("a.t").length; i++){ rentalObj.add($("a.t")[i].attribs.href) }
得到了這些URL,接下來就可以用這些URL訪問具體的租房信息了,每個URL對應一個租房頁面。
根據租房信息的URL訪問相應頁面,爬取數據還是先進入頁面打開開發者模式。
這次我們需要解析房屋所在地信息,用來可視化顯示。
$("td.house-xqxq-content a.ablue")
加上父標簽可以過濾出更有針對性的dom,此時過濾出的是小區名稱、本月均價、所在商圈等信息的dom,我們現在只需要第一個dom里面的數據,所以訪問數組的[0]即可。
除此之外為還需要頁面里面的一張展示房屋信息的一張圖片,找到對應dom可以發現id為smainPic。
$("#smainPic")["0"].attribs.src
這樣訪問即可得到圖片的URL。
其他我們還可以用同樣的方法獲取很多相關數據,比如$(".house-price").text()得到價格數據,$("span.tel-num.tel-font").text()可以得到房東的聯系方式。
通過百度地圖進行可視化展示這里使用百度地圖api
http://lbsyun.baidu.com/index.php?title=jspopular
var map = new BMap.Map("container"); // 創建地圖實例 map.centerAndZoom("杭州", 12); var localSearch = new BMap.LocalSearch(map); localSearch.setSearchCompleteCallback(function(searchResult){ var poi = searchResult.getPoi(0);/*地理位置信息*/ }) ocalSearch.search(params[url].location);
獲取經緯度以后再掉用相應的api在地圖上顯示即可,顯示后再做什么效果,可自行發揮想象了。
關于反爬蟲在爬取過程中發現58同城的反爬蟲策略,快速訪問會讓你輸入驗證碼來驗證是人在操作而不是代碼訪問。只要是人可以正常訪問并不影響用戶正常體驗的網站都有辦法繞過反爬蟲策略。
先采用較慢的方式發送http請求訪問,此外每隔一段時間最好停一下,然后再繼續訪問。除此之外用User-Agent字段偽裝成瀏覽器。最保險的方法就是購買代理,讓代理用不同的ip地址去訪問網站,即可繞過反爬蟲機制。
具體做法可以參照相關反爬蟲策略的文章。
關于作者:染陌
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
轉載請注明出處,謝謝。
歡迎關注我的公眾號
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82687.html
摘要:智聯其實一共寫了兩次,有興趣的可以在源碼看看,第一版的是回調版,只能一次一頁的爬取。 寫在前面的話, .......還是不寫了,直接上效果圖。附上源碼地址 github.lonhon showImg(https://segmentfault.com/img/bVUM3F?w=714&h=543);showImg(https://segmentfault.com/img/bVUM...
摘要:微信知乎新浪等主流網站的模擬登陸爬取方法摘要微信知乎新浪等主流網站的模擬登陸爬取方法。先說說很難爬的知乎,假如我們想爬取知乎主頁的內容,就必須要先登陸才能爬,不然看不到這個界面。圖片描述知乎需要手機號才能注冊登陸。 微信、知乎、新浪等主流網站的模擬登陸爬取方法摘要:微信、知乎、新浪等主流網站的模擬登陸爬取方法。 網絡上有形形色色的網站,不同類型的網站爬蟲策略不同,難易程度也不一樣。從是...
摘要:成功爬取了拉鉤網上多個招聘崗位的具體信息后,數據可視化并得出分析結果如下從整體看,北上廣深杭這五個城市前端工程師招聘崗位,北京是遙遙領先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發于 github blog 不想看爬蟲過程只想看職位錢途數據分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...
摘要:數目限制應該省略的條數數目限制排序方式函數的參數個數,必須是個,或者個。 基本思路 1.通過node中的 superagent 模擬http請求,去讀取豆瓣小組的信息,對讀取到的信息通過cheerio插件進行解析格式化以便于獲取body中的信息存儲到mongodb中 2.因為豆瓣會ban掉一寫爬蟲ip,所以爬取過程中會使用ip池挑選沒有使用過的ip進行代理去爬取,并且會避免并發 使用m...
閱讀 3105·2021-11-18 10:02
閱讀 2617·2021-10-13 09:47
閱讀 3033·2021-09-22 15:07
閱讀 791·2019-08-30 15:43
閱讀 1809·2019-08-30 10:59
閱讀 1684·2019-08-29 15:34
閱讀 1702·2019-08-29 15:06
閱讀 438·2019-08-29 13:28