设为首页 加入收藏

TOP

Python协程爬取妹子图(内有福利,你懂得~)(一)
2017-10-10 08:31:15 】 浏览:8944
Tags:Python 程爬取 妹子 福利 懂得

项目说明:

  1、项目介绍

     本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的、pow(2, 10)是吧!

  2、用到的知识点

     本项目中会用到以下知识点

    ① Python的编程(本人使用版本3.6.2)

    ② 使用scrapy中的css选择器

    ③ 使用async协程

    ④ 使用aiohttp异步访问url

    ⑤ 使用aiofiles异步保存文件

  3、 项目效果图

            

 

项目实现:

  我们最终的目的是把图片的标题替换成需要保存的目录,下面的图片呢,就按着网页上图片的名称保存~,有了这个需求以后,ok,社会我demon哥,人很话不多,开干!

   我们需要网站的入口,入口如下~就爬取萌妹子吧!

   妹子图中萌妹分类的网站入口:http://www.meizitu.com/a/cute.html  

   打开萌妹子的入口链接以后,我们需要分析下网页中结构,然后通过分析页面,获取我们有用的内容:

   通过入口我们得知,url地址中,有两个我们需要关系的点,一个是妹子图的妹子类型,一个是要获取页面的页码,如果获取多页的话,也就是替换成不同的页码即可(图如下)

     

   分析完上面的页面以后,我们在来分析当前页中需要提取的信息 ,使用Chrome浏览器打开开发者模式(windows是F12,MacOS是command+option+i)

    

    点击刚刚选中妹子的url的地址,我们在来分析这里面的有用信息

      

   信息提取就到这里,我们下面需要使用css选择器,提取url然后开始写方法,来下载这些图片

 

   没有安装的scrapy的赶紧去pip3 install scrapy一下,要么您老就右上角的小叉叉退出吧~ 不然没办法进行了!

    Scrapy提供一个Shell的参数命令了,在这个参数后面加上你要提取页面中的url地址,就可以进入到scrapy shell中,在里面可以通过css xpath选择器调试提取信息,用法如下:

    在终端输入: scrapy shell http://www.meizitu.com/a/cute.html

    

   出现上面的即可,这里面有个response,我们可以通过response.css或者reponses.xpath获取url的数据,ok..我这里使用css来提取,为嘛?! 简单呗~

    css的具体语法嘛~~大家不会的话,可以自行百度,或者去菜鸟站补一补知识,我这人比较懒,我就不讲了!直接告诉你们怎么提取吧~可以通过Chrome给我提供的开发者工具来获取css选择器的表达式,请看下图

     

   上面图的图很眼熟对吧,嗯,这是哪个主页图,我们需要在当前页面中获取所有妹子的url地址,然后在进入到每个妹子的url地址中获取这个妹子的所有图片!首先先来获取当前页面的所有妹子的url地址,切换到scrap shell中,通过response.css来提取信息

   提取妹子的url地址:  response.css('#maincontent a::attr(href)').extract()

  

   嘿~,当前页面的中的所有妹子的url都有了,那就好办了呀,在进入这些地址中逐个获取妹子独立页面中的url地址,然后下载就好咯!但是,大家有木有发现,这些页面中的url有重复的,怎么办呢,用set可以去重哦,先来写个获取当前页面的简单的方法,一会我们在修改这个方法。

 1 import requests
 2 from scrapy import Selector
 3 
 4 
 5 def get_page_items(*, start_page_num: int=1, end_page_num: int=2, step: int=1):
 6     items = []
 7     for page_num in range(start_page_num, end_page_num, step):
 8         base_url = 'http://www.meizitu.com/a/{genre}_{page_num}.html'
 9         req = requests.get(base_url.format(genre='cute', page_num=1))
10         content = req.content.decode('gbk')
11         selector = Selector(text=content)
12         item_urls = list(set(selector.css('#maincontent a::attr(href)').extract()))
13         items.extend(url for url in item_urls if url.startswith('http://www.meizitu.com/a/'))
14     return items
15 
16 
17 print(get_page_items())

上面的代码可以供我们拿下指定页面中的所有漂亮小姐姐的url地址哦~,有了这些漂亮小姐姐的url,进入这个url以后,在提取小姐姐页面的所有url就可以下载啦~!

 1 import requests
 2 from scrapy import Selector
 3 
 4 
 5 def get_page_items(*, start_page_num: int=1, end_page_num: int=2, step: int=1):
 6     items = []
 7     for page_num in range(start_page_num, end_page_num, step):
 8         base_url = 'http://www.meizitu.com/a/{genre}_{page_num}.html'
 9         req = requests.get(base_url.format(genre='cute', page_num=1))
10         content = req.content.decode('gbk')
11         selector = Selector(text=content)
12         item_urls = list(set(selector.css('#maincontent a::attr(href)').extract()))
13         items.extend(url for url in item_urls if url.startswith('http://www.meizitu.com/a/'))
14     return items
15 
16 
17 def get_images(item):
18     req = requests.get(item)
19     content = req.content.decode('gbk')
20     selector = Selector(text=content)
21     image_urls = list(set(selector.css('#maincontent p img::attr(src)').e
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python协程爬取妹子图(内有福利,.. 下一篇Python协程爬取妹子图(内有福利,..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目