跟着鬼哥学爬虫-3-美女图片!!!

这一节课,是群里很多娃在等待的课程。


通过前面两篇文章的学习,我们对BeautifulSoup4的简单使用有了了解。


了解了使用这个爬虫的核心是熟悉分析清楚html标签,一些css的简单知识,找准了标签就可以获取到我们需要的数据了。


那么下面这篇文章,我们还需要用到个一个功能就是文件保存功能,也就是我们需要将网络返回的图片数据流保存在本地上,这样找准网站的美女图片链接之后,我们就可以直接来进行保存了。


0x01:

确定使用网址,方便截取图片地址信息。

https://tuchong.com/tags/美女

经过选择,最终我确定的是它。



我们打开这个网址,右击,选择审查元素功能。


通过上面我红线的标注大家也可以看到我们需要的关键数据了。


首先这个div的class是post-row,这个容器包含了整个网页的图片显示功能,相当于其他的小图都是放在这个容器中的。


所以我们的soup.select就可以先写上一句(div.post-row)


然后我们往下继续看,一步一步缩小标签,直到定位到图片地址,也就是select最终为:(div.post-row div.post-collage a.theatre-view img)


也就是精确到了img标签属性了,然后我们继续按照上篇文章 介绍的方法,使用ipython工具进行调试。


获取到这个soup之后,查看数据后发现这个数据格式为Tag属性。本系列第一篇文章中,我提到的两篇文章如果大家看完之后就会了解Tag最重要的两个属性为name和attrs。


所以这个时候我们不知道再怎么继续的时候,查看一下


someData = soup1.select("div.post-row div.post-collage a.theatre-view img")


someData.attrs


可以看到属性有个src,也就是通过上面我们看到的图片地址信息,所以可以直接确定我们需要的图片地址为:


    someData = soup1.select("div.post-row div.post-collage a.theatre-view img")


    allUrls=[]


    for some in someData:


        allUrls.append(some['src'])


这里我用一个list储存我们获取的所有数据,方便我们保存,留到后面使用。


0x02:文件保存


这里没有什么需要说的,直接贴一下代码,这里使用了正则,匹配上面我们截取的图片地址信息后缀的数字,方便储存,大家可以根据自己的需求修改

def download(url):
    path = '/home/suz/girls2/'
    content = urllib2.urlopen(url).read()
    format = '[0-9]*\.jpg';
    res = re.search(format,url);
    print 'downloading:',res.group()
    filename = path+res.group()
    f = open(filename,'w+')
    f.write(content)
    f.close()


0x03:批量跑啊


现在就简单多了,我们分析一下每个网址的信息,也就是一页有多少个缩略图信息就可以了。


如下代码:


if __name__ == "__main__":


    for i in range(1,5000):


        urls=getGirlUrl(i)


        for u in range(1,len(urls)):


            download(urls[u])


        print '正在爬第'+str(i)+'页'



0x04:全部代码


老规矩,听鬼哥说故事,得有完整的代码:


# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup


import urllib2


import re




def getGirlUrl(n):


    url = 'https://tuchong.com/tags/%E7%BE%8E%E5%A5%B3?page='+str(n)


    print url


    response = urllib2.urlopen(url)


    html = response.read()


    soup1 = BeautifulSoup(html, "lxml")


    #someData = soup1.select("div.post-row")


    someData = soup1.select("div.post-row div.post-collage a.theatre-view img")


    allUrls=[]


    for some in someData:


        allUrls.append(some['src'])


    print allUrls




def download(url):
    path = '/home/suz/girls2/'
    content = urllib2.urlopen(url).read()
    format = '[0-9]*\.jpg';
    res = re.search(format,url);
    print 'downloading:',res.group()
    filename = path+res.group()
    f = open(filename,'w+')
    f.write(content)
    f.close()










if __name__ == "__main__":


    for i in range(1,5000):


        urls=getGirlUrl(i)


        for u in range(1,len(urls)):


            download(urls[u])


        print '正在爬第'+str(i)+'页'








效果图:






这里我写了个批处理的脚本,来批量修改文件的名称,所以上面大家看到的文件名从数字1开始的。


至于为什么我们搞这些图片,请继续关注后面的文章,我们最终打造的微信聊天机器人的自动发图功能!!!!


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值