只用一个域名搭建博客网站

原创
2018/10/11 17:20
阅读数 152

前提

其实就是为了看妹子看美女,好吧,废话不多说直接进入主题

用到的东西

  • python: 用来捉取数据及整理数据的
  • php: 搭建管理后台
  • mysql: 储存数据
  • hexo: 生成静态博客文件
  • coding.net/腾讯云开发者平台: 静态博客文件托管
  • 阿里云: 域名注册及管理

分4个步骤

  1. 采集数据
  2. 整理数据
  3. 生成文件
  4. 上传文件

1.采集数据

1.获取uid

首先得搞到uid,这是数据之源泉。其实很简单,根据微博主页的地址 https://m.weibo.cn/u/5710240012 就可以得到uid为5710240012了。这里以路客文化为例,是的,我很喜欢他的街拍风格!

2.爬取微博内容并入库

爬取用户信息,获得用户微博的containerid,随便把信息入库,后面做博客会用到。根据 http://m.weibo.cn/api/container/getIndex?type=uid&value=5710240012 地址就可以获取用户信息了,是一个json格式的文件,解析一下就可以获取微博的containerid值。这里定义了一个获取用户信息的方法,里面包含containerid值。

def get_user_info(uid, cookie):
    url = 'http://m.weibo.cn/api/container/getIndex?type=uid&value={uid}'.format(uid=uid)
    resp = requests.get(url,cookies=cookie)
    jsondata = resp.json().get('data')
    nickname = jsondata.get('userInfo').get('screen_name')
    mlog_num =  jsondata.get('userInfo').get('statuses_count')
    verified = jsondata.get('userInfo').get('verified')
    verified_reason = jsondata.get('userInfo').get('verified_reason')
    descreption = jsondata.get('userInfo').get('description')
    gender = jsondata.get('userInfo').get('gender')
    urank = jsondata.get('userInfo').get('urank')
    mbrank = jsondata.get('userInfo').get('mbrank')
    followers_counts = jsondata.get('userInfo').get('followers_count')
    follow_counts = jsondata.get('userInfo').get('follow_count')

    try:
        uid = jsondata.get('userInfo').get('toolbar_menus')[0].get('params').get('uid')
        fid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('fid')
        oid = jsondata.get('userInfo').get('toolbar_menus')[2].get('params').get('menu_list')[0].get('actionlog').get('oid')
        cardid = jsondata.get('userInfo').get('toolbar_menus')[1].get('actionlog').get('cardid')

    except:
        uid = ''
        fid = ''
        oid = ''
        cardid = ''
    containerid = jsondata.get('tabsInfo').get('tabs')[1].get('containerid')
    user_info = {'nickname':nickname,'mlog_num':mlog_num,'verified':verified,'verified_reason':verified_reason,
                'gender':gender,'urank':urank,'mbrank':mbrank,'followers_count':followers_counts,
                'follow_count':follow_counts,'uid':uid,'fid':fid,
                'cardid':cardid,'containerid':containerid,'oid':oid,'desc':descreption}
    # print(user_info)
    return user_info

通过 https://m.weibo.cn/api/container/getIndex?filter=1&type=uid&value={uid}&containerid={containerid}&page={page}.format(uid=uid,containerid=containerid,page=page) 爬取微博内容,解析json文件获得pics值,同时入库。pics就是图片地址重点是可以外链的,如果不能哪么剩下的都是扯淡。

def download(uid, containerid):
    reload(sys) 
    sys.setdefaultencoding('utf-8')

    #page = 476 
    page = 0
    times = 10 #每下载10页停止
    temp = 1
    flag = 0
    while True:
        # time.sleep(20)
        temp += 1
        if temp == times:
            temp = 1
            ticks = time.time()
            print u'正在进行停顿,防止访问次数过多', ticks
            time.sleep(10)

        #当有十条数据重复则退出循环
        if(flag>=10):
            print u'重复,退出'
            break
        flag = 0
        page += 1
        print u'page=', page
        url = 'https://m.weibo.cn/api/container/getIndex?filter=1&type=uid&value={uid}&containerid={containerid}&page={page}'.format(uid=uid,containerid=containerid,page=page)
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3088.4 Safari/537.36'}
        resp = requests.get(url, headers=headers)
        resp.encoding = 'utf-8'
        jsondata = resp.json().get('data')
        cards = jsondata.get('cards')
        if(len(cards)>0):
            for j in range(len(cards)):
                card_type = cards[j].get('card_type')
                scheme = cards[j].get('scheme')
                if(card_type==9):
                    mblog=cards[j].get('mblog')
                    pid=mblog.get('id')

                    #判断数据是否存在
                    if(weibodb.checkExit(pid)):
                        print pid
                        flag = flag + 1
                    else:
                        created_at=mblog.get('created_at')
                        orgin_text=mblog.get('text')
                        textLength=mblog.get('textLength')
                        orgin_text = orgin_text.replace('\'','\\\'')
                        reposts_count=mblog.get('reposts_count')
                        comments_count=mblog.get('comments_count')
                        attitudes_count=mblog.get('attitudes_count')

                        pics = mblog.get('pics')
                        picsc = 0
                        if(pics):
                            picsc = len(pics)
                        #微博数据入库
                        weibodb.ins(uid, scheme, orgin_text, pid, created_at, textLength, reposts_count, comments_count, attitudes_count, picsc)
                        
                        if(pics):
                            for k in range(len(pics)):
                                _url=pics[k].get('large').get('url')
                                _name=pics[k].get('pid')
                                _murl=pics[k].get('url')
                                _mwidth=pics[k].get('geo').get('width')
                                _mheight=pics[k].get('geo').get('height')
                                _width=pics[k].get('large').get('geo').get('width')
                                _height=pics[k].get('large').get('geo').get('height')
                                _croped=pics[k].get('large').get('geo').get('croped')
                                #图片数据入库
                                weibodb.insPics(pid, _url, _name, _width, _height, uid, _croped, _murl, _mwidth, _mheight)
            #更新创建时间
            weibodb.updCt()
        else:
            break;

