Skip to content
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
Copyright 網絡設計教學 2025
Theme by ThemeinProgress
Proudly powered by WordPress
  • Home
  • Python教學
  • 科技新聞資訊
  • 網站開發教學
網絡設計教學網絡設計教學,網站網頁教學,軟體使用教學
  • You are here :
  • Home
  • python網頁教學
  • Python scrapy爬取蘇州二手房交易數據 python 程式碼
python網頁教學

Python scrapy爬取蘇州二手房交易數據 python 程式碼

Jiking 2022-09-17 Article

一、項目需求

使用Scrapy爬取鏈傢網中蘇州市二手房交易數據並保存於CSV档案中
要求:
房屋面積、總價和單價隻需要具體的數字,不需要單位名稱。
刪除字段不全的房屋數據,如有的房屋朝向會顯示“暫無數據”,應該剔除。
保存到CSV档案中的數據,字段要按照如下順序排列:房屋名稱,房屋戶型,建築面積,房屋朝向,裝修情況,有無電梯,房屋總價,房屋單價,房屋產權。

二、項目分析

流程圖

在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

通過控制臺發現所有房屋信息都在一個ul中其中每一個li裡存儲一個房屋的信息。

在這裡插入圖片描述

找瞭到需要的字段,這裡以房屋名稱為例,博主用linux截圖,沒法對圖片進行標註,這一段就是最中間的“景山玫瑰園” 。
其他字段類似不再一一列舉。
獲取瞭需要的數據後發現沒有電梯的配備情況,所以需要到詳細頁也就是點擊標題後進入的頁面,
點擊標題

在這裡插入圖片描述

可以看到裡面有下需要的信息。

在這裡插入圖片描述

抓取詳細頁url

在這裡插入圖片描述

進行詳細頁數據分析

在這裡插入圖片描述

找到相應的位置,進行抓取數據。

三、編寫程式

創建項目,不說瞭。

1.編寫item(數據存儲)

import scrapy
class LianjiaHomeItem(scrapy.Item):
     name = scrapy.Field() # 名稱
     type = scrapy.Field()  # 戶型
     area = scrapy.Field()  # 面積
     direction = scrapy.Field()  #朝向
     fitment = scrapy.Field()  # 裝修情況
     elevator = scrapy.Field()  # 有無電梯
     total_price = scrapy.Field()  # 總價
     unit_price = scrapy.Field()  # 單價

2.編寫spider(數據抓取)

from scrapy import Request
from scrapy.spiders import Spider
from lianjia_home.items import LianjiaHomeItem

class HomeSpider(Spider):
    name = "home"
    current_page=1 #起始頁

    def start_requests(self): #初始請求
        url="https://su.lianjia.com/ershoufang/"
        yield Request(url=url)

    def parse(self, response): #解析函數
        list_selctor=response.xpath("//li/div[@class='info clear']")
        for one_selector in list_selctor:
            try:
                #房屋名稱
                name=one_selector.xpath("//div[@class='flood']/div[@class='positionInfo']/a/text()").extract_first()
                #其他信息
                other=one_selector.xpath("//div[@class='address']/div[@class='houseInfo']/text()").extract_first()
                other_list=other.split("|")
                type=other_list[0].strip(" ")#戶型
                area = other_list[1].strip(" ") #面積
                direction=other_list[2].strip(" ") #朝向
                fitment=other_list[3].strip(" ") #裝修
                price_list=one_selector.xpath("div[@class='priceInfo']//span/text()")
                # 總價
                total_price=price_list[0].extract()
                # 單價
                unit_price=price_list[1].extract()

                item=LianjiaHomeItem()
                item["name"]=name.strip(" ")
                item["type"]=type
                item["area"] = area
                item["direction"] = direction
                item["fitment"] = fitment
                item["total_price"] = total_price
                item["unit_price"] = unit_price

            #生成詳細頁
                url = one_selector.xpath("div[@class='title']/a/@href").extract_first()
                yield Request(url=url,
                              meta={"item":item}, #把item作為數據v傳遞
                              callback=self.property_parse) #爬取詳細頁
            except:
                print("error")

        #獲取下一頁
            self.current_page+=1
            if self.current_page<=100:
                next_url="https://su.lianjia.com/ershoufang/pg%d"%self.current_page
                yield Request(url=next_url)


    def property_parse(self,response):#詳細頁
        #配備電梯
        elevator=response.xpath("//div[@class='base']/div[@class='content']/ul/li[last()]/text()").extract_first()
        item=response.meta["item"]
        item["elevator"]=elevator
        yield item

3.編寫pipelines(數據處理)

import re
from scrapy.exceptions import DropItem
class LianjiaHomePipeline:#數據的清洗
    def process_item(self, item, spider):
        #面積
        item["area"]=re.findall("\d+\.?\d*",item["area"])[0] #提取數字並存儲
        #單價
        item["unit_price"] = re.findall("\d+\.?\d*", item["unit_price"])[0] #提取數字並存儲

        #如果有不完全的數據,則拋棄
        if item["direction"] =="暫無數據":
            raise DropItem("無數據,拋棄:%s"%item)

        return item

