本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:py3study

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )

python爬虫scrapy项目

爬取目标:房天下全国租房信息网站(起始url:http://zu.fang.com/cities.aspx)
  爬取内容:城市;名字;出租方式;价格;户型;面积;地址;交通
  反反爬措施:设置随机user-agent、设置请求延时操作。

1、开始创建项目

1 scrapy startproject fang

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

1 scrapy genspider zufang "zu.fang.com"

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

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

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

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

 1 # -*- coding: utf-8 -*-2 import scrapy3 from homepro.items import HomeproItem4 from scrapy_redis.spiders import RedisCrawlSpider5 # scrapy.Spider6 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
19     def parse_city(self, response):
20         page_num = response.xpath('//div[@id="rentid_D10_01"]/span[@class="txt"]/text()').extract()[0].strip('共页')
21         # print('*' * 100)
22         # print(page_num)
23         # print(response.url)
24
25         for page in range(1, int(page_num)):
26             if page == 1:
27                 url = response.url
28             else:
29                 url = response.url + 'house/i%d' % (page + 30)
30             print('*' * 100)
31             print(url)
32             yield scrapy.Request(url=url, callback=self.parse_houseinfo, dont_filter=True)
33
34     def parse_houseinfo(self, response):
35         divs = response.xpath('//dd[@class="info rel"]')
36         for info in divs:
37             city = info.xpath('//div[@class="guide rel"]/a[2]/text()').extract()[0].rstrip("租房")
38             title = info.xpath('.//p[@class="title"]/a/text()').extract()[0]
39             rentway = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[0].extract().replace(" ", '').lstrip('\r\n')
40             housetype = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[1].extract().replace(" ", '')
41             area = info.xpath('.//p[@class="font15 mt12 bold"]/text()')[2].extract().replace(" ", '')
42             addresses = info.xpath('.//p[@class ="gray6 mt12"]//span/text()').extract()
43             address = '-'.join(i for i in addresses)
44             try:
45                 des = info.xpath('.//p[@class ="mt12"]//span/text()').extract()
46                 traffic = '-'.join(i for i in des)
47             except Exception as e:
48                 traffic = "暂无详细信息"
49
50             p_name = info.xpath('.//div[@class ="moreInfo"]/p/text()').extract()[0]
51             p_price = info.xpath('.//div[@class ="moreInfo"]/p/span/text()').extract()[0]
52             price = p_price + p_name
53
54             item = HomeproItem()
55             item['city'] = city
56             item['title'] = title
57             item['rentway'] = rentway
58             item['price'] = price
59             item['housetype'] = housetype
60             item['area'] = area
61             item['address'] = address
62             item['traffic'] = traffic
63             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-re)相关推荐

  1. python爬虫项目实战教学视频_('[Python爬虫]---Python爬虫进阶项目实战视频',)

    爬虫]---Python 爬虫进阶项目实战 1- Python3+Pip环境配置 2- MongoDB环境配置 3- Redis环境配置 4- 4-MySQL的安装 5- 5-Python多版本共存配 ...

  2. 「Python爬虫系列讲解」十四、基于开发者工具 Network 的数据抓包技术

    本专栏是以杨秀璋老师爬虫著作<Python网络数据爬取及分析「从入门到精通」>为主线.个人学习理解为主要内容,以学习笔记形式编写的. 本专栏不光是自己的一个学习分享,也希望能给您普及一些关 ...

  3. python爬虫项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  4. python爬虫项目-32个Python爬虫项目让你一次吃到撑

    今天为大家整理了32个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1]- ...

  5. python爬虫项目-23个Python爬虫开源项目代码

    今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快 1.WechatSogou [1]– 微信公众号 ...

  6. python爬虫新手项目-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  7. python爬虫教程推荐-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  8. 32个Python爬虫项目

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

  9. python爬虫-33个Python爬虫项目实战(推荐)

    今天为大家整理了32个Python爬虫项目. 整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心.所有链接指向GitHub,祝大家玩的愉快~O(∩_∩)O WechatSogou [1] ...

最新文章

  1. 巨头抱团后 奢侈品电商还有前途吗?
  2. m_Orchestrate learning system---九、在无法保证是否有图片的情况下,如何保证页面格式...
  3. 用GPU拯救世界:英伟达斯坦福呼吁玩家捐献算力,投入新冠病毒相关蛋白质分布式计算...
  4. chrome/edge插件备忘
  5. tomcat php模块化运行,Windows下 Tomcat 运行 PHP 的配置
  6. Windows XP文件夹右键属性没有“安全”选项卡的解决
  7. Spring Security Oauth2 之密码模式
  8. Python使用数学形态学方法处理图像
  9. python中的数据类型中int表示_python中的基本数据类型之 int bool str
  10. 这一次,MIT的科学家让谷歌AI把步枪误认成直升机
  11. String通过“+”号拼接字符串的底层实现
  12. 基于android鲜花销售app,基于Android的鲜花APP设计任务书
  13. 设置一个类似手机的锁屏界面但又不知道如何操作
  14. 修改鼠标指针的样式,让鼠标变成动态个性化图标,让你的鼠标图标更炫酷起来。
  15. 解决 /lib64/libc.so.6: version `GLIBC_2.18‘ not found以及glibc安装错误error: you must configure in a separat
  16. JavaScript基础小节——手写重点整理02
  17. Deepin系统标题栏及其按钮美化
  18. mysql求月平均_mysql求平均值
  19. ipython怎么念_如何读取IPython%prun(profiler)命令的输出? - python
  20. 盘点科技公司十大裁员风波:诺基亚累计裁员近半(转)

热门文章

  1. 程序控制流程(三大流程)
  2. JQuery 三元运算
  3. LVS负载均衡服务器搭建
  4. SQL学习笔记——limit用法(limit使用一个参数,limit使用两个参数)
  5. python 散点图颜色大全
  6. 文件加密和解密软件:AutoCrypt for mac
  7. VIDIOC_S_CROP inappropriate ioctl for device的解决办法
  8. 编写一个shell脚本程序,检测指定IP地址的主机是否在线
  9. Spring加载流程源码解析
  10. 如何为VMware vcenter server的网卡eth0配置静态IP?