看了擲骰子的求的這篇文章http://www.itdecent.cn/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 **
