python3爬妹子图_python3爬妹子图

pythonScrapy批量采集妹子图网的图片

这部分相当有用,咱们不多说,目前是2016.6.22日亲测可用.环境方面是linux_ubuntu_15.04python_scrapy的环境搭建有问题请看之前的scrapy笔记

代码在:githubhttps://github/luyishisi/WebCrawlers/tree/master/scrapy_code/meizitu

先上最终截图,有动力好好学习了没?

0.创建项目

Python

1.修改item.py

importscrapyclassMeizituItem(scrapy.Item):#definethefieldsforyouritemherelike:#name=scrapy.Field()url=scrapy.Field()name=scrapy.Field()tags=scrapy.Field()image_urls=scrapy.Field()images=scrapy.Field()

2.修改pipelines.py

123456789101112131415161718192021222324252627282930313233343536373839404142

#-*-coding:utf-8-*-#图片下载部分(自动增量)importrequestsfrommeizituimportsettingsimportos#图片下载类classImageDownloadPipeline(object):defprocess_item(self,item,spider):if'image_urls'initem:#如果‘图片地址’在项目中images=[]#定义图片空集dir_path='%s/%s'%(settings.IMAGES_STORE,spider.name)#建立目录名字和项目名称一致ifnotos.path.exists(dir_path):os.makedirs(dir_path)#根据item字典进行查询forimage_urlinitem['image_urls']:us=image_url.split('/')[3:]image_file_name='_'.join(us)file_path='%s/%s'%(dir_path,image_file_name)images.append(file_path)#如果这个文件存在则跳过ifos.path.exists(file_path):continue#进行图片文件写入,wb模式打开文件,然后requests.get获取图片流,withopen(file_path,'wb')ashandle:response=requests.get(image_url,stream=True)forblockinresponse.iter_content(1024):#获取的流如果有不存在的,则使用break结束,如果没有一次结束则进行写入ifnotblock:breakhandle.write(block)item['images']=images#即使注释了也一样效果,不知道为何returnitem

3.修改settings.py

#-*-coding:utf-8-*-BOT_NAME='meizitu'SPIDER_MODULES=['meizitu.spiders']NEWSPIDER_MODULE='meizitu.spiders'#载入ImageDownLoadPipeline类ITEM_PIPELINES={'meizitu.pipelines.ImageDownloadPipeline':1}#图片储存IMAGES_STORE='.'

4.建立spiders/meizi.py

注意这里名字不可以和项目文件夹的名字一样就是说不可以是meizitu。否则会报错

原scrapyImportError:Nomodulenameditems

ImportError:Nomodulenameditems

https://groups.google/forum/#!msg/scrapy-users/aYrpirKBK8Q/i1Su6UJbwjEJ

spiders目录中的.py文件不能和项目名同名。

1234567891011121314151617181920212223242526272829303132333435363738394041424344

#-*-coding:utf-8-*-importscrapyfromscrapy.selectorimportSelector#ItemLoaders提供了一种便捷的方式填充抓取到的:Itemsfromscrapy.contrib.loaderimportItemLoader,Identityfrommeizitu.itemsimportMeizituItemclassMeiziSpider(scrapy.Spider):name="meizi"allowed_domains=["meizitu"]start_urls=('http://meizitu/',)defparse(self,response):#sel是页面源代码,载入scrapy.selectorsel=Selector(response)#每个连接,用@href属性forlinkinsel.xpath('//h2/a/@href').extract():#请求=Request(连接,parese_item)request=scrapy.Request(link,callback=self.parse_item)yieldrequest#返回请求#获取页码集合pages=sel.xpath('//*[@id="wp_page_numbers"]/ul/li/a/@href').extract()print('pages:%s'%pages)#打印页码iflen(pages)>2:#如果页码集合>2page_link=pages[-2]#图片连接=读取页码集合的倒数第二个页码page_link=page_link.replace('/a/','')#图片连接=page_link(a替换成空)request=scrapy.Request('http://meizitu/a/%s'%page_link,callback=self.parse)yieldrequest#返回请求defparse_item(self,response):#l=用ItemLoader载入MeizituItem()l=ItemLoader(item=MeizituItem(),response=response)#名字l.add_xpath('name','//h2/a/text()')#标签l.add_xpath('tags',"//p[@id='maincontent']/p[@class='postmetaclearfix']/p[@class='metaRight']/p")#图片连接l.add_xpath('image_urls',"//p[@id='picture']/p/img/@src",Identity())#urll.add_value('url',response.url)returnl.load_item()

5.运行

6.检查效果

在执行命令的这个目录下就可以看到啦一个meizi的文件夹

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值