class CSVPipeline(object):
    file=None
    index=0 #csv档案行數判斷
    def open_spider(self,spider): #爬蟲開始前,打開csv档案
        self.file=open("home.csv","a",encoding="utf=8")

    def process_item(self, item, spider):#按要求存儲档案。
        if self.index ==0:
            column_name="name,type,area,direction,fitment,elevator,total_price,unit_price\n"
            self.file.write(column_name)#插入第一行的索引信息
            self.index=1

        home_str=item["name"]+","+item["type"]+","+item["area"]+","+item["direction"]+","+item["fitment"]+","+item["elevator"]+","+item["total_price"]+","+item["unit_price"]+"\n"
        self.file.write(home_str) #插入獲取的信息

        return item

    def close_soider(self,spider):#爬蟲結束後關閉csv
        self.file.close()

4.編寫settings(爬蟲設置)

這裡隻寫下需要修改的地方

USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64) 蘋果WebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36'
#為裝成瀏覽器
ROBOTSTXT_OBEY = False #不遵循robots協議
ITEM_PIPELINES = {
    'lianjia_home.pipelines.LianjiaHomePipeline': 300,
    #先進行數字提取
    'lianjia_home.pipelines.CSVPipeline': 400
    #在進行數據的儲存
    #執行順序由後邊的數字決定
}

這些內容在settings有些是默認關閉的,把用來註釋的 # 去掉即可開啟。

5.編寫start(代替命令行)

from scrapy import cmdline

cmdline.execute("scrapy crawl home" .split())

附上兩張結果圖。

在這裡插入圖片描述

在這裡插入圖片描述

總結

此次項目新增瞭簡單的數據清洗,在整體的數據抓取上沒有增加新的難度。

到此這篇關於Python scrapy爬取蘇州二手房交易數據的文章就介紹到這瞭,更多相關scrapy爬取二手房交易數據內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支援!

You may also like

Shopify 直營店 | Tapswap 程式碼 |如何快速輕鬆地建立 Shopify 直銷商店

Shopify 直銷業務藍圖 | Tapswap 程式碼 | Shopify Dropshipping 藍圖:完整教學

這是 eBay 和 Shopify 上的「商店」Prismatic Evolutions 預購詐騙嗎?特雷科TCG

Shopify 上的直銷業務 | Tapswap 程式碼 |立即開始在 Shopify 上進行代發貨:完整設定教學

Shopify 上的直銷業務 | Tapswap 程式碼 |立即開始在 Shopify 上進行代發貨:完整設定教學

Shopify 直營店 | Tapswap 程式碼 |如何快速輕鬆地建立 Shopify 直銷商店

相关贴文:

  1. 關於Python的pymouse click 雙擊的問題 python 程式碼
  2. Python 內置函數速查表一覽 python 程式碼
  3. Matlab如何實現矩陣復制擴充 python 程式碼
  4. 如何判斷pytorch是否支持GPU加速 python 程式碼
  5. Python多進程的使用詳情 python 程式碼
  6. 基於python pygame實現的兔子吃月餅小遊戲 python 程式碼
  7. 基於python編寫的shell腳本詳細講解 python 程式碼
  8. Python 二叉樹的概念案例詳解 python 程式碼
Tags: python, 二手房交易, 程式碼, 蘇州

近期文章

  • 如何使用Elementor設計漂亮的WooCommerce商店頁面(無代碼!)
  • 如何使用WordPress WooCommerce創建著陸頁類型電子商務網站
  • 遷移Shopify到WooCommerce
  • 如何使用Dreamhost(2025)🔥 -Dream -Host WooCommerce教程構建電子商務網站!
  • wooCommerce🇺🇸US全球ESIM應用程序針對190多個國家 /地區的旅行者,Esim Telecom(構建您的應用程序#75)
  • 管理WooCommerce中的價格
  • Conectando n8n no wooCommerce(intermaçãoPassoa passo)
  • de cero a tienda enlínea:configuracióninicial de wooCommerce
  • 修復WooCommerce訂單錯誤:“處理您的訂單有錯誤”

標籤雲

Dropshipping ecommerce JavaScript Joomla OSCHINA博客 python REBELLION Shopify Shopify 商店設置 Shopify 直銷 Woocommerce WordPress 代發貨 刀塔2 和 商店 商業 喬姆拉 在 如何創建 Shopify 商店 如何在 如何建立 Shopify 商店 如何開始代出貨 年 店舖教學 店鋪化 店鋪培訓 教學 獲獎產品 直銷 Shopify 直銷教程 科技資訊 程式碼 網路業務 網路賺錢 臉書廣告 與 行銷 詳解 購物 跨平台 運輸船 適合初學者的 Shopify 教學課程 適合初學者的直銷 電子商務

Copyright 網絡設計教學 2025