爬取随手拍的图片(包含了解密与加密)

1.:对于URL上,因为时过境迁,网页的url的规律也发生了变化,现在是这样的(当然现在这个网站已经是正规网站了哈哈哈哈):

随手拍 (jandan.net)http://i.jandan.net/ooxx/MjAyMjA0MjUtMTc=#comments

后缀中的 MjAyMjA0MjUtMTc=是加密后的字符串,因此要通过base64进行解密,解密后发现这些字符串代表的是:当天的年月日-页号,如前面的字符串就是:20220425-17

我处理上面的方法就是引用time模块,获取今天的年月日,组合成符合要求的字符串(因为这个网页的url是根据每一天的日期的不同而改变的,为了保证代码的时效性,获取日期更符合,如果只是试一下,则可以直接输入今天的年月日去爬取)

2.第二点:在爬取照片的链接的时候,爬取的字符串没有前缀“http:”,这个是需要自己去发现的,然后自己拼接后就可以成功了

最后亮代码:

# coding:utf-8
import urllib.request
import os
import time
import base64

#解密
def change_string(string):
    string1=base64.b64decode(string).decode()
    # print(string1)
    return string1
#加密
def add_secret(string):
    string2=base64.b64encode(string.encode()).decode()
    # print(string2)
    return string2
#获取时间
def get_time():
    t1=time.localtime()
    if len(str(t1.tm_mon))==1:
        month='0'+str(t1.tm_mon)
    else:
        month=str(t1.tm_mon)
    if len(str(t1.tm_mday))==1:
        mday='0'+str(t1.tm_mday)
    else:
        mday=str(t1.tm_mday)
    year=str(t1.tm_year)
    time_string=year+month+mday
    return time_string

#打开url
def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('user-agent',
                   'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50')
    response = urllib.request.urlopen(url)
    html = response.read()
    # print(url)
    return html
#获取最大的页数
def get_page(url):
    html=url_open(url).decode('utf-8')
    a=html.find('current-comment-page')+23
    b=html.find(']',a)
    return html[a:b]

#获取url中的加密字符串
def get_timestring(page):
    time=get_time()
    page=time+'-' + str(page)
    page=add_secret(page)
    return page
#寻找网页中图片
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])
        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_cc(folder='OOXX',pages=10):
    os.mkdir(folder)
    os.chdir(folder)

    url='http://i.jandan.net/ooxx/'
    page_num=int(get_page(url))

    for i in range(pages):
        page_num-=i
        page_url=url+get_timestring(page_num)+'#comments'
        print(page_url)
        img_addrs=find_imgs(page_url)
        save_imgs(folder,img_addrs)

if __name__=='__main__':
    download_cc()

然后亮亮我的爬取的照片(哈哈哈哈):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小宸

多给作者一点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值