1. 程式人生 > >利用python爬取我愛我家租賃房源資訊

利用python爬取我愛我家租賃房源資訊

主要思路:

1.通過get方法向伺服器提交head檔案和cookie資訊(通過在chrome網頁上面登入之後獲取,避免了通過賬號密碼模擬登陸的繁瑣過程),實現模擬登陸的效果
2.訪問網頁,通過萬能的正則匹配到所需要的資訊

具體演算法有3步驟:

1.從租賃房源的第一頁至第100頁get網頁資訊,每頁對應的url為:url_1='http://bj.5i5j.com/rent/n%d',獲取每個網頁裡面的房源編號;
2.通過每個房源的房源編號進入該房源介面,爬取該房源的'價格','戶型','面積','朝向','樓層','小區名稱'資訊
3.將爬取的房源資訊儲存在5i5j_house_info.xlsx下

待完善:

1.由於訪問每個網頁會花費很長時間的io開銷,後期會將房源編號放在佇列中,通過佇列鎖+多執行緒提高爬蟲速度

2.我愛我家沒有反爬蟲機制,如遇到反爬蟲可以採用代理ip,多瀏覽器,多賬號等進行爬蟲

結果如下:


具體程式碼如下:

#get_525j_house_info
import requests
import json
import time
import urllib.request
from win32.win32crypt import CryptUnprotectData
from urllib import parse
import re
url_1='http://bj.5i5j.com/rent/n%d'
#標頭檔案資訊,可用於模擬登陸
httphead='''
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Cookie:suid=8715039984; BIGipServer=3647539722.20480.0000; PHPSESSID=a2a4l07dfeejokb2k2u1hgt7c6; yfx_c_g_u_id_10000001=_ck17101612002011032445773465255; renthistorys=%5B%7B%22id%22%3A%22166475545%22%2C%22imgurl%22%3A%22house%5C%2F3768%5C%2F37688980%5C%2Fshinei%5C%2Ffadhfope9b890c26.jpg%22%2C%22housetitle%22%3A%22%5Cu7802%5Cu8f6e%5Cu5382%5Cu5bbf%5Cu820d+2%5Cu5ba41%5Cu53851%5Cu536b%22%2C%22parentareaname%22%3A%22%5Cu6e05%5Cu6cb3%22%2C%22buildarea%22%3A%2263.85%22%2C%22hallhouse%22%3A%222%5Cu5ba41%5Cu5385%22%2C%22districtname%22%3A%22%5Cu6d77%5Cu6dc0%22%2C%22conmmunityname%22%3A%22%5Cu7802%5Cu8f6e%5Cu5382%5Cu5bbf%5Cu820d%22%2C%22price%22%3A%222200%22%2C%22onePrice%22%3A344558%7D%2C%7B%22id%22%3A%22166968941%22%2C%22imgurl%22%3A%22house%5C%2F3741%5C%2F37414743%5C%2Fshinei%5C%2Fnhecpeho0a3e23b4.jpg%22%2C%22housetitle%22%3A%22%5Cu8d22%5Cu5927%5Cu5bb6%5Cu5c5e%5Cu9662+2%5Cu5ba41%5Cu53851%5Cu536b%22%2C%22parentareaname%22%3A%22%5Cu4e0a%5Cu5730%22%2C%22buildarea%22%3A%2210%22%2C%22hallhouse%22%3A%222%5Cu5ba41%5Cu5385%22%2C%22districtname%22%3A%22%5Cu6d77%5Cu6dc0%22%2C%22conmmunityname%22%3A%22%5Cu8d22%5Cu5927%5Cu5bb6%5Cu5c5e%5Cu9662%22%2C%22price%22%3A%222000%22%2C%22onePrice%22%3A2000000%7D%2C%7B%22id%22%3A%22171185475%22%2C%22imgurl%22%3Anull%2C%22housetitle%22%3A%22%5Cu6c38%5Cu65fa%5Cu5bb6%5Cu56ed+2%5Cu5ba41%5Cu53851%5Cu536b%22%2C%22parentareaname%22%3A%22%5Cu4e0a%5Cu5730%22%2C%22buildarea%22%3A%2230%22%2C%22hallhouse%22%3A%222%5Cu5ba41%5Cu5385%22%2C%22districtname%22%3A%22%5Cu6d77%5Cu6dc0%22%2C%22conmmunityname%22%3A%22%5Cu6c38%5Cu65fa%5Cu5bb6%5Cu56ed%22%2C%22price%22%3A%221600%22%2C%22onePrice%22%3A533333%7D%2C%7B%22id%22%3A%22166983380%22%2C%22imgurl%22%3A%22house%5C%2F3772%5C%2F37726408%5C%2Fshinei%5C%2Foahhomjoe708d412.jpg%22%2C%22housetitle%22%3A%22%5Cu767e%5Cu65fa%5Cu5bb6%5Cu82d1+4%5Cu5ba41%5Cu53852%5Cu536b%22%2C%22parentareaname%22%3A%22%5Cu4e0a%5Cu5730%22%2C%22buildarea%22%3A%22140%22%2C%22hallhouse%22%3A%224%5Cu5ba41%5Cu5385%22%2C%22districtname%22%3A%22%5Cu6d77%5Cu6dc0%22%2C%22conmmunityname%22%3A%22%5Cu767e%5Cu65fa%5Cu5bb6%5Cu82d1%22%2C%22price%22%3A%222000%22%2C%22onePrice%22%3A142857%7D%5D; searchHistorys=%5B%7B%22name%22%3A%22%5Cu6d77%5Cu6dc0%22%2C%22spell%22%3A%22haidian%22%2C%22level%22%3A3%2C%22id%22%3A%225%22%7D%2C%7B%22name%22%3A%22nanwu%22%2C%22spell%22%3A%22%22%2C%22level%22%3A1%2C%22id%22%3A%22%22%7D%2C%7B%22name%22%3A%22%5Cu4e0a%5Cu5730%22%2C%22spell%22%3A%22shangdi%22%2C%22level%22%3A4%2C%22id%22%3A%2236854%22%7D%5D; yfx_f_l_v_t_10000001=f_t_1508126420098__r_t_1509969433602__v_t_1509969433602__r_c_1; __utmt=1; __utmt_t2=1; _va_ref=%5B%22%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98%22%2C%22%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98%22%2C1509969435%2C%22http%3A%2F%2Fbzclk.baidu.com%2Fadrc.php%3Ft%3D06KL00c00f7SfKC0mn7m0KFRQ00NH6Kp00000F9_U7b000000TGQTM.THYdpHNJcQMuVeLPSPyS0A3qmh7GuZR0T1dhuyN9P1mkn10snjubuywW0ZRqPWD1wHbznHcdnb7KfW0sn16zwW04PWbsn1wAwHRsrHn0mHdL5iuVmv-b5Hnsn1TvnWcvn1fhTZFEuA-b5HDv0ARqpZwYTjCEQvFJQWNGPyC8mvqVQ1qdIAdxTvqdThP-5yF9pywdFMNYUNqVuywGIyYqTZKlTiudIAdxIANzUHY-uHR-rHn-rjD-uHf-mW6-rHn-uHm-mH0-rjT-uHb-mHc-rH6hIgwVgvPEUMw-UMfqFyRdFHb1FH6kFyRYFyc3FHb1FyRvFyDsFH6LFyR4FyDzFHb3FMNYUNqWmydsmy-MUWY-uHR-rHn-rjD-uHf-mW6-rHn-uHm-mH0-rjT-uHb-mHc-rH6hUAVdUHYzPsKWThnqnHDvn1T%26tpl%3Dtpl_10144_15654_11145%26l%3D1500277912%26attach%3Dlocation%3D%26linkName%3D%25E6%25A0%2587%25E9%25A2%2598%26linkText%3D%25E6%2588%2591%25E7%2588%25B1%25E6%2588%2591%25E5%25AE%25B6%25EF%25BC%258C%25E5%2585%25A8%25E5%25BF%2583%25E5%2585%25A8%25E6%2584%258F%25E6%2589%25BE%25E6%2588%25BF%25EF%25BC%258C%25E7%259C%259F%25E5%25BF%2583%25E5%25AE%259E%25E6%2584%258F%26xp%3Did(%2522m501af8ab%2522)%252FDIV%255B1%255D%252FDIV%255B1%255D%252FDIV%255B1%255D%252FDIV%255B1%255D%252FH2%255B1%255D%252FA%255B1%255D%26linkType%3D%26checksum%3D211%26ie%3Dutf-8%26f%3D3%26tn%3Dbaidu%26wd%3D5i5j%20%E5%AE%98%E6%96%B9%E7%BD%91%E7%AB%99%26oq%3D525j%26rqlang%3Dcn%26inputT%3D8167%26rsp%3D0%22%5D; __utma=1.68281274.1508126420.1508130935.1509969435.3; __utmb=1.5.10.1509969435; __utmc=1; __utmz=1.1509969435.3.3.utmcsr=baidu|utmccn=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98|utmcmd=ppzq|utmctr=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98|utmcct=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98; __utma=228451417.694811314.1508126420.1508130935.1509969435.3; __utmb=228451417.5.10.1509969435; __utmc=228451417; __utmz=228451417.1509969435.3.3.utmcsr=baidu|utmccn=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98|utmcmd=ppzq|utmctr=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98|utmcct=%E5%93%81%E4%B8%93%E6%A0%87%E9%A2%98; _va_id=9086dafceef2e930.1508126421.3.1509969793.1509969435.; _va_ses=*; Hm_lvt_0bccd3f0d70c2d02eb727b5add099013=1508126420,1508130935,1509969434; Hm_lpvt_0bccd3f0d70c2d02eb727b5add099013=1509969793; Hm_lvt_fbfca6a323fa396dde12616e37bc1df9=1508126420,1508130935,1509969434; Hm_lpvt_fbfca6a323fa396dde12616e37bc1df9=1509969793; Hm_lvt_b3ad53a84ea4279d8124cc28d3c3220f=1508126420,1508130935,1509969434; Hm_lpvt_b3ad53a84ea4279d8124cc28d3c3220f=1509969793; _pzfxuvpc=1508126420423%7C1062778321885559810%7C33%7C1509969793161%7C3%7C7558331484128782074%7C4424313154138490995; _pzfxsvpc=4424313154138490995%7C1509969434144%7C5%7Chttp%3A%2F%2Fbzclk.baidu.com%2Fadrc.php%3Ft%3D06KL00c00f7SfKC0mn7m0KFRQ00NH6Kp00000F9_U7b000000TGQTM.THYdpHNJcQMuVeLPSPyS0A3qmh7GuZR0T1dhuyN9P1mkn10snjubuywW0ZRqPWD1wHbznHcdnb7KfW0sn16zwW04PWbsn1wAwHRsrHn0mHdL5iuVmv-b5Hnsn1TvnWcvn1fhTZFEuA-b5HDv0ARqpZwYTjCEQvFJQWNGPyC8mvqVQ1qdIAdxTvqdThP-5yF9pywdFMNYUNqVuywGIyYqTZKlTiudIAdxIANzUHY-uHR-rHn-rjD-uHf-mW6-rHn-uHm-mH0-rjT-uHb-mHc-rH6hIgwVgvPEUMw-UMfqFyRdFHb1FH6kFyRYFyc3FHb1FyRvFyDsFH6LFyR4FyDzFHb3FMNYUNqWmydsmy-MUWY-uHR-rHn-rjD-uHf-mW6-rHn-uHm-mH0-rjT-uHb-mHc-rH6hUAVdUHYzPsKWThnqnHDvn1T%26tpl%3Dtpl_10144_15654_11145%26l%3D1500277912%26attach%3Dlocation%253D%2526linkName%253D%2525E6%2525A0%252587%2525E9%2525A2%252598%2526linkText%253D%2525E6%252588%252591%2525E7%252588%2525B1%2525E6%252588%252591%2525E5%2525AE%2525B6%2525EF%2525BC%25258C%2525E5%252585%2525A8%2525E5%2525BF%252583%2525E5%252585%2525A8%2525E6%252584%25258F%2525E6%252589%2525BE%2525E6%252588%2525BF%2525EF%2525BC%25258C%2525E7%25259C%25259F%2525E5%2525BF%252583%2525E5%2525AE%25259E%2525E6%252584%25258F%2526xp%253Did(%252522m501af8ab%252522)%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FDIV%25255B1%25255D%25252FH2%25255B1%25255D%25252FA%25255B1%25255D%2526linkType%253D%2526checksum%253D211%26ie%3Dutf-8%26f%3D3%26tn%3Dbaidu%26wd%3D5i5j%2520%25E5%25AE%2598%25E6%2596%25B9%25E7%25BD%2591%25E7%25AB%2599%26oq%3D525j%26rqlang%3Dcn%26inputT%3D8167%26rsp%3D0; Hm_lvt_407473d433e871de861cf818aa1405a1=1508126427,1508130941,1509969440; Hm_lpvt_407473d433e871de861cf818aa1405a1=1509969798; domain=bj
Host:bj.5i5j.com
Referer:http://bj.5i5j.com/rent
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36
'''
#獲取head和cookies
def get_head_cookies(httphead):
    head={}
    for i in httphead.strip().split('\n'):
        if re.match('Referer',i):
            head['Referer']=i[len('Referer'):]
            continue
        line=i.strip().split(':')
        head[line[0]]=line[1]
    cookie=head['Cookie']
    cookies={}
    for i in cookie.strip().split(';'):
        line=i.strip().split('=')
        cookies[line[0]]=line[1]
    return head,cookies
