基于Scrapy的链家二手房爬虫
摘要
本項目是python課程的期末練手項目,在簡要學習完python和爬蟲相關的Scrapy框架后,基于這兩者的運用最終完成了對于鏈家網站二手房頁面的信息進行爬取,并將爬取的數據存放于MongoDB之中,使用Studio 3T進行查看。
1引言
1.1背景
在本學期的python課程中,通過網課粗略的掌握了python的基礎知識之后,老師提出通過運用python的模塊進行附加的學習,于是我選擇了Scrapy框架的學習,由此為基礎對于鏈家網站的信息進行了爬取數據的操作,并將爬取的數據保存。
1.2意義
這個項目提高了我的python編程水平,使得我對于爬蟲技術的了解更加深入,粗略掌握了如何使用Scrapy框架進行爬蟲操作,懂得了python的附加模塊的強大之處,也激發了繼續學習編程的興趣。
1.3相關研究
Scrapy 是用 Python 實現的一個為了爬取網站數據、提取結構性數據而編寫的應用框架。Scrapy 常應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。通常我們可以很簡單的通過 Scrapy 框架實現一個爬蟲,抓取指定網站的內容或圖片。之前在基礎學習的時候使用的是Python的request模塊也能對網站頁面的數據進行爬取,但是request屬于頁面級爬蟲,重點在于頁面下載,并發考慮不足,性能較差。
2.系統結構
該項目是基于Scrapy框架來進行的,因此整體的框架如圖1所示。由于Scrapy本身封裝了大量的內容操作使得代碼編寫者可以簡化自己的代碼量。由于大量的封裝,在本次項目中只需要修改SPIDERS模塊和ITEM PIPELINES模塊。
SPIDERS模塊是該項目的python模塊。在此放入代碼。它解析Downloader返回的響應(Response)產生爬取項(scraped item)。產生額外的爬取請求(Request)
ITEM PIPELINES模塊,以流水線的方式處理Spider產生的爬取項。由一組操作順序組成,類似流水線,每個操作都是一個item Pipeline類型。它的操作包括:清理、檢驗、和查重爬取的HTML數據、將數據存儲到數據庫。
3實現代碼
3.1建立工程和Spider模板
scrapy startproject lianjia
建立名為lianjia的工程
scrapy genspider lianjiacrawl lianjia.com
創建一個名為lianjiacrawl的爬蟲,搜索的域名范圍是lianjia.com
3.2編寫Spider
這一部分主要是配置lianjiacrawl.py文件,修改對返回頁面的處理,修改對新增URL爬取請求的處理。首先通過對https://sz.lianjia.com/ershoufang/pg{}網頁進行信息提取,獲取每個二手房的詳情鏈接網址,再通過yield關鍵字不斷提取詳情鏈接網址中的信息。這里信息的提取這里使用的是xpath。
通過游覽器查看網頁源代碼可以詳細去查看view-source:https://sz.lianjia.com/ershoufang/pg1/的代碼,然后可以發現div class=“info clear”><div class="title"標簽后面緊跟的標簽中的屬性值就是每個二手房的詳情鏈接網址
在通過游覽器查看網頁源代碼可以詳細去查看每個二手房的詳情的源代碼可知,二手房的詳細信息在如下圖所示的標簽之中,使用xpath進行一一提取即可。
3.2編寫Pipelines
這一部分主要是配置pipelines.py文件,主要定義對LianjiaPipeline處理類以及通過setting.py文件配置ITEM_PIPLINES選項。這里主要是將爬取的數據放入MongoDB的數據庫之中,首先連接本地的服務器,然后再創建數據庫和集合,最后再將爬取的數據進行插入。
from pymongo import MongoClient# 將爬取的內容保存到mongoDB中 class LianjiaPipeline(object):def __init__(self):# 使用 MongoClient 對象,并且指定連接的 URL 地址self.client = MongoClient(host='localhost', port=27017)# 如果設置有權限, 則需要先登錄# db_auth = self.client.admin# db_auth.authenticate('root', 'root')# 需要保存到的collectionself.col = self.client['lianjia']#創建的數據庫名self.ershou = self.col.ershou#創建的集合名# 先清除之前保存的數據# self.ershoufang.delete_many({})def process_item(self, item, spider):self.ershou.insert_one(item)#集合中插入使用 insert_one() 方法return itemdef open_spider(self, spider):passdef close_spider(self, spider):self.client.close()#關閉
這里是setting.py要修改的部分,讓框架能夠找到我們在piplines中新建的類
ITEM_PIPELINES = {
‘lianjia.pipelines.LianjiaPipeline’: 300,
}
4.實驗
4.1首先命令行下運行命令行下運行 MongoDB 服務器
為了從命令提示符下運行 MongoDB 服務器,你必須從 MongoDB 目錄的 bin 目錄中執行 mongod.exe 文件
mongod –dbpath \data\db
4.2然后使用Stdio 3T連接MongoDB服務器
4.3運行爬蟲代碼
scrapy crawl lianjiacrawl1
4.4查看數據庫
在Studio 3T中查看數據庫結果
5. 總結和展望
在這次Python語言程序設計課程的個人項目當中我對于爬蟲有了更加深入的了解,主要是對于如何應用Scrapy框架從無到有到完成一個項目的有了整體的認識,有助于對于以后去嘗試別的爬蟲,在完成這個項目的過程中我也加強了自己的編程能力,對于Python這門語言有了更深刻的認識。這一個項目的完成也有一些不足的地方,對于已經爬取的數據沒有進行圖形化展示或者進行深入的數據分析,還是流于爬取這一過程,我希望在以后的學習過程中能對此進行完善。
總結
以上是生活随笔為你收集整理的基于Scrapy的链家二手房爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 珠峰之行回顾
- 下一篇: Google在线翻译工具:Transla