目的:

使用scrapy框架进行租房信息(杭州地区)爬取,包括小区名称,位置,价格,面积,房间朝向、户型等,然后把爬取的信息保存到本地csv表格中。

分析:

某家的网站爬取不难,看一下页面,需要爬取的是小区名称,位置,价格,面积,房间朝向、户型,和房源维护时间,爬取完当前页面后再爬取下一页信息,这里主要是使用resquest和xpath方法进行爬取,然后使用pandas库进行数据保存,从而把数据保存到本地。

代码部分:

items.py

# -*- coding: utf-8 -*-# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass LianjiaItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()#passtitle = scrapy.Field()     #租房标题quyu = scrapy.Field()     #所在市区,如西湖区ziquyu = scrapy.Field()    #所在子市区,如西湖区的转塘house_name = scrapy.Field()  #小区名称mianji = scrapy.Field()   #mianjichaoxiang = scrapy.Field() #房子朝向huxing = scrapy.Field()    #房子户型price = scrapy.Field()  #租房价格date = scrapy.Field()  #维护日期

spiders.py

# -*- coding: utf-8 -*-
import scrapy
from lianjia.items import LianjiaItem
import urllibclass LianjiawangSpider(scrapy.Spider):name = 'lianjiawang'allowed_domains = ['hz.XXXXXX.com']start_urls = ['https://hz.XXXXX.com/zufang/']def parse(self, response):#passdiv_list = response.xpath('//div[@class="content__article"]/div[@class="content__list"]/div[@class="content__list--item"]')for div in div_list:item = LianjiaItem()item['title'] = div.xpath('./div/p[1]/a[@class="twoline"]/text()').extract_first()    #租房标题if item['title'] is not None:item['title'] = item['title'].strip()item['quyu'] = div.xpath('./div/p[2]/a[1]/text()').extract_first()    #所在市区,如西湖区item['ziquyu'] = div.xpath('./div/p[2]/a[2]/text()').extract_first()      #所在子市区,如西湖区的转塘item['house_name'] = div.xpath('./div/p[2]/a[3]/text()').extract_first()      #小区名称item['mianji']  = div.xpath('./div/p[2]/text()[5]').extract_first().strip()   #房子面积item['chaoxiang']  = div.xpath('./div/p[2]/text()[6]').extract_first()  #房子朝向if item['chaoxiang'] is not None:item['chaoxiang'] = item['chaoxiang'].strip()item['huxing'] = div.xpath('./div/p[2]/text()[7]').extract_first()   #房子户型if item['huxing'] is not None:item['huxing'] = item['huxing'].strip()item['price'] = div.xpath('./div/span/em/text()').extract_first() + '元/月'  #租房价格url = div.xpath('./div/p[1]/a[@class="twoline"]/@href').extract_first()  #详情页链接地址if url is not None:url =  'https://hz.XXXXXX.com/' + urlyield scrapy.Request(url,callback = self.parse_detail,meta={'item': item})# 下一页请求pages = list(range(2, 6))   #获取前5页的租房信息for page in pages:next_urls = 'https://hz.XXXXXX.com/zufang/pg{}/#contentList'.format(page)#print(next_urls)if next_urls is not None:next_urls = next_urlsyield scrapy.Request(next_urls,callback=self.parse,)def parse_detail(self, response):  # 处理详情页item = response.meta['item']item['date'] = response.xpath('//div[@class="content__subtitle"]/text()[1]').extract_first()  #房源日期if item['date'] is not  None:item['date'] = item['date'].strip()yield item

pipelines.py

# -*- coding: utf-8 -*-# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# class LianjiaPipeline(object):
#     def process_item(self, item, spider):
#         return itemimport pandas as pd#下载保存数据,可用
class LianjiaPipeline(object):# def process_item(self, item, spider):#     #return item#     print("name:", item['name'])#     print("url:", item['url'])def __init__(self):  # 定义构造器,初始化要写入的文件self.mypd = pd.DataFrame(columns=['title', 'quyu','ziquyu','house_name','mianji','chaoxiang','huxing ','price','date'])def close_spider(self, spider):  # 重写close_spider回调方法self.mypd.to_csv("lianjia_data.csv")def process_item(self, item, spider):  # 添加数据到pandas中self.mypd = self.mypd.append({'title': item['title'], 'quyu': item['quyu'],'ziquyu':item['ziquyu'],'house_name':item['house_name'],'mianji':item['mianji'],'chaoxiang': item['chaoxiang'], 'huxing': item['huxing'], 'price': item['price'],'date': item['date']}, ignore_index=True)print(len(self.mypd))

settings.py

BOT_NAME = 'lianjia'SPIDER_MODULES = ['lianjia.spiders']
NEWSPIDER_MODULE = 'lianjia.spiders'LOG_LEVEL = "WARNING"
ROBOTSTXT_OBEY = True#随机使用User-Agent,一种反扒手段
USER_AGENTS_LIST = ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1","Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5","Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3","Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24","Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24"]
USER_AGENT = random.choice(USER_AGENTS_LIST)
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8','Accept-Language': 'en',# 'User-Agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",'User-Agent':USER_AGENT
}ITEM_PIPELINES = {'lianjia.pipelines.LianjiaPipeline': 300,
}