head,cookies=get_head_cookies(httphead)
#獲取房源id
house_id='<a href="/rent/([\d]{9})"'
def get_house_ids(url):
    return set(re.findall(house_id,requests.get(url=url,headers=head,cookies=cookies).content.decode('utf-8')))


house_ids=set()
page_url_error=[]
for i in range(1,10):
    try:
        house_ids.update(get_house_ids(url_1%(i)))
    except:
        page_url_error.append(i)


#對於每個房源進行爬取資訊
house_inf='''<ul class="house-info">.+?"font-price">([\d|\.]+?)</span> 元/月.+?<b>戶型:</b>(.+?)&.+?<b>面積:</b>(.+?)</li>.+?<b>朝向:</b>(.+?)</li>.+?<b>樓層:</b>(.+?)</li>.+?<b>小區:</b>(.+?)\s+.+?</li>.+?</ul>'''
def get_house_inf(house_id):
    return re.findall(house_inf,requests.get(url='http://bj.5i5j.com/rent/'+house_id,headers=head,cookies=cookies).content.decode('utf-8'),re.S|re.M)[0]

from openpyxl import Workbook
file='F:\\臨時工作\\1023\\5i5j_house_info.xlsx'
wb_bj=Workbook()
ws_bj=wb_bj.worksheets[0]
ws_bj.title='房源資訊表'
#獲取資訊類似於('6800', '2室1廳1衛', '50.45平米', '南', '中部/13層', '崇文門西大街')
line_1=['價格','戶型','面積','朝向','樓層','小區名稱']
ws_bj.append(line_1)
house_id_error=[]
for house_id in house_ids:
    try:
        ws_bj.append(get_house_inf(house_id))
    except:
        house_id_error.append(house_id)
