您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 文山分类信息网,免费分类信息发布

python Scrapy 批量采集 妹子图网的图片

2024/2/2 8:24:53发布21次查看
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=meiziallowed_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的文件夹
文山分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录