鱼C论坛

 找回密码
 立即注册
查看: 2100|回复: 3

[技术交流] 056轮一只爬虫的自我修养4:OOXX

[复制链接]
发表于 2017-9-4 20:55:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
全部自己手打的~
觉得喜欢的话关注哟,礼物送一波~~
不要做伸手党哦!
大家继续努力~

import urllib.request
import os
#import random

def url_open(url):       #模块化方便后面调用
    req = urllib.request.Request(url) #便于添加文件头
    req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
#User-Agent是检查人类和代码的关键
    '''
    proxies = []
    proxy = random.choice(proxies)
    proxy_support = urllib.request.Proxyhandler
    opener = urllib.request.build_opener(proxy_support)
    proxy_opener = urllib.request.build_opener(proxy_support)
    urllib.request.install_opener(opener)
    '''
#使用代理下载的图片都不是美眉
    
    response = urllib.request.urlopen(url)
    html = response.read()    #这边不解码成utf-8,保存图片是二进制,utf-8是人看的


#打开网页的时候404,所以测试一下
    #print(url)
    #print(html)
    return html

    
def get_page(url):    #获取页码数
    html = url_open(url).decode('utf-8')
    a = html.find('current-comment-page') + 23  #偏移距离,正好到数字的位置

    b= html.find(']',a)   #】有很多,起始位置是a开始

    return (html[a:b])     #从a到b的位数区间,就是页码数
    
def find_imgs(url):   #找到图片的下载地址
    html = url_open(url).decode('utf-8')
    img_addrs = [] #列表

    a = html.find('img src=')

    while a != -1:   #找得到a的话
        b=html.find('.jpg',a,a+255)  #找不到会返回值-1,-1就是找不到
#找到的关键字,从哪里开始,字符长度多长
        if b != -1:           #如果找到b了。就加入到下载地址
            img_addrs.append('http:' + html[a+9:b+4])  #网页的开头和结束 #并且缺了http:
        else:
            b = a + 9       #找不到b的话,b的地址也要改变
        a = html.find('img src=',b)     #a每次都会改变,下一张图片 

    
    #for each in img_addrs:   #打印出网址
        #print(each)
    return img_addrs 


def  save_imgs(folder,img_addrs):
    for each in img_addrs:
        filename = each.split('/')[-1]   #按斜杠分割,分成若干列表,-1就是最后一个斜杠的列表
        with open(filename,'wb') as f:
            img = url_open(each)   #url_open就是二进制read(),每个图片下载地址的二进制
            f.write(img)    #写入二进制保存成图片

def download_mm(folder='ooxx',pages=10):    #主函数
    os.mkdir(folder)    #创建文件夹
    os.chdir(folder)    #操作文件夹,工作目录。保存的位置

    url = 'http://jandan.net/ooxx'  
    page_num = int(get_page(url))      #取到最新页码,用模块的思想,调用函数

    for i in range(pages):        #i从pege到最新页
        page_num -= i      #从最新到第一页
        page_url = url + '/page-' +str(page_num) + '#comments'
#每一页的网址
        img_addrs = find_imgs(page_url)   #每一页里面去找图片地址,模块化思想,调用函数
        save_imgs(folder,img_addrs)      #保存图片到文件夹,模块化思想


if __name__ == '__main__':   #如果在主程序里调用 name = main。如果在主函数调用的意思
    download_mm()

        
    
    
    

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-4 21:03:23 | 显示全部楼层
I:\B学习\Python全套教程\练习作业\ooxx\5dbc315dly1fj6nh6w8iuj20hs0gymy6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-4 21:04:05 | 显示全部楼层
file:///I:/B学习/Python全套教程/练习作业/ooxx/5dbc315dly1fj6nh6w8iuj20hs0gymy6.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 22:21:24 | 显示全部楼层
66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 05:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表