文档章节

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

samsamdif
 samsamdif
发布于 2018/10/11 17:20
字数 1544
阅读 11
收藏 0

前提

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

用到的东西

  • 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,我觉得已经有好多文章介绍了,我也不想写了......

后记

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

© 著作权归作者所有

共有 人打赏支持
samsamdif
粉丝 6
博文 20
码字总数 7852
作品 0
广州
高级程序员
私信 提问
网站域名、备案、七牛云图床重新搭建与博客整理

最近碰上了一个问题,七牛云开始回收测试域名,结果导致我的图床有些失灵、一些软件资源都无法下载。其实这个问题在前一段不蒜子统计修改的博客里已经有兆头了。不过当时没注意。最后还是被逼...

胖胖雕
2018/12/05
0
0
最简单的建站教程:使用虚拟主机搭建WordPress个人网站

前言 已经介绍过了如何使用 VPS 搭建 WordPress 和 Typecho 网站博客的方法。见: WordPress搭建教程:手把手教你搭建WordPress博客 30分钟搭建 Typecho 个人博客 虽然使用了宝塔面板,比起纯...

己立
2018/10/07
0
0
手把手教你基于WordPress搭建自己的个人博客

一步一步教你基于WordPress搭建自己的个人博客,WordPress作为成熟的CMS框架,美观,方便,插件多,更新频繁,非常适合个人博客与网站的搭建,适合新手,无需太多的代码基础。 原文链接:手把...

flyzy2005
2018/01/29
0
0
Hexo+Github搭建个人博客(二)——配置&主题

  在上一篇博客 Hexo+Github搭建个人博客(一)——开始搭建中介绍了如何安装git、hexo以及将文件推送到github上,相信看到这篇博客的时候你已经有了一个漂亮的博客。这篇博客主要介绍如何发...

BrightLoong
2017/02/28
0
0
docker进阶 一键安装wordpress

安装环境: centos 7 准备工作: 安装docker和docker-compose 最近想把闲置的域名使用起来, 于是想搭建个人博客,也为简书的博客留个副本,本来想通过hexo在GitHub托管静态博客, 后来发现静态博客...

木子昭
2018/07/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lua中.和:的区别

lua中.和:都可以用于方法的声明和调用。和table配合使用。 :和.最大的不同点,就是:会把调用者自身,传入到函数中。 如下代码: c = {a=1,b=2}function c:foo1()print(self.a,self.b)...

乐_然
8分钟前
0
0
CentOS7 NTP客户端和服务器安装和使用

本文测试环境如下: [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@localhost ~]# [root@localhost ~]# yum install ntp#等待安装完成......

白豆腐徐长卿
19分钟前
6
0
Tensorflow源码解析3 -- TensorFlow核心对象 - Graph

1 Graph概述 计算图Graph是TensorFlow的核心对象,TensorFlow的运行流程基本都是围绕它进行的。包括图的构建、传递、剪枝、按worker分裂、按设备二次分裂、执行、注销等。因此理解计算图Gra...

阿里云官方博客
24分钟前
2
0
网站加载不了 图片

公司测试环境,某网站图片加载不了 nginx 配置 server { listen 80;listen 443 ssl;charset utf-8;root /var/www/html/ad-server; index index.html index.htm...

Linux_Anna
26分钟前
0
0
亿级曝光品牌视频的幕后设定

本文由云+社区发表 作者:腾讯ISUX 项目背景 2019年春节期间,QQ红包运营活动进行了全新改版,将卡券福利、现金奖励打包成福袋形式,并通过年俗小游戏及共享福袋的玩法吸引更多用户参与。在点...

腾讯云加社区
28分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部