看了擲骰子的求的這篇文章http://www.reibang.com/p/5f5cfefd7f1d#覺得獲益匪淺舱污,正好在練習(xí)怎么把數(shù)據(jù)存入mongodb耍休,就跟著博主選了趕集的租房信息作了數(shù)據(jù)源杯道,選合租挽牢,個人(依然不會在ubuntu上打出頓號)后就是這個鏈接http://cd.ganji.com/fang3/a1o1唯灵。
分析頁面特征并爬取每處房子的詳情url
- 觀察翻頁時url的變動信息
頁1.png
頁2.png
- 頁數(shù)與翻頁
顯而易見a1o1和a1o2的o幾就是頁數(shù)钝鸽,趕集頁面好像改版了喷户,所以不能再像原博那樣分析邊界條件了唾那,我直接改變url頁數(shù)試出大概有63頁(技術(shù)不夠,體力來湊)摩骨。
count = 0
for i in range(1, page + 1):
url = 'http://cd.ganji.com/fang3/a1o%s/' % i
- 然后通過status_code對頁面進(jìn)行判斷
if zf_data.status_code == 404:
pass
- 關(guān)于線程與進(jìn)程只是以前看過幾頁書知道是怎么回事但沒寫過代碼通贞,代理池也并不會朗若,慢點(diǎn)爬應(yīng)該不會封我一個小IP吧,這次主要練習(xí)存儲數(shù)據(jù)昌罩,所以就一切簡單化
-
然后就遇到了一個巨大的坑哭懈,本來我是根據(jù)這個href提取url的
href.png
寫了這樣的代碼
links = soup.select("class.f-list-item")
這個爬蟲寫完后以為不會再出bug,就run了起來然后起身去廁所,沒想到回來它就停了茎用。
第五個出錯.png
在PyCharm上檢查了一下遣总,是第五個數(shù)據(jù)出了問題,然后檢查代碼發(fā)現(xiàn)好像沒錯轨功,再打開趕集F12一下旭斥,哇,原來是被趕集這個源碼坑了古涧。上圖
陷阱.png
趕集把第5個規(guī)則改了一下垂券,確實(shí)是防爬了。好了羡滑,不怕有bug菇爪,只要知道是什么原因就好解決了。改變策略柒昏,上re凳宙,用那個puid構(gòu)建url(先在源碼里面搜索下數(shù)量檢查一下),然后寫入mongodb表url_list中职祷。
puid = re.findall('id="puid-(.*?)"', html, re.S)
count += 1
print('抓到第%s頁鏈接' % count)
for l in puid:
fang_url = 'http://cd.ganji.com/fang3/%sx.htm' % l
url_list.insert_one({'link': fang_url})
print(fang_url)
根據(jù)每處房子的url抓取詳細(xì)信息
- 用BeautifulSoup就是很簡單的頁面分析
data = {
'title': soup.select(".card-title i")[0].get_text(strip=True),
'price': soup.select(".price")[0].get_text(strip=True),
'synopsis': soup.select(".fang-info")[0].get_text(" ", strip=True),
'name': soup.select(".item-con")[0].get_text(strip=True),
'area': soup.select(".item-con")[1].get_text(strip=True),
'describe': soup.select(".describe")[0].get_text(strip=True),
'url': url
}
print(data)
items_info.insert_one(data)
最后用函數(shù)封裝起來
it = url_list.find()
for i in it:
url = i['link']
get_items(url=url)
運(yùn)行了一會依然是有bug出現(xiàn)了
bug.png
抓取數(shù)量.png
數(shù)據(jù).png
總共是3405個url氏涩,抓了912個信息存入mongodb。至于為什么912個就停了有梆,現(xiàn)在絲毫不想debug是尖,日后再說吧。
- **數(shù)據(jù)可視化還不會泥耀,抓取動態(tài)頁面也還沒學(xué)析砸,還有線程代理等等要學(xué)的。B回城回滿血再傳送到線上繼續(xù)farm **