2.整理数据

虽然捉取程序已经过滤了大部分没有的数据,不过个别数据还是需要人工过滤一下的。这里我用php搭建了一个简单的后台管理程序,把哪些不合格的数据人工过滤掉。

3.生成文件

前提假设你已经安装了hexo,hexo是什么?可以参考这里。那么剩下来就是生成hexo格式的markdown文件了。我是比较懒了,直接在代码里面生成文件,你也可以自己写个模板然后替换模板里面的变量生成。我把文件生成在 /你的博客/source/_posts 目录下面。cd到 /你的博客 目录运行 hexo g 命令生成html,生成的html会放在public目录下,这里也是静态博客的所有文件。

def main():
    start='2018-09-06'
    end='2018-09-06'
    #start=sys.argv[1]
    #end=sys.argv[2]
    datestart=datetime.datetime.strptime(start,'%Y-%m-%d')
    dateend=datetime.datetime.strptime(end,'%Y-%m-%d')
    
    while datestart<=dateend:
        dt = datestart.strftime('%Y-%m-%d')
        print dt
        results = weibodb.getUserList(dt)
        title = "「街拍」"+dt
        tags = '街拍'
        content = ''
        jiepais = ''
        ls = ''
        i = 0
        for row in results:
            profile_url = row.get('profile_url')
            screen_name = row.get('screen_name')
            #ls += "<em><a href='"+row.get('profile_url')+"'>@" + row.get('screen_name') + "</a> </em>"
            uid = row.get('uid')
            jiepais = weibodb.getJiepaiByUidDt(uid, dt)
            content += "#### "+screen_name+"\n"
            for jiepai in jiepais:
                pid = str(jiepai.get('pid'))
                pics = weibodb.getPicsByPid(pid)
                orgin_text = jiepai.get('orgin_text')
                dr = re.compile(r'<[^>]+>',re.S)
                dd = dr.sub('',orgin_text)
                content += "##### "+dd+"\n"
                # content += u"##### ["+dd+"]("+jiepai.get('url')+")"+"\n\n"
                # content += ""+dd+"\n"
                for pic in pics:
                    murl =  pic.get('murl').replace('orj360','mw690')
                    lurl =  pic.get('murl').replace('orj360','large')
                    content += '<a data-fancybox="gallery" href="'+lurl+'"><img src="'+murl+'"></a>'
                    i += 1
                # content += u"["+dd+"]("+jiepai.get('url')+") [@"+screen_name+"]("+profile_url+") "+"\n\n"
                content += u"[查看来源]("+jiepai.get('url')+")  [@"+screen_name+"]("+profile_url+") "+"\n"
        content += ls
        build(dt, title, tags, content.encode('utf8'))
        datestart+=datetime.timedelta(days=1)
def build(dt, title, tags, content):
    f = open("xxxx/jiepai/source/_posts/"+dt+".md","w")
    f.write('---\n')
    f.write('title: '+title+'\n')
    f.write('date: '+dt+' 00:00:00\n')
    f.write('categories: 街拍\n')
    f.write('tags: ['+tags+']\n')
    f.write('---\n')
    f.write(content)
    f.close

4.上传文件

经过上面的步骤,如果你有自己的服务器直接把public目录下的文件放到你的服务器就完成了。如果你要上传到Coding,哪么更简单hexo配置好后可以直接 hexo d 命令就完成了。 如何使用hexo,如何注册Coding,如何建立静态Pages应用,如何注册域名,如何把域名绑定到Coding Pages,我觉得已经有好多文章介绍了,我也不想写了......

后记

完成后大概是这样。喜欢街拍还是去博主哪里点赞,支持原创,谢谢。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部