成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

養(yǎng)只爬蟲當寵物(Node.js 爬蟲爬取 58 同城租房信息)

宋華 / 1919人閱讀

摘要:一個爬蟲租房軟件。獲取導航頁以及數(shù)據(jù)打開同城主頁,我主要針對杭州的二手房進行了爬取分析,所以進入杭州租房。這次我們需要解析房屋所在地信息,用來可視化顯示。具體做法可以參照相關反爬蟲策略的文章。

一個爬蟲租房軟件。

先上一個源代碼吧。

https://github.com/answershuto/Rental

歡迎指導交流。

效果圖

搭建Node.js環(huán)境及啟動服務

安裝node以及npm,用express模塊啟動服務,加入自己所需要的中間件即可,這個不是本文所要討論的重點,可以參考網(wǎng)上的一些教程搭建環(huán)境。

獲取導航頁URL以及數(shù)據(jù)

打開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,上下頁查看后就不難發(fā)現(xiàn),pn后面的數(shù)字就是頁面的頁碼,?后面的是一些get請求帶帶參數(shù)。用一個函數(shù)即可通過頁碼得到正確的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我們就可以訪問到每一頁的所有租房信息

用cheerio模塊解析dom

安裝cheerio模塊,使用cheerio模塊解析dom,然后就可以類似jquery一樣訪問dom了。

var cheerio = require("cheerio");
let $ = cheerio.load(html);
獲取每個租房信息的URL

打開開發(fā)者模式,osX(option + command + I),windows( F12 ),然后就可以在elements中看到文檔結構了。(這里以chrome為例)

可以看到對應的a標簽,我們只需要提取出該url即可,及對應的href,就是它點擊跳轉的URL。

[單間]支持月付 文一路梧桐公寓 耀江文萃苑 中豪晴元

該a標簽的class為t,用$("a.t")即可得到所有的a標簽的對象,得到的是一個數(shù)組,遍歷取出href屬性即可。

for(let i = 0; i < $("a.t").length; i++){
    rentalObj.add($("a.t")[i].attribs.href)
}

得到了這些URL,接下來就可以用這些URL訪問具體的租房信息了,每個URL對應一個租房頁面。

根據(jù)租房信息的URL訪問相應頁面,爬取數(shù)據(jù)

還是先進入頁面打開開發(fā)者模式。

這次我們需要解析房屋所在地信息,用來可視化顯示。

$("td.house-xqxq-content a.ablue")

加上父標簽可以過濾出更有針對性的dom,此時過濾出的是小區(qū)名稱、本月均價、所在商圈等信息的dom,我們現(xiàn)在只需要第一個dom里面的數(shù)據(jù),所以訪問數(shù)組的[0]即可。

除此之外為還需要頁面里面的一張展示房屋信息的一張圖片,找到對應dom可以發(fā)現(xiàn)id為smainPic。

$("#smainPic")["0"].attribs.src

這樣訪問即可得到圖片的URL。

其他我們還可以用同樣的方法獲取很多相關數(shù)據(jù),比如$(".house-price").text()得到價格數(shù)據(jù),$("span.tel-num.tel-font").text()可以得到房東的聯(lián)系方式。

通過百度地圖進行可視化展示

這里使用百度地圖api
http://lbsyun.baidu.com/index.php?title=jspopular

var map = new BMap.Map("container");          // 創(chuàng)建地圖實例  
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)緯度以后再掉用相應的api在地圖上顯示即可,顯示后再做什么效果,可自行發(fā)揮想象了。

關于反爬蟲

在爬取過程中發(fā)現(xiàn)58同城的反爬蟲策略,快速訪問會讓你輸入驗證碼來驗證是人在操作而不是代碼訪問。只要是人可以正常訪問并不影響用戶正常體驗的網(wǎng)站都有辦法繞過反爬蟲策略。

先采用較慢的方式發(fā)送http請求訪問,此外每隔一段時間最好停一下,然后再繼續(xù)訪問。除此之外用User-Agent字段偽裝成瀏覽器。最保險的方法就是購買代理,讓代理用不同的ip地址去訪問網(wǎng)站,即可繞過反爬蟲機制。

具體做法可以參照相關反爬蟲策略的文章。

關于

作者:染陌

Email:[email protected] or [email protected]

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

轉載請注明出處,謝謝。

歡迎關注我的公眾號

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/82687.html

相關文章

  • node.js 89行爬蟲爬取智聯(lián)招聘信息

    摘要:智聯(lián)其實一共寫了兩次,有興趣的可以在源碼看看,第一版的是回調版,只能一次一頁的爬取。 寫在前面的話,    .......還是不寫了,直接上效果圖。附上源碼地址 github.lonhon showImg(https://segmentfault.com/img/bVUM3F?w=714&h=543);showImg(https://segmentfault.com/img/bVUM...

    _ivan 評論0 收藏0
  • Python爬蟲學習:微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法

    摘要:微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法摘要微信知乎新浪等主流網(wǎng)站的模擬登陸爬取方法。先說說很難爬的知乎,假如我們想爬取知乎主頁的內容,就必須要先登陸才能爬,不然看不到這個界面。圖片描述知乎需要手機號才能注冊登陸。 微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法摘要:微信、知乎、新浪等主流網(wǎng)站的模擬登陸爬取方法。 網(wǎng)絡上有形形色色的網(wǎng)站,不同類型的網(wǎng)站爬蟲策略不同,難易程度也不一樣。從是...

    Kahn 評論0 收藏0
  • node.js 爬取招聘信息分析各職業(yè)錢途(爬蟲+動態(tài)IP代理+數(shù)據(jù)可視化分析)

    摘要:成功爬取了拉鉤網(wǎng)上多個招聘崗位的具體信息后,數(shù)據(jù)可視化并得出分析結果如下從整體看,北上廣深杭這五個城市前端工程師招聘崗位,北京是遙遙領先,是深圳的兩倍,是廣州的三倍,其次到上海,深圳,杭州,廣州居末。 前前言 本文首發(fā)于 github blog 不想看爬蟲過程只想看職位錢途數(shù)據(jù)分析請看這里:前端招聘崗位分析C++招聘崗位分析JAVA招聘崗位分析PHP招聘崗位分析Python招聘崗位分析...

    546669204 評論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關。有關書籍的介紹,大部分截取自是官方介紹。但從開始,標準庫為我們提供了模塊,它提供了和兩個類,實現(xiàn)了對和的進一步抽象,對編寫線程池進程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進階的書, 里面介紹的基本都是高級的python用法. 對于初學python的人來說, 基礎大概也就夠用了...

    dailybird 評論0 收藏0
  • 爬豆瓣小組中的租房信息(mongo+node+vue)

    摘要:數(shù)目限制應該省略的條數(shù)數(shù)目限制排序方式函數(shù)的參數(shù)個數(shù),必須是個,或者個。 基本思路 1.通過node中的 superagent 模擬http請求,去讀取豆瓣小組的信息,對讀取到的信息通過cheerio插件進行解析格式化以便于獲取body中的信息存儲到mongodb中 2.因為豆瓣會ban掉一寫爬蟲ip,所以爬取過程中會使用ip池挑選沒有使用過的ip進行代理去爬取,并且會避免并發(fā) 使用m...

    vvpvvp 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<