运行结果:

scrapy某家租房信息爬取相关推荐

  1. 基于scrapy下的租房信息爬取与数据展示工具的设计与实现

    环境:python 3.6.0 Anaconda custom 64bit 4.3.0 Pycharm x64 专业版 2018.1.2 Web strom x64 专业版 2018.1.3 scra ...

  2. scrapy 斗鱼 主播信息爬取

    原文链接: scrapy 斗鱼 主播信息爬取 上一篇: scrapy 妹子图网站 全站图片爬取 下一篇: TensorFlow models 的slim 模块 使用预训练模型进行识别 api http ...

  3. 爬虫实战:链家租房数据爬取,实习僧网站数据爬取

    前面已经进行了爬虫基础部分的学习,于是自己也尝试爬了一些网站数据,用的策略都是比较简单,可能有些因素没有考虑到,但是也爬取到了一定的数据,下面介绍两个爬过的案例. 爬虫实战 链家网站爬取 实习僧网站爬 ...

  4. 爬虫系列之链家的信息爬取及数据分析

    关于链家的数据爬取和分析 已经实现 1.房屋数据爬取并下载 2.房屋按区域分析 3.房屋按经纪人分析 4.前十经纪人 5.经纪人最有可能的位置分析 6.实现以地区划分房屋 目前存在的问题: 1.多线程 ...

  5. 链家武汉租房信息爬取并可视化数据分析

    爬取的信息内容:区域,标题,二级区域,小区名字,大小,朝向,户型,租金 项目下载 链接:https://pan.baidu.com/s/15LcBtBARBlqs5xuJW4TgWQ 提取码:njp8 ...

  6. 链家网页爬虫_爬虫实战1-----链家二手房信息爬取

    经过一段机器学习之后,发现实在是太枯燥了,为了增添一些趣味性以及熟练爬虫,在之后会不定时的爬取一些网站 旨在熟悉网页结构--尤其是HTML的元素,ajax存储,json:熟练使用pyspider,sc ...

  7. PyQt5+Python+Excel链家二手房信息爬取、可视化以及数据存取

    成果图: 第一步运行代码searsh.py,效果如下 第二步选择你所需要爬取数据的城市,如湖北-武汉 然后搜索,结果如下 如果你想爬取更多信息,只需要点击下一页即可 第三步,保存数据.可以将所显示的所 ...

  8. python爬虫分析——广州租房信息爬取并分析

    一.在某网站上爬取相关数据 爬取到的数据情况如下: 二.数据的读取和预处理(爬取下来的数据没有缺失值和异常值) import pandas as pd import numpy as np impor ...

  9. Python——安居客租房信息爬取(以南昌为例)

    前言: 提前安装好所需要的库. 本代码的输入仅需要某个城市的租房地址首页即可,其他自会生成. 使用前请创建所需的目录,或者为代码添加os.makedir() 支持断点重爬,重行运行即可. header ...

最新文章

  1. torch_geometric 笔记:nn.ChebNet
  2. vue-router进阶:路由使用归纳、路由导航守卫、导航守卫解析流程、
  3. log4j控制日志输出文件名称的两种方式
  4. 团队开发——第一次冲刺第7天
  5. 贺利坚老师汇编课程27笔记(一):段前缀的使用
  6. html生成pdf字体错误,使用wkhtmltopdf时显示为PDF的错误字体
  7. 冒泡排序Java代码实现
  8. sever企业版密钥 sql_SQL Server2016企业版 附全版本key(转载)
  9. 公历转农历C语言课程设计,(只为学习)公历转农历代码以完成,请高手在此代码基础上写出个农历转公历的代码出来...
  10. 201912月全国计算机二级考试,201912月天津计算机二级报名时间:12月5日-12月7日!附报名入口...
  11. high sierra php,mac os high sierra下搭建php多版本-php5.2+php5.6-nginx
  12. 80后冲入“剩女”阵营
  13. 说的话可以转换为文字的笔记APP
  14. Bert 论文中文翻译
  15. access 分组序号_如何对Access 2007报表进行分组
  16. 制作android动态壁纸,如何使用LibGDx制作Android动态壁纸?
  17. BT服务器架设全攻略
  18. linux命令行was集群启停,通用服务启停shell脚本
  19. havc是什么意思_hvac是什么意思
  20. 服务器集群虚拟化内存漂移,浅谈医院高稳定性虚拟化集群的部署

热门文章

  1. 35.在layer上画文字 画图片
  2. 对零基础java学习者的建议
  3. streamlit基本使用
  4. 天龙八部 找怪物ID
  5. iptables、firewalld防火墙详解
  6. 新版OpenWrt VLAN设置方法
  7. VScode检测到#include 错误,请更新includepath。已为此翻译单元 禁用波形曲线//gcc : 无法将“gcc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
  8. php微信扫码支付pc端,PC端(电脑端)微信扫码支付和支付宝在线支付(ThinkPHP3)...
  9. ESP32-C3使用LEDC外设实现呼吸灯效果
  10. 001软件测试基本介绍