日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Scrapy的链家二手房爬虫

發布時間:2023/12/8 编程问答 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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進行一一提取即可。

# -*- coding: utf-8 -*- import scrapyclass LianjiacrawlSpider(scrapy.Spider):name = 'lianjiacrawl'#這個爬蟲的識別名稱,必須是唯一的allowed_domains = ['lianjia.com']#是搜索的域名范圍,也就是爬蟲的約束區域,規定爬蟲只爬取這個域名下的網頁,不存在的URL會被忽略start_urls = ['https://sz.lianjia.com/ershoufang/pg{}/'.format(i) for i in range(1,100)]#要爬取的網址頁面def parse(self, response):#解析的方法,每個初始URL完成下載后將被調用urls = response.xpath('//div[@class="info clear"]/div[@class="title"]/a/@href').extract()#獲取每個二手房的詳情鏈接網址,并保存在列表中for url in urls:yield scrapy.Request(url,callback=self.parse_info)#返回一個包含服務器資源的Response對象,由于用了yield,每次運行完函數才會接著產生下一個def parse_info(self,response):#extract_first():這個方法返回的是一個string字符串,是list數組里面的第一個字符串total_price = response.xpath('concat(//span[@class="total"]/text(),//span[@class="unit"]/span/text())').extract_first()#返回總價格unit_price = response.xpath('string(//span[@class="unitPriceValue"])').extract_first()#返回單價residential_district = response.xpath('//a[contains(@class,"info")]/text()').extract_first()#contains包含函數#返回小區district = response.xpath('string(//div[@class="areaName"]/span[@class="info"])').extract_first()#返回所在區域base1 = response.xpath('//div[@class="base"]//ul')#返回基本信息的整個集合apartment = base1.xpath('./li[1]/text()').extract_first()#返回戶型floor = base1.xpath('./li[2]/text()').extract_first()#返回樓層area = base1.xpath('./li[3]/text()').extract_first()#返回建筑面積architecture =base1.xpath('./li[4]/text()').extract_first()#返回戶型結構orientation = base1.xpath('./li[7]/text()').extract_first()#返回朝向renovation = base1.xpath('./li[9]/text()').extract_first()#返回裝修情況tihu_ration = base1.xpath('./li[10]/text()').extract_first()#返回梯戶比例property_right_year = base1.xpath('./li[last()]/text()').extract_first()#配備電梯base2 = response.xpath('//div[@class="transaction"]//ul')#返回交易屬性的整個集合purpose = base2.xpath('./li[4]/span[2]/text()').extract_first()#返回用途property_right = base2.xpath('./li[6]/span[2]/text()').extract_first()#返回產權所屬yield {'總價': total_price,'單價': unit_price,'小區': residential_district,'區域': district,'戶型': apartment,'樓層': floor,'面積': area,'戶型結構': architecture,'朝向': orientation,'裝修情況': renovation,'梯戶比例': tihu_ration,'產權年限': property_right_year,'用途': purpose,'產權所屬': property_right,



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的链家二手房爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。