前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >11月9日python分布式爬虫

11月9日python分布式爬虫

作者头像
武军超
发布2019-02-25 15:13:37
3700
发布2019-02-25 15:13:37
举报

实例方法, 静态方法, 类方法的区别 实例方法: 类中定义的普通方法,只能通过实例对象调用 静态方法: 静态方法主要是用来存放逻辑性的代码,逻辑上类型属于这个类,但是和类本身没有关系,实例对象和类对象都可以 调用 类方法的区别:假设有个方法,且这个方法在逻辑上采用类本身作为对象来调用更合理,那么这个方法就可以定义为类方法。另外,如果需要继承,也可以定义为类方法,实例对象和类对象都可以调用

使用分布式必须要安装: pip install scrapy-redis

分布式: 分布式爬虫的难点在于多台机器之间怎么互相通信而防止爬取重复的url,解决办法就是使用内存型数据库redis, 在redis中创建一个列表,列表用于记录爬取过的url, 每台机器在爬取之前都访问该数据库,看将要爬取的url是否在redis 数据库中,如果在的话就不再进行爬取。

生成爬虫可以不加模板,不加模板的话就不会出现rules,需要自己写 起始url不写在项目中,写在redis数据库中 索引页要follow,国家内容不follow,但是有callback from scrapy_redis.spiders import RedisCrawlSpider 引入需要的模块,爬虫模块继承的类需要改成RedisCrawlSpider

如果出现填一个url才能爬取一个url,不能自动爬取的话首先看一下域名是否正确,如果实在不行的话就把redis数据库 清空一下(flushdb),可能是由于存储爬取过的url那个列表的上次运行缓存太多造成的

使用分布式需要使用redis数据库,在终端连接redis数据库的命令是 redis-cli

需要在redis数据库中插入第一个url: lpush start_urls http://example.webscraping.com/places/default/index/1

如果报错: TypeError: 'ItemMeta' object does not support item assignment 说明爬虫模块引入的Item模块中定义的类的名字不对,或者是引用过来少带了括号。

打开文件最常用的有两种方式: 1. 文本文件不需要用wb, 可以直接存储,如果加了wb, 下面写入的过程还需要encode('utf8'),图片,音频视频存为不同类型的文件时一定要加wb, 不同类型的文件后缀名不一样,可以采用字符串拼接的方式直接将爬出数据的名字定义为文件名,如: (file = item['aname'] + '.txt'), (pic = item['aname'] + '.jpg') 1.第一种存储过程 f = open(file, 'w') f.write((item['aname']+','+item['atype'] + '\n')) f.close()

with open的方式打开不用关系关闭因为with open用完会自动关闭: 2.第二种存储过程 with open(file,'w',encoding='utf8') as f:     f.write((item['aname']+','+item['atype'] + '\n'))     f.close() scrapy存储图片:  with open(pic, 'wb') as p:             p.write(requests.get(item['aimage']).content)             p.close()

同时可以指定打开某个路径下的文件或者保存到某个路径下,如果不指定的话默认就是相对路径的当前的目录下: 如果使用/来表示路径可以直接写绝对路径,如果使用\则需要在绝对路径的前面加r来表示不转义,以原字符解释, 路径的 最后一定要加/表示最后那个文件下: with open('G:/第四阶段/11月9日AnimalSpider/Animal/data/'+file,'w',encoding='utf8') as f:     f.write((item['aname']+','+item['atype'] + '\n'))     f.close()

with open(r'G:\第四阶段\11月9日AnimalSpider\Animal\data/'+file,'w',encoding='utf8') as f:     f.write((item['aname']+','+item['atype'] + '\n'))     f.close()

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年11月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档