1. 程式人生 > >爬蟲第一彈:安居客房地產資料爬蟲

爬蟲第一彈:安居客房地產資料爬蟲

 一、功能分析:
1、我們要爬取的安居客南昌新房的420個樓盤的資訊,每個樓盤涵蓋'樓盤名稱' '樓盤特點' '參考單價' '物業型別' '開發商' '區域位置' '樓盤地址' '售樓處電話' '最低首付' '樓盤戶型' '最新開盤' '交房時間' '售樓處地址' '預售許可證' '建築型別' '產權年限' '容積率' '綠化率' '規劃戶數' '樓層狀況' '工程進度' '物業管理費' '物業公司' '車位數' '車位比'。
2、通過mysql建立對應列的資料庫anjuke,並將爬蟲爬取出來的資料匯入表格myanjuke;
3、通過mysql將資料匯出為anjk.xml 方便後續的資料分析工作,從而分析房地產的影響因子和構建房地產的估價模型。
4、這個爬蟲進一步優化可以爬取全國的房地產樓盤資訊,是不是很激動,由於本專案主要用於專案演示,所以點到為止。

二、思路構建:
1、利用scrapy構建scrapy startproject anjukepjt,搭建專案,並通過scrapy genspider -t basic anjukespd anjuke.com構建基本的爬蟲檔案;
2、通過item.py構建所有資料項;
3、setting.py將爬蟲協議關閉,開啟
ITEM_PIPELINES的元件
3、通過爬蟲檔案anjukespd.py 做到提取需要錄入資料庫所有資料項的資訊;
4、通過pipelines工具對資料項進行進一步的處理後通過pymysql元件匯入mysql;
5、通過mysql的匯出功能匯出anjk.xml
三、具體實現:
2.1、構建item時,一級頁面的關鍵資訊需要構建item,並且需要在頁面詳情頁的爬取過程同樣構造一個類似的item。比如一級頁面的link,那麼詳情頁就需要構造link1,這是為了在pipelines時方便在同一個迴圈中,方便資料的匯入資料庫的工作;
4.1、首先觀察一級頁面網頁的構成url=+str(i)+"/"並通過構造以i的迴圈語句可以遍歷南昌新房的所有14頁資訊;
4.2、通過
item["name"]=response.xpath("//div[2]/div[1]/div[3]/div/div/a[1]/h3/span/text()").extract(),item["link"]=response.xpath("//div[2]/div[1]/div[3]/div/div/a[1]/@href").extract()語句獲取二級頁面
4.3
、通過link,構建每個樓盤詳情的連結
pat1 =pat2 =newurl = re.compile(pat1).findall(item["link"][m])[0] +"canshu-"+ re.compile(pat2).findall(item["link"][m])[
0] +"?from=loupan_tab"
4.4
、通過以上詳情連結,並利用正則表示式爬取出樓盤詳情所有我們需要的專案資訊;
5.1、中文編碼的問題:
importurllib.request
importio
importsys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,
encoding='gb18030')#改變標準輸出的預設編碼
headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
# 將opener安裝為全域性
urllib.request.install_opener(opener)
data = urllib.request.urlopen(newurl).read().decode(
'utf-8')
5.2、異常的處理
主要是針對通過正則表示式爬取某些欄位時,由於專案太多,每個專案的列專案並不一致,有些可能本身就沒有該項,如是就會出現爬不到資料的情況,而出現錯誤,所以需要進行異常處理。
tel=
'lp-icons lp-icons-tel"></i><span.*?>(.*?)</span>'
item["tel1"] = re.compile(tel, re.S).findall(str(data))
try:
item[
"tel1"][0]
except:
item[
"tel1"]= [" ", ]
四、專案總結
該專案是在學習了《精通Python網路爬蟲+核心技術、框架與專案實戰.pdf》後的一個拓展專案,也為了更好的展示自己的學習成果;學習本身讓我對爬蟲有了框架性的認識,懂得構建基本的框架。通過專案的實踐,我對本書的知識點有了更深入清晰的認識。在編制該專案中中文編碼的問題和異常處理以及具體資料項的正則構造是花費最多時間三塊內容,感謝這個專案和這本書,讓我終於從理論步入實踐。