wb_bj.save(file)
#輸出出錯對應的網頁url和戶型id
print(page_url_error,house_id_error)

相關推薦

利用python我家租賃房源資訊

主要思路: 1.通過get方法向伺服器提交head檔案和cookie資訊(通過在chrome網頁上面登入之後獲取,避免了通過賬號密碼模擬登陸的繁瑣過程),實現模擬登陸的效果 2.訪問網頁,通過萬能的正則匹配到所需要的資訊 具體演算法有3步驟: 1.從租賃房源的第一頁至第10

利用BeautifulSoup我家的租房資料

因為之前對BeautifulSoup一直不是很熟悉,剛好身邊的朋友同事在找房子,就想著能不能自己寫個爬蟲爬一下資料,因此就寫了這個爬蟲。基本都是邊看書邊寫的,不過也沒什麼好講的。直接粘程式碼了。

利用pythonIP地址歸屬地等資訊

import requests url = "http://m.ip138.com/ip.asp?ip=" try: r = requests.get(url + '202.204.80.112') r.raise_for_status()

利用Python幾百萬github數據!這些源碼都是的囊中之物!

.py .com exchange 非阻塞 問題 判斷 recursion 異步調用 direct 進群:548377875 即可獲取數十套PDF哦! 看到這麽簡單的流程,內心的第一想法就是先簡單的寫一個遞歸實現唄,要是性能差再慢慢優化,所以第一

