美文网首页
Python爬虫之爬取美女图片

Python爬虫之爬取美女图片

作者: hc_chou | 来源:发表于2017-11-20 18:55 被阅读0次

    需求:最近对python爬虫感兴趣,于是学习了下python爬虫并找了个网站练习,练习网址:http://www.mmjpg.com,其中每一套图都是一张一个页面,存一套图如果是手动得点翻几十个页面,但如果使用爬虫的话,就很方便了,轻轻松松就可以把美女存到硬盘了。

    实验环境:

    • Windows 10,Python 2.7.6,Pycharm

    1.确定目标网址

    www.mmjpg.com

    2.分析网页URL变化

    通过打开不同页数的页面内容后发现
    第二页:http://www.mmjpg.com/home/2
    第三页:http://www.mmjpg.com/home/3
    每当我们点击一个页面,url改变的是最后面的数字,因此我们需要找到总页数的html代码,才能对其进行爬虫翻页

    3.分析网页源代码

    通过审查网页元素定位到了总页数的html元素:<a href="/home/79" class="last">最旧</a> 由此可以得出该网址的总页数为79页,接下来便可对其进行提取

    4.引入所需要的库

    import os
    import re
    import urllib2                                                                                                          
    from lxml import html     
    

    5.获取网页源代码

    def get_source_page(self, url):
        '''
        返回经过lxml.html.fromstring 模块处理的<Element html at 0x36e8278>
        可以用 XPath 来过滤数据
        '''
        try:
            response = urllib2.urlopen(url, timeout=3).read()
            selector = html.fromstring(response)
        except:
            selector = None
        finally:
            return selector
    

    6.获取总页数

    def get_sum_page(self, url):
        selector = self.get_source_page(url)
        '''使用xpath提取网页中总页数的元素'''
        sum_page = selector.xpath('//div[@class="page"]//a[last()]/@href')[0].split('/')[-1]
        return sum_page
    

    7.用总页数来组合拼接出所有页面的url,并返回包含所有url的list

    def get_all_page_urls(self, sumpage):
        urls = []
        baseurl = 'http://www.mmjpg.com/home/'
        ul = baseurl.split('/')
        for page in range(1, int(sumpage) + 1):
            ul[-1] = str(page)
            url = '/'.join(ul)
            urls.append(url)
        return urls
    

    8.获取每个图集的链接

    '''由于首页图片点击进去之后还有图片,因此首页图片是一个图集链接,所以得先获取图集链接,进而获取里面的所有图片,分析网页代码得知,可对其连接进行提取,并同样返回一个list'''
    def get_page_links(self, urls):
        page_links = []
        for url in urls:
            try:
                selector = self.get_source_page(url)
                lis = selector.xpath('//div[@class="pic"]//li/a/@href')
            except:
                continue
            for li in lis:
                page_links.append(li)
        return page_links
    

    9.获取图片的src属性

    def get_pic_link(self, url):
        try:
            selector = self.get_source_page(url)
            src = selector.xpath('//div[@id="content"]/a/img/@src')[0]
        except:
            src = None
        finally:
            return src
    

    10.创建文件夹并用图集名进行命名

    def mk_pic_dir(self, dirname):
        path = dirname
        if not os.path.exists(path):
            os.mkdir(path)
        return path
    

    11.进入所有图集,并下载所有图片

    def download_all_pic(self, page_links):
        for page_link in page_links:
            try:
                selector = self.get_source_page(page_link)
                album_title = selector.xpath('//div[@class="article"]/h2/text()')[0]
                sum_pic = selector.xpath('//div[@id="page"]/a[last()-1]/text()')[0]
                path = self.mk_pic_dir(album_title)
            except:
                continue
            for pic in range(1, int(sum_pic) + 1):
                try:
                    print u'正在下载-->' + album_title + u'-->第' + str(pic) + u'张美图...'
                    pic_link = page_link + '/' + str(pic)
                    src = self.get_pic_link(pic_link)
                    filename = '%s.jpg' % (pic)
                except:
                    continue
                else:
                    try:
                        '''增加打开图片链接时的头部referer属性'''
                        req = urllib2.Request(src)
                        req.add_header('Referer', 'http://img.mmjpg.com/')
                        '''写入文件'''
                        with open(path + '/' + filename, 'wb') as fp:
                            fp.write(urllib2.urlopen(src, timeout=3).read())
                     except:
                        continue
    

    12.大功告成,运行代码

    编辑器执行过程
    以图集名命名的文件夹
    对应图集里面的所有图片

    本实验的完整代码在Github上,欢迎fork

    相关文章

      网友评论

          本文标题:Python爬虫之爬取美女图片

          本文链接:https://www.haomeiwen.com/subject/orqbvxtx.html