专栏首页武军超python专栏11月9日python分布式爬虫

11月9日python分布式爬虫

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

使用分布式必须要安装: 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()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2018年7月21日python中的加密和解密

    ·在函数调用执行过程中: 如果出现return,return中的函数执行完则本函数就运行结束,return下面的语句不会再继续执行,所以return使 用时...

    武军超
  • SQL注入和XSS攻击

    SQL注入: 所谓SQL注入,就是通过把SQL命令插入到提交的Web表单或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,导致数据库中...

    武军超
  • 2018年9月25日python的web框架Django入门的理论知识

    1、什么是软件     软件就是解决某一问题或者某类问题的指令集合,是一个工具,是一个进程,是程序。

    武军超
  • 第三季度净利润暴跌30.5%,LG电子撤换公司CEO及多名高管

    11月29日,据外媒报道,韩国家电巨头LG电子在日前撤换了其公司首席执行官和多位高管。此前该公司发布的财报显示,第三季度净利润暴跌超30%,旗下智能手机部门也陷...

    镁客网
  • 五方法破解Linux(CentOS7.4)系统的root密码

    版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

    耕耘实录
  • Oracle性能调优之虚拟索引用法简介

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u014427391/article/details/...

    SmileNicky
  • 5G时代,如何彻底搞定海量数据库的设计与实践

    5G时代,业务数据越来越丰富,业务使用MySQL数据库作为后台存储,存储引擎使用InnoDB,会带来哪些挑战?如何针对公司业务特点及MySQL数据库特性,制定若...

    江帅帅
  • 构建Vue项目-身份验证

    通常,在开始使用新框架或新语言工作时,我会尝试查找尽可能多的最佳实践,而我更喜欢从一个易于理解,维护和升级的良好结构开始。在这篇文章中,我将尝试解释自己的想法,...

    前端知否
  • 爬取58同城二手手机

    深浅无解
  • java api使用ElastichSearch指南

    比如想要addr是beijing的,同时必须满足条件:name是 paxi,或者,phoneNumber是 1234567890

    爬蜥

扫码关注云+社区

领取腾讯云代金券