利用python龍虎榜數據及後續分析

登錄 one 可能 股市 .com 爬蟲 但我 由於 相關 ##之前已經有很多人寫過相關內容,但我之前並未閱讀過,這個爬蟲也是按照自己的思路寫的,可能比較醜陋,請見諒! 本人作為Python爬蟲新手和股市韭菜,由於時間原因每晚沒辦法一個個翻龍虎榜數據,所以希望借助爬蟲篩選出

利用python點小圖片,滿足私欲(爬蟲)

.text write ret append jpg use download div pat import requestsimport reimport os,syslinks=[]titles=[] headers = { "User-Agent": "Mozi

利用python糗事百科的用戶及段子

我們 什麽 roo urlopen gen 文件 addheader find 正則匹配 最近正在學習python爬蟲,爬蟲可以做很多有趣的事,本文利用python爬蟲來爬取糗事百科的用戶以及段子,我們需要利用python獲取糗事百科一個頁面的用戶以及段子,就需要匹配兩次,

利用Python可用的代理IP

strip() color 地址 read main urn try exc head 前言 就以最近發現的一個免費代理IP網站為例:http://www.xicidaili.com/nn/。在使用的時候發現很多IP都用不了。 所以用Python寫了個腳本,該腳本可以把能用

Python爬蟲案例:利用Python笑話網

htm 分享 targe pen 技術分享 搞笑 lan tle import 學校的服務器可以上外網了,所以打算寫一個自動爬取笑話並發到bbs的東西,從網上搜了一個笑話網站,感覺大部分還不太冷,html結構如下: 可以看到,笑話的鏈接列表都在<div cla

沒有內涵段子可以刷了,利用Python段友之家貼吧圖片和小視頻(含源碼)

python 興趣 爬蟲 職業 由於最新的視頻整頓風波,內涵段子APP被迫關閉,廣大段友無家可歸,但是最近發現了一個“段友”的app,版本更新也挺快,正在號召廣大段友回家,如下圖,有興趣的可以下載看看(ps:我不是打廣告的,沒收廣告費的) 同時,之前同事也發了一個貼吧的段子聚居地,客官稍等,馬

今天你教高考生一個裝逼神技!利用Python歷年高考成績!

mongo tle one 展示 com .text color rep mon 2.爬取數據 1.獲取各省的分數線信息 獲取各省份的鏈接: # 獲取分數線 def get_score(url): web_data = requests.get(url, hea

最後輕松一夏,周末利用python“陳翔六點半”搞笑視頻!

多看 獲取數據 也會 程序員 copy 是什麽 查看 ima 周末 覺得程序員再忙也需要給自己安排一點娛樂時間,對自己好點,自己對自己不好,誰會? 自己娛樂一般會有:跑步、看電影、小視頻,而小視頻是最家常的娛樂方式,看得最多的小視頻是「 陳翔六點半 」,咦! 拍得搞笑

利用Python500萬以上的國產自拍小電影哦!

  宣告:本專案旨在學習Scrapy爬蟲框架和MongoDB資料庫,不可使用於商業和個人其他意圖。若使用不當,均由個人承擔。   PornHubBot PornHubBot專案主要是爬取全球最大的小電影網站PornHub的視訊標題、時長、mp4連結、封

利用Python了1600個崗位!原來一個程式設計師的年薪可以這麼高!

Python學了這麼久,相信很多小夥伴都想知道錢途如何,全國各大城市招聘Python的崗位有多少,都招哪些職位,年薪如何等等,我爬取了拉勾近1600個Python相關的職位,我們用資料說話!   進群:548377875  即可獲取數十套PDF哦! &nb

利用pythonyapi後臺介面

解決的問題:檢測公司釋出系統之中,遺漏的介面路徑地址。 採取的方法:爬取yapi管理後臺,爬取所有的介面路徑,同時檢測這個path路徑是否在釋出系統之中(如果不在釋出系統之後,通過域名訪問,會提示沒有許可權) 好了瞭解了背景之後 我就開始開工了。 一、瞭解yapi  在

利用pythonmobike在西安地區的分佈情況

先附上整個思路流程 1,獲取mobike單車的API介面 2,爬取API資料 3,資料視覺化 一:利用Fiddle抓取mobileAPI資料介面得到post請求如下 POST https://mwx.mobike.com/nearby/nearbyBikeInf

利用Python攝影網站圖片,切勿商用

今天我們繼續爬取一個網站,這個網站為 http://image.fengniao.com/ ,蜂鳥一個攝影大牛聚集的地方,本教程請用來學習,不要用於商業目的,不出意外,蜂鳥是有版權保護的網站。 Python學習資料或者需要程式碼、視訊加Python學習群:9604104

利用PythonB站攝影欄目的圖片

Python中可以用作爬蟲的庫有兩個,一個是urllib,一個是request,推薦使用後一種,這才是給人類使用的爬蟲庫,上手十分簡單! request庫使用教程 話說回來,B站中由專門下載圖片的API,因此爬取圖片還是比較方便的,找到你喜歡的攝影照片的id,加在URL("https://a

利用Python房產資料!並在地圖上顯示!Python乃蒂花之秀!

    JiwuspiderSpider.py # -*- coding: utf-8 -*- from scrapy import Spider,Request import re from jiwu.items import JiwuItem clas

Python爬蟲系列之四:利用PythonPyODPS頁面並整合成PDF文件

文章架構 開發場景 在日常開發過程中, 經常需要參考一些文件。對於線上文件,往往由於網速等原因,用起來總不是那麼(ma)順(fan)心。 開發工具 Anaconda Python 2 實現方案 基於 bs4 模組標籤解析 爬取