




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Python實(shí)現(xiàn)爬取房源信息的示例詳解目錄前言分析頁(yè)面,尋找切入點(diǎn)爬取數(shù)據(jù)整理數(shù)據(jù),導(dǎo)出文件
前言
最近由于工作突然變動(dòng),新的辦公地點(diǎn)離現(xiàn)在的住處很遠(yuǎn),必須要換房子租了。
我坐上中介的小電驢,開(kāi)始探索城市各處的陌生角落。
在各個(gè)租房app之間周轉(zhuǎn)的過(guò)程中,我屬實(shí)有些焦頭爛額,因?yàn)樾收娴暮艿拖拢?/p>
首先,因?yàn)楦炎≡谝黄?,需要同時(shí)考慮兩人的上班路程,但各平臺(tái)按通勤時(shí)長(zhǎng)找房的功能都比較雞肋,有的平臺(tái)不支持同時(shí)選擇多個(gè)地點(diǎn),有的平臺(tái)只能機(jī)械的取到離各個(gè)地點(diǎn)通勤時(shí)長(zhǎng)相同的點(diǎn),滿足不了使用需求。
其次,站在一個(gè)租房人的立場(chǎng),租房平臺(tái)實(shí)在太多了,并且各平臺(tái)篩選和排序邏輯都不太一致,導(dǎo)致很難將相似房源的信息進(jìn)行橫向比較。
但是沒(méi)有關(guān)系,作為一名程序員,當(dāng)然要用程序員的方法來(lái)解決問(wèn)題了。于是,昨晚我用一個(gè)python腳本,獲取了某租房平臺(tái)上海地區(qū)的所有房源信息,一共2w多條:
下面就把本次爬數(shù)據(jù)的整個(gè)過(guò)程分享給大家。
分析頁(yè)面,尋找切入點(diǎn)
首先進(jìn)入該平臺(tái)的租房頁(yè)面,可以看到,主頁(yè)上的房源列表里已經(jīng)包括了我們所需要的大部分信息,并且這些信息都能直接從dom中獲取到,因此考慮直接通過(guò)模擬請(qǐng)求來(lái)收集網(wǎng)頁(yè)數(shù)據(jù)。
因此接下來(lái)就要考慮怎么獲取url了。通過(guò)觀察我們發(fā)現(xiàn),該地區(qū)一共有2w套以上的房源,而通過(guò)網(wǎng)頁(yè)只能訪問(wèn)到前100頁(yè)的數(shù)據(jù),每頁(yè)顯示數(shù)量上限是30條,算下來(lái)就是一共3k條,無(wú)法獲取到全部信息。
不過(guò)我們可以通過(guò)添加篩選條件來(lái)解決這個(gè)問(wèn)題。在篩選項(xiàng)中選擇靜安,進(jìn)入到如下的url:
/zufang/jingan/
可以看到該地區(qū)一共有2k多套房源,數(shù)據(jù)頁(yè)數(shù)為75,每頁(yè)30條,理論上可以訪問(wèn)到所有的數(shù)據(jù)。所以可以通過(guò)分別獲取各區(qū)房源數(shù)據(jù)的方法,得到該市所有的數(shù)據(jù)。
/zufang/jingan/pg2/
點(diǎn)擊第二頁(yè)按鈕后,進(jìn)入到了上面的url,可以發(fā)現(xiàn)只要修改pg后面的數(shù)字,就能進(jìn)入到對(duì)應(yīng)的頁(yè)數(shù)。
不過(guò)這里發(fā)現(xiàn)一個(gè)問(wèn)題,相同的頁(yè)數(shù)每次訪問(wèn)得到的數(shù)據(jù)是不一樣的,這樣會(huì)導(dǎo)致收集到的數(shù)據(jù)出現(xiàn)重復(fù)。所以我們點(diǎn)擊排序條件中的最新上架,進(jìn)入到如下鏈接:
/zufang/jingan/pg2rco11/
用這種排序方式獲得的數(shù)據(jù)次序是穩(wěn)定的,至此我們的思路便有了:首先分別訪問(wèn)每個(gè)小地區(qū)的第一頁(yè),然后通過(guò)第一頁(yè)獲取當(dāng)前地區(qū)的最大頁(yè)數(shù),然后訪問(wèn)模擬請(qǐng)求訪問(wèn)每一頁(yè)獲取所有數(shù)據(jù)。
爬取數(shù)據(jù)
有了思路之后就要?jiǎng)邮謱懘a了,首先我們要收集包含所有的鏈接,代碼如下:
#
所有小地區(qū)對(duì)應(yīng)的標(biāo)識(shí)
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
#
存放所有鏈接
urls
=
[]
for
a
in
list:
urls.append('/zufang/{}/pg1rco11/'.format(a))
#
設(shè)置請(qǐng)求頭,避免ip被ban
headers
=
{'User-Agent':
'Mozilla/5.0
(Windows
NT
10.0;
WOW64)
AppleWebKit/537.36
(KHTML,
like
Gecko)
Chrome/81.0.4044.9
Safari/537.36'}
#
獲取當(dāng)前小地區(qū)第1頁(yè)的dom信息
res
=
requests.get('/zufang/{}/pg1rco11/'.format(a),
headers=headers)
content
=
res.text
soup
=
BeautifulSoup(content,
'html.parser')
#
獲取當(dāng)前頁(yè)面的最大頁(yè)數(shù)
page_num
=
int(soup.find('div',
attrs={'class':
'content__pg'}).attrs['data-totalpage'])
for
i
in
range(2,page_num+1):
#
將所有鏈接保存到urls中
urls.append('/zufang/{}/pg{}rco11/'.format(a,i))
之后,我們要逐一處理上一步得到的urls,獲取鏈接內(nèi)的數(shù)據(jù),代碼如下:
num=1
for
url
in
urls:
print("正在處理第{}頁(yè)數(shù)據(jù)...".format(str(num)))
res1
=
requests.get(url,
headers=headers)
content1
=
res1.text
soup1
=
BeautifulSoup(content1,
'html.parser')
infos
=
soup1.find('div',
{'class':
'content__list'}).find_all('div',
{'class':
'content__list--item'})
整理數(shù)據(jù),導(dǎo)出文件
通過(guò)對(duì)頁(yè)面結(jié)構(gòu)的觀察,我們能得到每個(gè)元素存儲(chǔ)的位置,找到對(duì)應(yīng)的頁(yè)面元素,就能獲取到我們需要的信息了。
這里附上完整的代碼,感興趣的朋友可以根據(jù)自己的需要,替換掉鏈接中的地區(qū)標(biāo)識(shí)和小地區(qū)的標(biāo)識(shí),就能夠獲取到自己所在地區(qū)的信息了。其他租房平臺(tái)的爬取方式大都類似,就不再贅述了。
import
time,
re,
csv,
requests
import
codecs
from
bs4
import
BeautifulSoup
print("****處理開(kāi)始****")
with
open(r'..\sh.csv',
'wb+')as
fp:
fp.write(codecs.BOM_UTF8)
f
=
open(r'..\sh.csv','w+',newline='',
encoding='utf-8')
writer
=
csv.writer(f)
urls
=
[]
#
所有小地區(qū)對(duì)應(yīng)的標(biāo)識(shí)
list=['jingan','xuhui','huangpu','changning','putuo','pudong','baoshan','hongkou','yangpu','minhang','jinshan','jiading','chongming','fengxian','songjiang','qingpu']
#
存放所有鏈接
urls
=
[]
for
a
in
list:
urls.append('/zufang/{}/pg1rco11/'.format(a))
#
設(shè)置請(qǐng)求頭,避免ip被ban
headers
=
{'User-Agent':
'Mozilla/5.0
(Windows
NT
10.0;
WOW64)
AppleWebKit/537.36
(KHTML,
like
Gecko)
Chrome/81.0.4044.9
Safari/537.36'}
#
獲取當(dāng)前小地區(qū)第1頁(yè)的dom信息
res
=
requests.get('/zufang/{}/pg1rco11/'.format(a),
headers=headers)
content
=
res.text
soup
=
BeautifulSoup(content,
'html.parser')
#
獲取當(dāng)前頁(yè)面的最大頁(yè)數(shù)
page_num
=
int(soup.find('div',
attrs={'class':
'content__pg'}).attrs['data-totalpage'])
for
i
in
range(2,page_num+1):
#
將所有鏈接保存到urls中
urls.append('/zufang/{}/pg{}rco11/'.format(a,i))
num=1
for
url
in
urls:
#
模擬請(qǐng)求
print("正在處理第{}頁(yè)數(shù)據(jù)...".format(str(num)))
res1
=
requests.get(url,
headers=headers)
content1
=
res1.text
soup1
=
BeautifulSoup(content1,
'html.parser')
#
讀取頁(yè)面中數(shù)據(jù)
infos
=
soup1.find('div',
{'class':
'content__list'}).find_all('div',
{'class':
'content__list--item'})
#
數(shù)據(jù)處理
for
info
in
infos:
house_url
=
''
+
info.a['href']
title
=
info.find('p',
{'class':
'content__list--item--title'}).find('a').get_text().strip()
group
=
title.split()[0][3:]
price
=
info.find('span',
{'class':
'content__list--item-price'}).get_text()
tag
=
info.find('p',
{'class':
'content__list--item--bottom
oneline'}).get_text()
mixed
=
info.find('p',
{'class':
'content__list--item--des'}).get_text()
mix
=
re.split(r'/',
mixed)
address
=
mix[0].strip()
area
=
mix[1].strip()
door_orientation
=
mix[2].strip()
style
=
mix[-1].strip()
region
=
re.split(r'-',
address)[0]
writer.writerow((house_url,
title,
group,
price,
ar
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 衛(wèi)生資格考試精要速記試題及答案
- 護(hù)理臨床判斷能力試題及答案
- 2025年自考行政管理小技巧及試題及答案
- 2025年行政管理試題與答案特色剖析
- 2025年行政法學(xué)考試關(guān)聯(lián)試題及答案
- 花園相鄰權(quán)糾紛解決與房產(chǎn)買賣合同
- 傳統(tǒng)文化的現(xiàn)代化探索與實(shí)踐試題及答案
- 2025年智能燃?xì)獗眄?xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 趙縣雪花梨產(chǎn)品快遞包裝安全設(shè)計(jì)
- 中非農(nóng)業(yè)項(xiàng)目股權(quán)合作與品牌建設(shè)合同書
- T∕ZZB 2733-2022 貫流式蒸汽發(fā)生器
- 戰(zhàn)略管理教學(xué)ppt課件(完整版)
- 艾滋病感染孕產(chǎn)婦所生兒童艾滋病早期診斷與抗體檢測(cè)流程圖
- 統(tǒng)籌監(jiān)管金融基礎(chǔ)設(shè)施工作方案
- 云南鋰電池項(xiàng)目可行性研究報(bào)告
- 博物館學(xué)概論:第十講 數(shù)字博物館
- 危險(xiǎn)化學(xué)品企業(yè)安全標(biāo)準(zhǔn)化規(guī)范課件
- 客戶退貨處理流程圖
- 中國(guó)民主同盟入盟申請(qǐng)表(樣表)
- 畢業(yè)設(shè)計(jì)(論文)-軸向柱塞泵設(shè)計(jì)(含全套CAD圖紙)
- 公安機(jī)關(guān)通用告知書模板
評(píng)論
0/150
提交評(píng)論