zoukankan      html  css  js  c++  java
  • Python爬虫个人记录(三)爬取妹子图

    这此教程可能会比较简洁,具体细节可参考我的第一篇教程:
    Python爬虫个人记录(一)豆瓣250
    Python爬虫个人记录(二)fishc爬虫

    一、目的分析

    获取煎蛋妹子图并下载
    http://jandan.net/ooxx
    这里写图片描述
    大概就是这么个样子了^_^

    心动了吗,那就行动吧。

    二、步骤分析

    1、访问http://jandan.net/ooxx

    获得当前妹子图的页码
    这里写图片描述

    2、 获得http://jandan.net/ooxx前十页地址

    3、分析前十页地址并获得图片真实下载地址

    4、下载前十页的妹子图并保存

    三、scrapy shell 模拟分析

    1、获取页码

    cmd ->scrapy shell
    >>> fetch('http://jiandan.net/ooxx/')
    2017-08-13 15:22:52 [scrapy.core.engine] INFO: Spider opened
    2017-08-13 15:22:52 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://jandan.net/ooxx> (referer: None)
    >>> response.xpath('//*[@id="comments"]/div[2]/div/a[1]/text()').extract()
    ['
                        252                ']
    >>>

    关于获取xpath方法可参照豆瓣记录(一)fishc记录(二)

    2、合成地址访问,并分析出妹子图片下载地址(页面一为例)

    >>> fetch('http://jandan.net/ooxx/page-252#comments')
    2017-08-13 15:33:08 [scrapy.core.engine] DEBUG: Crawled (200) <GET http://jandan.net/ooxx/page-252#comments> (referer: None)
    >>> response.xpath('//*[@id="comment-3533810"]/div/div/div[2]/p/img').extract()
    ['<img src="//wx4.sinaimg.cn/mw600/005Dt8Kogy1fidom0zig8j30fx0ku0ww.jpg">']
    >>> response.xpath('//*[@id="comment-3533810"]/div/div/div[2]/p/img/@src').extract()
    ['//wx4.sinaimg.cn/mw600/005Dt8Kogy1fidom0zig8j30fx0ku0ww.jpg']
    >>>

    获得图片下载地址成功

    四、Python代码书写

    (细节参考记录一、二)

    直接上源码了,有一些注释,可以自行参考阅读

    import urllib.request
    import os
    from lxml import etree
    
    #打开一个网页操作
    def url_open(url):
        req = urllib.request.Request(url)
        req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3226.400 QQBrowser/9.6.11681.400')
        response = urllib.request.urlopen(url)
        html = response.read()
    
        return html
    
    def find_data(url = '', xrule = ''):
        result_data = []
    
        html = url_open(url)
        selector = etree.HTML(html)
        result_data = selector.xpath(xrule)
    
        return result_data
    
    #将图片保存在本地
    def save(folder, image_addrs):
    
        for each in image_addrs:
            file_name = each.split('/')[-1]
            with open(file_name, 'wb') as f:
                img = url_open(each)
                f.write(img)
    
    def test1():
    
        url = 'http://jiandan.net/ooxx/'
        page = 5 #获取的图片页数
    
        #获取最新妹子页码
        xrule = '//*[@id="comments"]/div[2]/div/a[1]/text()'
        page_num = find_data(url, xrule)
        page_num = int(page_num[0])
        #print(page_num) #成功
        #获取下载链接
        list_1 = []
        xrule_1 = '//li[contains(@id,"comment-")]/div/div/div[2]/p/img/@src'
        for i in range(page):
            page_url = 'http://jiandan.net/ooxx/page-' + str(page_num - i) + '#comments'
            result = find_data(page_url, xrule_1)
            for each in result:
                each = 'http:' + each
                list_1.append(each)
                #print(each)
        #下载并保存图片
        folder = 'OOXX'
        os.mkdir(folder)
        os.chdir(folder)        
        save(folder, list_1)
    
    if __name__ == '__main__':
        test1()

    结果展示
    这里写图片描述

    五、总结

    有福利才有学习的动力,努力学习为了更多的福利^_^

    顺便打波小广告:I love fishc.com
    这篇教程参考小甲鱼零基础入门学习python
    欢迎来鱼c论坛学习^_^

  • 相关阅读:
    在App_Data中创建数据库获取连接串简便方法!
    ObjectDataSource配合存储过程(采用数据集)的使用(删除可以解决,但是编辑出错好像它的方法也无法解决
    金鹰dreamweaver视频教程下载地址
    ASP.NET里创建Microsoft Word文档
    net3:Calendar控件的使用
    vs2005做的留言本——天轰川下载
    Wiley出版 SQL Server 2005宝典
    ADO:防止更新的数据含有单引号而出错
    用 Bitcron 搭博客:你只管写作,它负责呈现
    如何去掉Myeclipse对JS等文件的验证
  • 原文地址:https://www.cnblogs.com/Undo-self-blog/p/7467813.html
Copyright © 2011-2022 走看看