python爬虫scrapy项目(二)

  爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx)

  爬取内容:城市;名字;出租方式;价格;户型;面积;地址;交通

  反反爬措施:设置随机user-agent、设置请求延时操作、

1、开始创建项目

  1. 1 scrapy startproject fang

2、进入fang文件夹,执行启动spider爬虫文件代码,编写爬虫文件。

  1. 1 scrapy genspider zufang "zu.fang.com"

  命令执行完,用Python最好的IDE---pycharm打开该文件目录

3、编写该目录下的items.py文件,设置你需要爬取的字段。

  1. import scrapy
  2.  
  3. class HomeproItem(scrapy.Item):
  4. # define the fields for your item here like:
  5. # name = scrapy.Field()
  6.  
  7. city = scrapy.Field() #城市
  8. title = scrapy.Field() # 名字
  9. rentway = scrapy.Field() # 出租方式
  10. price = scrapy.Field() #价格
  11. housetype = scrapy.Field() # 户型
  12. area = scrapy.Field() # 面积
  13. address = scrapy.Field() # 地址
  14. traffic = scrapy.Field() # 交通

4、进入spiders文件夹,打开hr.py文件,开始编写爬虫文件

  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from homepro.items import HomeproItem
  4. from scrapy_redis.spiders import RedisCrawlSpider
  5. # scrapy.Spider
  6. class HomeSpider(RedisCrawlSpider):
  7. name = 'home'
  8. allowed_domains = ['zu.fang.com']
  9. # start_urls = ['http://zu.fang.com/cities.aspx']
  10.  
  11. redis_key = 'homespider:start_urls'
  12. def parse(self, response):
  13. hrefs = response.xpath('//div[@class="onCont"]/ul/li/a/@href').extract()
  14. for href in hrefs:
  15. href = 'http:'+ href
  16. yield scrapy.Request(url=href,callback=self.parse_city,dont_filter=True)
  17.  
  18. def parse_city(self, response):
  19. page_num = response.xpath('//div[@id="rentid_D10_01"]/span[@class="txt"]/text()').extract()[0].strip('共页')
  20. # print('*' * 100)
  21. # print(page_num)
  22. # print(response.url)
  23.  
  24. for page in range(1, int(page_num)):
  25. if page == 1:
  26. url = response.url
  27. else:
  28. url = response.url + 'house/i%d' % (page + 30)
  29. print('*' * 100)
  30. print(url)
  31. yield scrapy.Request(url=url, callback=self.parse_houseinfo, dont_filter=True)
  32.  
  33. def parse_houseinfo(self, response):
  34. divs = response.xpath('//dd[@class="info rel"]')
  35. for info in divs:
  36. city = info.xpath('//div[@class="guide rel"]/a[2]/text()').extract()[0].rstrip("租房")
  37. title = info.xpath('.//p[@class="title"]/a/text()').extract()[0]
  38. rentway = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[0].extract().replace(" ", '').lstrip('\r\n')
  39. housetype = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[1].extract().replace(" ", '')
  40. area = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[2].extract().replace(" ", '')
  41. addresses = info.xpath('.//p[@class ="gray6 mt12"]//span/text()').extract()
  42. address = '-'.join(i for i in addresses)
  43. try:
  44. des = info.xpath('.//p[@class ="mt12"]//span/text()').extract()
  45. traffic = '-'.join(i for i in des)
  46. except Exception as e:
  47. traffic = "暂无详细信息"
  48.  
  49. p_name = info.xpath('.//div[@class ="moreInfo"]/p/text()').extract()[0]
  50. p_price = info.xpath('.//div[@class ="moreInfo"]/p/span/text()').extract()[0]
  51. price = p_price + p_name
  52.  
  53. item = HomeproItem()
  54. item['city'] = city
  55. item['title'] = title
  56. item['rentway'] = rentway
  57. item['price'] = price
  58. item['housetype'] = housetype
  59. item['area'] = area
  60. item['address'] = address
  61. item['traffic'] = traffic
  62. yield item

5、设置setting.py文件,配置scrapy运行的相关内容

  1. # 指定使用scrapy-redis的调度器
  2. SCHEDULER = "scrapy_redis.scheduler.Scheduler"
  3.  
  4. # 指定使用scrapy-redis的去重
  5. DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
  6.  
  7. # 指定排序爬取地址时使用的队列,
  8. # 默认的 按优先级排序(Scrapy默认),由sorted set实现的一种非FIFO、LIFO方式。
  9. SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
  10.  
  11. REDIS_HOST = '10.8.153.73'
  12. REDIS_PORT = 6379
  13. # 是否在关闭时候保留原来的调度器和去重记录,True=保留,False=清空
  14. SCHEDULER_PERSIST = True

6、然后把代码发给其他附属机器,分别启动.子程序redis链接主服务器redis。

  1. redis-cli -h 主服务器ip

