鱼C论坛

 找回密码
 立即注册
查看: 971|回复: 1

[作品展示] 爬虫煎蛋的无聊图

[复制链接]
发表于 2020-4-16 03:48:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 麻麦皮 于 2020-4-24 21:49 编辑

学习了小甲鱼爬虫OOXX,由于年代久远,爬取煎蛋有一定的变化。不过煎蛋的妹子图被和谐了,变成了随手拍,那么我就随便爬取隔壁的无聊图吧。
提供给看视频看到爬虫篇想爬煎蛋的同学。
暴力观察煎蛋图网址,发现页数和网址的变化有以下规律
#煎蛋网无聊图网址:'http://jandan.net/pic/MjAyMDA0MTUtM'+list0+list1+list2+'#comments'
list0 = ['D', 'T', 'j', 'z']
list1 = ['A', 'E', 'I', 'M', 'Q', 'U', 'Y', 'c', 'g', 'k']
list2 = ['w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5']
#例如页数为197,那么197的1为list0[1],197的9为list1[9],197的7为list2[7],那么页数197的网址为http://jandan.net/pic/MjAyMDA0MTUtMTk3#comments
新用户上传不了图片...
既然如此,那么就动手吧
import urllib.request
import os

list0 = ['D', 'T', 'j', 'z']
list1 = ['A', 'E', 'I', 'M', 'Q', 'U', 'Y', 'c', 'g', 'k']
list2 = ['w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5']

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36')

    response = urllib.request.urlopen(req)
    html = response.read()

    #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)
    
    #print(html[a: b])   #测试用

    return html[a: b]

def find_imgs(url):
    html = url_open(url).decode('utf-8')
    img_addrs = []

    a = html.find('img src=')
    while a != -1:
        b = html.find('.jpg', a, a+255)
        if b != -1:
            img_addrs.append('http:' + html[a + 9: b + 4])        #Chrome会屏蔽http,自己加上
        else:
            b = a + 9
        a = html.find('img src=', b)

    #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]
        with open(filename, 'wb') as f:
            img = url_open(each)
            f.write(img)

def download(folder = 'pic', start = 0, pages = 10):    #新增功能开始爬的页数,注意爬取顺序是从后往前爬
    os.mkdir(folder)
    os.chdir(folder)
    
    url='http://jandan.net/pic/'

    if start<pages:
        return '错误,爬取页数太多'
    elif start>0:
        page_num = int(start)
    else:
        page_num = int(get_page(url))

    for i in range(pages):
        page_num -= i
        page_url = url+'MjAyMDA0MTUtM' + str(list0[page_num//100%10%4]) + str(list1[page_num//10%10]) + str(list2[page_num%10]) + '#comments'        #取百位数字+取十位数字+取个位数字
        img_addrs = find_imgs(page_url)
        save_imgs(folder, img_addrs)
运行起来,输入download(),默认爬取最新页数往前的10页。
输入download(start=50,pages=3),爬取50、49、48页。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 12:40:11 | 显示全部楼层
厉害 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 12:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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