Skip to content

基于scrapy,scrapy-redis实现的一个分布式网络爬虫,爬取了新浪房产的楼盘信息及户型图片,实现了常用的爬虫功能需求.

Notifications You must be signed in to change notification settings

backto17/SinaHouseCrawler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

简介

  1. SinaHouseCrawler/house 基于scrapy, scrapy-redis实现的一个分布式网络爬虫,爬取了 新浪房产 1乐居房产 的楼盘信息及户型图片,实现了数据提取,去重,保存,分页数据的采集,数据的增量爬取,代理的使用,失效代理的清除,useragent的切换,图片的下载等功能,并且common模块中的中间件等可以在其他爬虫中复用.
  2. SinaHouseCrawler/proxy 爬取了西刺快代理两个网站上的高匿名代理,通过代理访问网易作为检验,保留访问成功的代理数据.

数据展示

房产数据 房产数据

户型数据 户型数据

CustomImagesPipeline下载的图片 图片

ThreadImagesPipeline下载的图片 图片

** xici和kuaidaili的代理ip数据** 图片

功能清单:

  1. 'sinahouse.pipelines.MongoPipeline'实现数据持久化到mongodb,'sinahouse.pipelines.MySQLPipeline'实现数据异步写入mysql

  2. 'common.middlewares.UserAgentMiddleware','common.middlewares.ProxyMiddleware' 分别实现用户代理UserAgent变换和IP代理变换

  3. 'sinahouse.pipelines.ThreadImagesPipeline','sinahouse.pipelines.CustomImagesPipeline'分别是基于多线程将图片下载保存到images文件夹和继承scrapy自带 ImagePipline的实现的图片下载保存到images_store

  4. 'scrapy.extensions.statsmailer.StatsMailer'是通过设置settings中的mai等相关参数实现发送爬虫运行状态信息到指定邮件.scrapy.mail中的 MailSender也可以实现发送自定义内容邮件

  5. 通过设置setting中的scrapy-redis的相关参数,实现爬虫的分布式运行,或者单机多进程运行.无redis环境时,可以注释掉相关参数,转化为普通的scrapy爬虫程序

  6. 运行日志保存


运行环境:

  1. 只在Python 2.7测试过,请先安装 requirements.txt 中的模块.
  2. MySQLPipeline 用到的表:
CREATE TABLE `house` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `price` varchar(50) DEFAULT NULL,
  `open_date` varchar(50) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  `lon_lat` varchar(50) DEFAULT NULL,
  `developer` varchar(50) DEFAULT NULL,
  `property_company` varchar(50) DEFAULT NULL,
  `property_manage_fee` varchar(50) DEFAULT NULL,
  `decoration` varchar(50) DEFAULT NULL,
  `cover_path` varchar(128) DEFAULT NULL,
  `source_id` int(11) DEFAULT NULL,
  `url` varchar(128) DEFAULT NULL,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
)

CREATE TABLE `house_layout` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `house_id` int(11) NOT NULL,
  `name` varchar(50) DEFAULT NULL,
  `area` varchar(20) DEFAULT NULL,
  `img_path` varchar(128) DEFAULT NULL,
  `price` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `house_id_refs_id` (`house_id`)
)

其他说明

LOG_FORMATTER = 'sinahouse.utils.PoliteLogFormatter', 实现raise DropItem()时避免scrapy弹出大量提示信息; 图片保存路径,数据库连接等参数,请根据自己环境设置; 更多相关信息请查阅scrapy以及scrapy-redis文档


测试方法:

方法一:

scrapy crawl leju -s CLOSESPIDER_ITEMCOUNT=3 -o newhouse.json

查看newhouse.json中的数据是否与house.json中的数据类似. 方法二:

scrapy parse --spider=leju  -c parse_house -d 9 "http://house.leju.com/sc129079/#wt_source=pc_search_lpxx_bt"

查看item是否提取成功,windows cmd下显示可能为乱码.

数据中各个字段的意义,请查看 house.items以及common.items.house 中的注释。

运行方法:


一. sinahouse运行 ####单机:

  cd SinaHouseCrawler/house/    
  scrapy crawl leju 

####分布式:
配置好setting中的scrapy-redis的相关参数,在各机器中分别按单机方式启动即可

爬取目标网站: 新浪房产


二. xici和kuaidaili运行

  cd SinaHouseCrawler/proxy/
  scrapy crawl xici -o xici.json
  scrapy crawl kuaidaili -o kuaidaili.json

爬取目标网站: 西刺快代理


1 网站大改版,原是新浪房产,现改为乐居房产,链接由http://data.house.sina.com.cn 改为 http://sc.leju.com ,原始链接会跳转到新链接

About

基于scrapy,scrapy-redis实现的一个分布式网络爬虫,爬取了新浪房产的楼盘信息及户型图片,实现了常用的爬虫功能需求.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages