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论坛学习^_^

原文地址:https://www.cnblogs.com/Undo-self-blog/p/7467813.html