Scrapy框架爬取我爱我家二手房信息存储CSV、mysql(IP代理和User-Agent用户代理)

有一段时间没出来活动了闲来无事弄个玩玩O(∩_∩)O哈哈~
想必学过Scrapy框架的人都知道如何创建Scrapy和运行,那么我这里呢现将我创的框架展示一下

scrapy startproject pachong2(创一个pachong2的文件)
cd pachong2	#进入创的文件
scrapy genspider aijia wx.5i5j.com	#生成名叫aijia的爬虫

然后就生成了这些
在这里插入图片描述
打开我爱我家的首页进入到二手房页面https://wx.5i5j.com/ershoufang下面就开始编程爬虫程序了
找到创建的aijia项目已经自动生成了一些网址

import scrapy

class AijiaSpider(scrapy.Spider):
    name = 'aijia'
    allowed_domains = ['www.5i5j.com']
    start_urls = ['http://www.5i5j.com/']

    def parse(self, response):
        pass

因为爬的是二手房所以start_urls后面的网址就需要变动,然后再看网页的翻页格式n2、n3等等。所以只需要改n后面的数字实现翻页再列一个循环后的网址形式如下
在这里插入图片描述

start_urls = ['https://wx.5i5j.com/ershoufang/n' + str(x) for x in range(1,6)]

我们需要在items里面定义爬取的名称数据所以在items的定义为:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy


class Pachong2Item(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()  #户型标题
    danjia = scrapy.Field() #单价
    zongjia = scrapy.Field()    #总价
    house = scrapy.Field()  #户型
    floor = scrapy.Field()  # 楼层
    area = scrapy.Field()   #面积
    renovation = scrapy.Field() #装修
    chaoxiang = scrapy.Field()  #朝向
    xiaoqu = scrapy.Field() #所属小区
    jingjiren = scrapy.Field()  #经纪人
    date = scrapy.Field()   #发布时间

下面就开始编写我们的爬虫吧F12找到全部的list右键Copy Xpath
在这里插入图片描述
定义一个总的list列表titles将Copy的内容放入做一个循环使得可以得到该页面下的所有list

titles = response.xpath('/html/body/div[6]/div[1]/div[2]/ul/li')
        for bt in titles:
            item = Pachong2Item()

在这里插入图片描述
之后可以将该页面的重要信息爬取出来也可以点击进入到详细页面
在这里插入图片描述
所以这里就需要提取出详细页面中的URL
在这里插入图片描述
利用scrpy.Request请求url后生成一个Request对象,通过meta参数,把item这个字典赋值给meta字典的’item’键, 即meta={‘item’:item},这个meta参数会被放在Request对象里一起发送给detail()函数即

    def parse(self, response):
        titles = response.xpath('/html/body/div[6]/div[1]/div[2]/ul/li')
        for bt in titles:
            item = Pachong2Item()

            url = 'https://wx.5i5j.com' + bt.xpath('div[2]/h3/a/@href').extract()[0]    #详细页面URL
            yield scrapy.Request(url,meta = {
   'item':item},callback = self.detail)

进入到详细页面后只需要将需要的东西一个一个拉出来就好

    def detail(self,response):
        item = response.meta['item']#这个response已含有上述meta字典,此句将这个字典赋值给item,完成信息传递。这个item已经和parse中的item一样了
        item['house'] = response.xpath('//*[@class="house-infor clear"]/div[1]/p[1]/text()').extract_first()     #户型
        item['floor'] = response.xpath('//*[@class="house-infor clear"]/div[1]/p[2]/text()').extract_first()    # 楼层
        item['area'] = response.xpath('//*[@class="house-infor clear"]/div[2]/p[1]/text()').extract_first()     #面积
        item['area'] = item['area'] + response.xpath('//*[@class="house-infor clear"]/div[2]/p[1]/span/text()').extract_first()
        item['renovation']= response.xpath('//*[@class="house-infor clear"]/div[2]/p[2]/text()').extract_first()#装修
        item['chaoxiang'] = response.xpath('//*[@class="house-infor clear"]/div[3]/p/text()').extract_first()   #朝向
        item['xiaoqu'] = response.xpath('//*[@class = "zushous"]/ul/li[1]/a/text()').extract_first()    #所属小区
        item['jingjiren'] = response.xpath('/html/body/div[5]/div[2]/div[2]/div[3]/ul/li[2]/h3/a/text()').extract_first()   #经纪人
        item['date'] = response.xpath('/html/body/div[5]/div[3]/div[3]/div[1]/div/div/ul/li[3]/span/text()').extract_first()    #发布时间


        yield item

当然我们不能这样盲目的爬取还要有一些应对反爬的措施这时我们就需要给它添加IP代理和User-Agent用户代理,分别在settingsmiddlewares中设置
那么设置IP代理需要修改的文件如下:
在settings中手动添加IP池代理IP可在https://www.xicidaili.com/中挑选

IPPOOL=[
  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值