7、主服务器先启动redis-server,再启动redis-cli

  1. lpush homespider:start_urls 起始的url

python爬虫项目(scrapy-redis分布式爬取房天下租房信息)的更多相关文章

  1. 爬虫--scrapy+redis分布式爬取58同城北京全站租房数据

    作业需求: 1.基于Spider或者CrawlSpider进行租房信息的爬取 2.本机搭建分布式环境对租房信息进行爬取 3.搭建多台机器的分布式环境,多台机器同时进行租房数据爬取 建议:用Pychar ...

  2. Python爬取房天下二手房信息

    一.相关知识 BeautifulSoup4使用 python将信息写入csv import csv with open("11.csv","w") as csv ...

  3. Python爬虫学习三------requests+BeautifulSoup爬取简单网页

    第一次第一次用MarkDown来写博客,先试试效果吧! 昨天2018俄罗斯世界杯拉开了大幕,作为一个伪球迷,当然也得为世界杯做出一点贡献啦. 于是今天就编写了一个爬虫程序将腾讯新闻下世界杯专题的相关新 ...

  4. scrapy-redis + Bloom Filter分布式爬取tencent社招信息

    scrapy-redis + Bloom Filter分布式爬取tencent社招信息 什么是scrapy-redis 什么是 Bloom Filter 为什么需要使用scrapy-redis + B ...

  5. scrapy-redis分布式爬取tencent社招信息

    scrapy-redis分布式爬取tencent社招信息 什么是scrapy-redis 目标任务 安装爬虫 创建爬虫 编写 items.py 编写 spiders/tencent.py 编写 pip ...

  6. Python爬虫学习(6): 爬取MM图片

    为了有趣我们今天就主要去爬取以下MM的图片,并将其按名保存在本地.要爬取的网站为: 大秀台模特网 1. 分析网站 进入官网后我们发现有很多分类: 而我们要爬取的模特中的女模内容,点进入之后其网址为:h ...

  7. python爬虫实践(二)——爬取张艺谋导演的电影《影》的豆瓣影评并进行简单分析

    学了爬虫之后,都只是爬取一些简单的小页面,觉得没意思,所以我现在准备爬取一下豆瓣上张艺谋导演的“影”的短评,存入数据库,并进行简单的分析和数据可视化,因为用到的只是比较多,所以写一篇博客当做笔记. 第 ...

  8. python网络爬虫之scrapy 调试以及爬取网页

    Shell调试: 进入项目所在目录,scrapy shell “网址” 如下例中的: scrapy shell http://www.w3school.com.cn/xml/xml_syntax.as ...

  9. Python爬虫基础--分布式爬取贝壳网房屋信息(Client)

    1. client_code01 2. client_code02 3. 这个时候运行多个client就可以分布式进行数据爬取.

随机推荐

  1. layui select使用问题

    1.需要引用form模板 layui.use(['form'], function () { var form = layui.form; }); 2.html代码 <div class=&qu ...

  2. Multi-Get API

    multiGet API并行地在单个http请求中执行多个get请求. Multi-Get Request MultiGetRequest构造函数为空,需要你添加`MultiGetRequest.It ...

  3. 接口自动化项目搭建(Java+testng+maven+git+springboot)

    自动化测试: https://www.bilibili.com/video/av31078661?from=search&seid=16551153777362561361 一工具准备 二 环 ...

  4. iptables实现--kafka限制ip地址访问

    iptables -I INPUT -p tcp --dport 9092:9094 -j DROPiptables -I INPUT -s 10.144.137.32 -p tcp --dport ...

  5. Python入门(青铜篇)

    一.定义变量 print('hello world \n') 定义变量name='单宝梁' #定义字符串一定加‘’age=28 引号使用words="i'm 单宝梁" #字符串里有 ...

  6. 调研一类软件的发展演变( 1000-2000 words, in Chinese)

    WARING:大量个人观点,可靠性突出一个没有. 随着时代的发展,科技的用途也在发生着改变.最初,计算机是高端科学家用来计算导弹路线.模拟核弹爆炸用的,而现在计算机更多是平凡百姓家的一台娱乐设备.当今 ...

  7. monkey 命令详解

    monkey命令详解   1.  $ adb shell monkey <event-count>                <event-count>是随机发送事件数 例 ...

  8. Python开发虚拟环境使用virtualenvwrapper的搭建及pycharm链接步骤

    virtualenv 是一个创建隔绝的Python环境的工具.virtualenv创建一个包含所有必要的可执行文件的文件夹,用来使用Python工程所需的包.创建的环境是独立的,互不干扰,无需sudo ...

  9. [Swift]LeetCode861. 翻转矩阵后的得分 | Score After Flipping Matrix

    We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...

  10. 有道云笔记 - Markdown模板(文首附markdown源码,即.md文件)

    有道云笔记 - Markdown模板 附 本文的Markdown源码镜像: https://github.com/yanglr/AlgoSolutions/blob/master/Youdao_Not ...