天天看点

可运行的最新的使用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多数据吧,如下所示:

可运行的最新的使用scrapy框架爬取链家租房数据

继续阅读