环境:
这回要用分布式:我使用两台电脑,一台win10 系统,用来爬信息,一台ubuntu 16.04用来爬url,数据库redis,MongoDB都用的ubuntu上的,没有两台电脑在一个电脑上开两个爬虫也是一样的。
安装scrapy-redis
pip install scrapy-redis
scrapy-redis 和 scrapy用法基本相同,就是scrapy-redis跟redis库的粘合性更高一些,直接把url放到redis的key中,给出相应key,爬虫自己获取url进行爬取,url没了会等待这种永动式爬取,而且redis还会进行去重处理,避免数据爬取重复。
先创建个名字叫做zufang_scrapy的爬虫
scrapy startproject zufang_scrapy
在项目中创建zufang genspider:
scrapy genspider zufang "https://m.fang.com/zf/bj/"
pycharm打开,新建usa.py 和 begin.py 一个用来放user-agent 一个启动爬虫,上一章已经讲过了,结构如下:
settings加入:
#启用Redis调度存储请求队列
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
#确保所有的爬虫通过Redis去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
REDIS_URL = 'redis://:你的密码@localhost:6379'
接下来分析网页,目标网站,手机端房天下租房,城市北京,手机端电脑访问上一章有教
这就是网站第一页了:
网页右键查看元素,发现这个跟智联招聘的不同,这个不是翻页,而是下拉触发请求,我们切换到网络,下拉看看情况:
发现了每次下拉翻页,都会在XHR中返回一个文件,看一下内容,正式我们想要的租房信息,但是这个链接怪怪的一堆乱码,复制在网页里打卡,发下没有内容,于是我打开了chrome,打开https://m.fang.com/zf/bj/?jhtype=zf这个链接后做同样的事儿,发现url是这样的:
虽然还是一些奇怪的编码,但是至少不是乱码了,我们复制下拉,网页打开以下:
是乱码,但是有内容了,我们在scrapy中试试:
class ZufangSpider(scrapy.Spider):
name = "zufang"
allowed_domains = ["m.fang.com"]
start_urls = ['https://m.fang.com/zf/?purpose=%D7%A1%D5%AC&jhtype=zf&city=%B1%B1%BE%A9&renttype=cz&c=zf&a=ajaxGetList&city=bj&r=0.743897934517868&page=3']
def parse(self, response):
print(response.body)
发现结果是二进制,就是编码问题: