Python-爬虫-爬取二手房数据-scrapy+IP代理池

前言:

今天给大家分享的是二手房的信息采集和在scrapy中创建IP代理池,如果小编的文章能给小友带来帮助的话,希望您能给小编点个赞喔!您的赞是小编继续下去的动力(*^▽^*)

目标网址:

aHR0cHM6Ly9mcy5saWFuamlhLmNvbS9lcnNob3VmYW5nLw==

一、分析网址:

可以点击鼠标右键,点击检查,可以发现需要的数据都在源码页面中

我们需要爬取的是每个房子的基本信息,因此需要进入到每个二手房对应的子页面去获取对应的信息

而每个二手房的子网页都在主网页的a便签里,所以可以用xpath来获取a便签中的网页地址

def start_requests(self):
        for page in range(1, 11):
            yield Request(url=f"https://fs.lianjia.com/ershoufang/pg{page}/")

def parse(self, response, **kwargs):
        url_list = response.xpath("//ul[@class='sellListContent']/li")
        for date_url in url_list:
            url = date_url.xpath("./div[@class='info clear']/div/a/@href").extract_first()
            yield Request(url=url, callback=self.parse_info)

获取到子网页后,就是请求子网页获取二手房的基本信息,我们需要获取的二手房信息有:价格、楼盘名称、地点、房屋户型、建筑面积、所在楼层、梯户比例。

可以通过用xpath来提取我们需要的信息,代码如下:

def parse_info(self, response, **kwargs):
        item = LjiaspiderItem()
        item['title'] = response.xpath("//div[@class='title']/div[@class='sub']/text()").extract_first()
        item['name'] = response.css('body > div.overview > div.content > div.aroundInfo > div.communityName > a.info::text').extract_first()
        price1 = response.css("body > div.overview > div.content > div.price-container > div > span.total::text").extract_first()
        price2 = response.css("body > div.overview > div.content > div.price-container > div > span.unit > span::text").extract_first()
        item['price'] = price1 + price2
        pl1 = response.xpath("//div[@class='aroundInfo']/div[@class='areaName']/span[@class='info']/a[1]/text()").extract_first()
        pl2 = response.xpath("//div[@class='aroundInfo']/div[@class='areaName']/span[@class='info']/a[2]/text()").extract_first()
        item['place'] = pl1 + ' ' + pl2
        item['label'] = response.xpath("//div[@class='base']/div[@class='content']/ul/li[1]/text()").extract_first()
        item['floor'] = response.xpath("//div[@class='base']/div[@class='content']/ul/li[2]/text()").extract_first()
        item['area'] = response.xpath("//div[@class='base']/div[@class='content']/ul/li[3]/text()").extract_first()
        item['lift'] = response.xpath("//div[@class='base']/div[@class='content']/ul/li[10]/text()").extract_first()
        yield item

二、配置scrapy

当我们写完爬取二手房基本信息的代码后,就需要对scrapy框架进行一些配置了,首先对scrapy的items进行配置,把抓取到的信息补充到items中

在scrapy的spider中,当我们获取到一个网页时,可以通过xpath和CSS选择器等方式获取网页中的具体信息,并将其填充到items对象的对应字段中。这样,当我们运行爬虫时,scrapy就会自动将获取到的信息填充到items对象中,并输出到指定的数据存储介质(如MySQL、MongoDB等)中。 使用scrapy的item功能可以让我们更加方便地处理和管理网页数据,同时也使得代码更为简洁清晰。

三、配置管道

我们需要把获取到的数据保存到Excel文件中,首先需要创建一个工作簿,并把一些基础信息填入Excel表中。

当spider通过yield语句产生一个item时,scrapy会按照setting.py中设置的PIPELINES顺序依次调用每个Pipeline的process_item方法来处理该item。因此可以从item中获取响应的信息写入到Excel表中。

四、生成IP代理池

当做完上面的步骤其实已经可以进行爬取了,不过却只能设置一个大延迟进行爬取,因为如果高频爬取网站的话会被封ip。因此,我们需要一个ip代理池来解决封ip的问题。

这里小编推荐一个自我感觉好用的ip代理网站,该网站每个星期都能免费领取几百个ip进行使用

aHR0cHM6Ly93d3cuaXB6YW4uY29tP3BpZD1wM3RuMW5ydWc=

获得AIP接口后,需要用request请求这个接口来获取ip地址,并把ip进行拼接生成一个可以的ip地址添加到列表中成为一个ip代理池

然后就是在scrapy中间件中添加一个类ProxyMiddleware,来进行ip的处理,将刚刚写好的方法导入到中间件中,然后在类中写一个处理请求的方法 process_request来给请求加上随机ip代理

完成后还需要在settings.py中添加ProxyMidleware的类到下载中间件中,因为下载中间件可以拦截所有的请求并进行处理,而爬虫中间件只能拦截响应。由于ip代理主要是用来修改请求的目标网站,所以将其放在下载中间件中更加合适。此外,下载中间件提供了更多的灵活性和控制权,可以根据需要对不同的请求使用不同的ip代理,从而提高爬取效率和稳定性。

五、总结

按照上面的步骤,设置好scrapy就能顺利的获取到需要的数据了

获取到的数据也会保存到Excel表中

通过这次用scrapy获取二手房信息,使我深深感受到了scrapy的方便与快捷,它能帮我们省下一些功夫,不用把所有的注意力都花在写爬虫上,它还提供了许多可扩展的接口和插件,如中间件、管道等,方便用户根据需求进行自定义开发;scrapy采用异步IO的方法进行网络请求和数据处理,运行速度快且效率高。

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值