可運行的最新的使用scrapy框架爬取鏈家租房數據

看了一圈網上很多爬取鏈家數據的爬蟲,但是由於鏈家已經把網頁結構換掉了,所以原來的網上代碼已經不能夠使用,剛寫了一個最新的爬蟲,可以獲取租房信息。

工具:

python3.6

scrapy 1.6.0 框架

vscode 編輯器

 

基礎知識關於如何使用scrapy框架什麼的就不說了,網上一搜一大堆。

說明:因爲鏈家上面的數據排列並不是一樣的,有的數據是缺失的,這就給數據獲取造成很大麻煩。所以導致有的數據是不正確的,大部分都是沒問題的。

下面是主要的spider代碼

# -*- coding: utf-8 -*-
from scrapy import Spider, Request
from scrapy.selector import Selector
import requests
import re
from lxml import etree
import json
import time
from  szhouse.items import  SzhouseItem


class licaiSpider(Spider):
    
    name = 'lianjiahouse'  #https://su.lianjia.com/zufang/pg3/#contentList
    start_urls=['https://su.lianjia.com/zufang/']

    custom_settings = {'ITEM_PIPELINES': {
       'szhouse.pipelines.SzhousePipeline': 300,
    }, 'DOWNLOAD_DELAY': 0.1,'DOWNLOAD_TIMEOUT':20}
    def parse(self,response):
        #detail_html=str(response.body)
        item = SzhouseItem()
        trs = response.xpath('//div[@class="content w1150"]/div[@class="content__article"]/div[@class="content__list"]/div[@class="content__list--item"]')

        for index,tr in enumerate(trs):
            item['house_name'] = tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--title twoline"]/a/text()').extract_first().replace(' ','').replace('\n', '')
            tt_link = tr.xpath('./a/@href').extract_first()
            item['link'] ='https://su.lianjia.com'+tt_link

            tt=tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/text()[4]').extract_first()
            tt_fx=tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/text()[6]').extract_first()
            tt_ad= tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/a[1]/text()').extract_first()
            #jinsheng
            tt_js_fx=tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/text()[5]').extract_first()
            tt_js_mj=tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/text()[3]').extract_first()
            if(tt_ad is None):
                item['address'] =tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--des"]/span/text()').extract_first()
                item['fangxing'] = str(tt_js_fx).replace(' ','').replace('\n','')
                item['mianji'] = str(tt_js_mj).replace(' ','').replace('\n','')
            else:
                item['address'] =tt_ad
                item['fangxing']=tt_fx.replace(' ','').replace('\n','')
                item['mianji']=tt.replace(' ','').replace('\n', '')

            
            item['fabuDate'] = tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--time oneline"]/text()').extract_first()
            # item['detail'] = tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--bottom oneline"]/i/text()').extract_first()
            d_list=tr.xpath('./div[@class="content__list--item--main"]/p[@class="content__list--item--bottom oneline"]/i')
            detail_list=''
            for ii in d_list:
                detail_list += ii.xpath('./text()').extract_first()
                detail_list=detail_list+','
             #   detail_list=''.join(ii.xpath('./text()').extract_first())
            item['detail']=detail_list
            item['money'] = tr.xpath('./div[@class="content__list--item--main"]/span/em/text()').extract_first()
            
            yield item
            
        
        for i in range(1,101):
            url='https://su.lianjia.com/zufang/pg{}/'.format(str(i))
            yield Request(url,callback=self.parse)




我把爬下來的數據保存在csv文件了,一共100也代碼 大約8000多數據吧,如下所示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章