- SinaHouseCrawler/house 基于scrapy, scrapy-redis实现的一个分布式网络爬虫,爬取了
新浪房产1乐居房产 的楼盘信息及户型图片,实现了数据提取,去重,保存,分页数据的采集,数据的增量爬取,代理的使用,失效代理的清除,useragent的切换,图片的下载等功能,并且common模块中的中间件等可以在其他爬虫中复用. - SinaHouseCrawler/proxy 爬取了西刺 和快代理两个网站上的高匿名代理,通过代理访问网易作为检验,保留访问成功的代理数据.
-
'sinahouse.pipelines.MongoPipeline'实现数据持久化到mongodb,'sinahouse.pipelines.MySQLPipeline'实现数据异步写入mysql
-
'common.middlewares.UserAgentMiddleware','common.middlewares.ProxyMiddleware' 分别实现用户代理UserAgent变换和IP代理变换
-
'sinahouse.pipelines.ThreadImagesPipeline','sinahouse.pipelines.CustomImagesPipeline'分别是基于多线程将图片下载保存到images文件夹和继承scrapy自带 ImagePipline的实现的图片下载保存到images_store
-
'scrapy.extensions.statsmailer.StatsMailer'是通过设置settings中的mai等相关参数实现发送爬虫运行状态信息到指定邮件.scrapy.mail中的 MailSender也可以实现发送自定义内容邮件
-
通过设置setting中的scrapy-redis的相关参数,实现爬虫的分布式运行,或者单机多进程运行.无redis环境时,可以注释掉相关参数,转化为普通的scrapy爬虫程序
-
运行日志保存
- 只在Python 2.7测试过,请先安装 requirements.txt 中的模块.
- 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下显示可能为乱码.
一. 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 ,原始链接会跳转到新链接 ↩