用python處理微博JSON數(shù)據(jù)范例

前言


簡(jiǎn)單介紹一下這個(gè)項(xiàng)目.
我旨在分析中國(guó)微博用戶對(duì)不同國(guó)家新聞&信息的關(guān)注程度來(lái)了解民間方向上的我國(guó)國(guó)際關(guān)系: 中國(guó)網(wǎng)民是如何看待全世界其他國(guó)家的尚揣,關(guān)注點(diǎn)在哪里.
同時(shí)用獲得的數(shù)據(jù)制作一個(gè)可交互的可視化微博分析結(jié)果.

所以我以193個(gè)聯(lián)合國(guó)會(huì)員國(guó)加兩個(gè)聯(lián)合國(guó)觀察員國(guó):梵蒂岡,巴勒斯坦,
去掉中國(guó)后的一共194個(gè)國(guó)家為查詢列表.
(基于個(gè)人興趣我在列表中也加入了“臺(tái)灣”為關(guān)鍵詞嘹锁,但是當(dāng)然把臺(tái)灣認(rèn)定為一個(gè)獨(dú)立國(guó)家并不是正確的,所以我并不會(huì)在論文和可視化過(guò)程中用到來(lái)自臺(tái)灣的數(shù)據(jù))
寫(xiě)了一個(gè)非常簡(jiǎn)單的小爬蟲(chóng),通過(guò)通過(guò)移動(dòng)版微博搜索微博功能爬取按照這個(gè)國(guó)家列表查詢到的微博.
這一部分的細(xì)節(jié)我以后再在單獨(dú)的文章中寫(xiě),這里重點(diǎn)記錄一下當(dāng)成功建立request持續(xù)鏈接后磨德,要如何來(lái)處理這些源源不斷寫(xiě)下的微博原始數(shù)據(jù).

What I got


已獲取的微博JSON數(shù)據(jù)按照request發(fā)起的日期分別存在相應(yīng)的文件夾內(nèi)部。WBTestdata>04-12.

微博數(shù)據(jù)文件夾

每一頁(yè)JSON包含十條微博數(shù)據(jù)(一般情況)吆视,將每次返回的JSON單調(diào)存在一個(gè)txt里剖张,命名規(guī)則為“國(guó)家名”+“日期”+“頁(yè)碼”.
微博數(shù)據(jù)命名規(guī)則

可以使用在線JSON結(jié)構(gòu)化工具進(jìn)行審查。
JSON數(shù)據(jù)結(jié)構(gòu)

載入數(shù)據(jù)


因?yàn)槲业臄?shù)據(jù)是包含日期的揩环,這就使得我可以載入指定日期內(nèi)的數(shù)據(jù).
為此搔弄,我先寫(xiě)了一個(gè)根據(jù)給出起始日期生成日期列表的方法:

def creat_date_list(month,i,j):
    dates = []
    for n in range(i,j):
        date = month + "-" +str(n).zfill(2)
        dates.append(date)
    return dates

在調(diào)用的時(shí)候例如dateList = creat_date_list("04",27,28)就會(huì)產(chǎn)生只有一個(gè)值的列表.
然后,按照l(shuí)ist的內(nèi)容生成文件夾地址丰滑,檢查此文件夾是否存在顾犹,如果存在則可以進(jìn)行下一步的文件遍歷了.

for date in dateList:
    thisDate = date
    datapath = "../WBTestdata/" + thisDate + "/"
    if os.path.exists(datapath):
        print "got data"
    else:
        print "Did not find this day′s data, next day!!"
        time.sleep(5)
        continue

當(dāng)準(zhǔn)確獲取到存放微博元數(shù)據(jù)的文件夾路徑了以后,我們面對(duì)的是上百個(gè)txt.
遍歷它們褒墨,提取我想要的那幾個(gè)屬性內(nèi)容炫刷,再按照一定的規(guī)則寫(xiě)入新的txt.
數(shù)據(jù)量在提取過(guò)后必然會(huì)變得小很多,那我希望將某一天request到的所有微博寫(xiě)入一個(gè)新的郁妈,單一的浑玛,以當(dāng)天日期命名的txt.
所以,我的輸出路徑和文件名就很好規(guī)劃了噩咪,我將輸出數(shù)據(jù)存放在一個(gè)叫做WBDatabase的文件夾內(nèi)顾彰,因?yàn)槟壳暗妮敵鰐xt數(shù)據(jù)是根據(jù)日期命名和分割的,所以再丟進(jìn)一個(gè)叫time的文件夾:

outputPath = "../WBDatabase/time/"
    if not os.path.exists(outputPath):
        os.mkdir(outputPath)
    outputFile = outputPath + thisDate + ".txt"
    with open(outputFile, "a") as output:
        output.write("\n")

在這里胃碾,我在文件開(kāi)頭的第一行寫(xiě)了一個(gè)換行符是因?yàn)楫?dāng)載入txt文件進(jìn)MYSQL數(shù)據(jù)庫(kù)的時(shí)候涨享,第一行出現(xiàn)了一些無(wú)法識(shí)別數(shù)據(jù)的錯(cuò)誤,所以我將這一行空出仆百,再在數(shù)據(jù)導(dǎo)入后從數(shù)據(jù)庫(kù)中刪掉這一空白行.

接下來(lái)回到剛說(shuō)的遍歷文件夾.
os.walk(datapath)方法可以實(shí)現(xiàn)快速的文件夾內(nèi)部遍歷.
在這里通過(guò)文件名獲取到的thisCountry就是我們本條微博的keyword.
注意厕隧,中文的編碼轉(zhuǎn)換非常復(fù)雜,需要仔細(xì)耐心.

list_dirs = os.walk(datapath)
    for root, dirs, files in list_dirs:
        for f in files:
            filename = f.decode("gbk").encode("UTF-8")
            thisfilepath = datapath + filename.decode("UTF-8")
            thisCountry = filename.split(thisDate)[0].decode("UTF-8")

通過(guò)遍歷文件夾獲取到文件名后俄周,就可以打開(kāi)指定的txt文件進(jìn)行JSON裝載了.

with codecs.open(thisfilepath, "r", "utf-8") as thisfile:
        content = thisfile.read()
        thisdata = json.loads(content)

裝載完JSON吁讨,接下來(lái)即可進(jìn)行微博相關(guān)數(shù)據(jù)的提取.

微博數(shù)據(jù)提取思路


JSON結(jié)構(gòu)非常清楚,我覺(jué)得有用的微博屬性:

  • 數(shù)據(jù)微博ID
  • 微博創(chuàng)建時(shí)間
  • 微博轉(zhuǎn)發(fā)數(shù)
  • 微博發(fā)布平臺(tái)
  • 微博用戶名
  • 微博用戶ID
  • 微博用戶性別
  • 微博用戶粉絲數(shù)
  • 微博內(nèi)容

分別可以用以下代碼來(lái)表示和提取.

itemID = str(thisdata['cards'][0]['card_group'][i]['mblog']['id'])
itemCreat = thisdata['cards'][0]['card_group'][i]['mblog']['created_at'].encode("UTF-8")
itemRepostCount = str(thisdata['cards'][0]['card_group'][i]['mblog']['reposts_count'])
itemSource = puncfilter(thisdata['cards'][0]['card_group'][i]['mblog']['source'])
itemUser = thisdata['cards'][0]['card_group'][i]['mblog']['user']['screen_name']
itemUserID = str(thisdata['cards'][0]['card_group'][i]['mblog']['user']['id'])
itemUserGender = str(thisdata['cards'][0]['card_group'][i]['mblog']['user']['gender'])
itemUserFollower = str(thisdata['cards'][0]['card_group'][i]['mblog']['user']['followers_count'])
itemText = thisdata['cards'][0]['card_group'][i]['mblog']['text']

提取了以上信息以后峦朗,還要對(duì)對(duì)微博文本進(jìn)行關(guān)鍵詞條的Tag提取建丧。此處將會(huì)用到結(jié)巴分詞.

前面提到了,為了導(dǎo)入MYSQL方便甚垦,但同時(shí)又保留原數(shù)據(jù)茶鹃,我將會(huì)把每一條微博提取到的相關(guān)數(shù)據(jù)組成一行,存在新的以日期命名的txt中.
每一行艰亮,既每一條微博闭翩,其每一個(gè)屬性間用tab分割(MYSQL導(dǎo)入時(shí)將以\t為分隔符),最后的tag屬性我取了5個(gè)詞迄埃,用空格區(qū)分.

0       Staunch17   5985880084  123 f   在愛(ài)的國(guó)度疗韵,我唯一愛(ài)的,就是你致敬不丹侄非,這是一個(gè)充滿幸福感的國(guó)家 ?   幸福感 國(guó)度 不丹 致敬 充滿

相應(yīng)的MYSQL數(shù)據(jù)表創(chuàng)建語(yǔ)句則為:

CREATE TABLE wbdata (   
    creat_at DATETIME NOT NULL,
    keyword VARCHAR(30) NOT NULL,
    wid BIGINT NOT NULL,
    repost INT NOT NULL,
    platform CHAR(35) ,
    user CHAR(45) NOT NULL,
    uid INT NOT NULL,
    follower INT NOT NULL,
    gender VARCHAR(2),
    text VARCHAR(500),
    tags VARCHAR(500)

) character set = utf8mb4 COLLATE = utf8mb4_unicode_ci;

keyword屬性即是前面獲取到的thisCountry國(guó)家名.

數(shù)據(jù)過(guò)濾細(xì)節(jié)


在思路清晰了以后就可以著手于細(xì)節(jié)的處理了蕉汪。
這里我們有以下幾個(gè)問(wèn)題需要進(jìn)行處理,

  1. 每條微博的創(chuàng)建時(shí)間需要由訪問(wèn)時(shí)間來(lái)進(jìn)行推算并進(jìn)行統(tǒng)一化
  2. 微博中可能出現(xiàn)HTML標(biāo)簽逞怨,換行標(biāo)簽等需要進(jìn)行摘除
  3. 微博文本中出現(xiàn)的大量表情符號(hào)需要被初步過(guò)濾
  4. 微博出現(xiàn)的多人連續(xù)@需要剔除
  5. 微博發(fā)布平臺(tái)信息也包含用戶自定義數(shù)據(jù)者疤,需要規(guī)范化

時(shí)間格式轉(zhuǎn)換

對(duì)于第一個(gè)問(wèn)題,當(dāng)知道本次request的時(shí)間戳以后叠赦,就可以通過(guò)換算得到每一條微博創(chuàng)建的時(shí)間了.
本次request的時(shí)間戳在JSON里的位置為:

thisdata['cardlistInfo']['starttime']

對(duì)于元數(shù)據(jù)中creat_at屬性驹马,值一般為三種結(jié)構(gòu):“04-16 20:00”, “3分鐘前”除秀, “今天 20:00”.
標(biāo)準(zhǔn)時(shí)間格式還應(yīng)當(dāng)有秒糯累,所以在處理的時(shí)候應(yīng)當(dāng)加入缺失部分默認(rèn)為00秒.
在這里要注意一下,localtime轉(zhuǎn)換默認(rèn)跟著計(jì)算機(jī)時(shí)間走册踩,因?yàn)槲也辉趪?guó)內(nèi)泳姐,所以時(shí)區(qū)不一樣,算出來(lái)的微博發(fā)布時(shí)間錯(cuò)了6個(gè)小時(shí)暂吉,沒(méi)有什么轉(zhuǎn)換時(shí)區(qū)的好辦法胖秒,我就直接把我電腦系統(tǒng)的默認(rèn)時(shí)區(qū)調(diào)成了中國(guó)時(shí)間.
但是理論上哪怕錯(cuò)了6個(gè)小時(shí)也影響不大,因?yàn)槲业拿咳諢狳c(diǎn)分析統(tǒng)計(jì)以及后面的可視化都應(yīng)當(dāng)是按照天為單位的.

def process_time(input, starttime):
    if "今天" in input:
        thisStartTime = time.localtime(float(starttime))
        otherStyleTime = str(time.strftime("%Y-%m-%d", thisStartTime))
        creatTime = otherStyleTime + " " + input.split(" ")[1]+":00"
        return creatTime
    elif "分鐘前" in input:
        creatTime = 60 * float(input.strip("分鐘前"))
        thisStartTime = time.localtime(float(starttime) - creatTime)
        otherStyleTime = str(time.strftime("%Y-%m-%d %H:%M:%S", thisStartTime))
        return otherStyleTime
    else:
        return "2017-"+input+":00"

文本中HTML標(biāo)簽去除

初步提取的微博文本包含HTML標(biāo)簽.

包含HTML的微博文本

需要進(jìn)行再次提取.
這里用到Beautifulsoup.
它是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫(kù).
以下代碼可以把輸入元文本中的所有tag里的內(nèi)容提取出來(lái)并跳過(guò)空白行慕的,輸出形式為列表.
但是當(dāng)然實(shí)現(xiàn)辦法有很多扒怖,B4S提供了許多其他可能的方式.

from bs4 import BeautifulSoup

soup = BeautifulSoup(itemText, "html.parser")
itemTextPretty = ""
for string in soup.stripped_strings:
     itemTextPretty += string

然后是去掉文本中的URL和連續(xù)@.
兩個(gè)簡(jiǎn)單的小方法來(lái)實(shí)現(xiàn).

itemTextPretty = removepeople(itemTextPretty)
itemTextPretty = removeurl(itemTextPretty)
def removeurl(urlline):
    results = re.compile(r'http://[a-zA-Z0-9.?/&=:]*', re.S)
    dd = results.sub("", urlline)
    return dd

def removepeople(peopleline):
    pattern = peopleline.split("http://@")
    outputline = ""
    for name in pattern:
        name = name.split(":")[-1]
        outputline += name
    return outputline

接下來(lái)是粗步過(guò)濾掉一些標(biāo)點(diǎn)符號(hào).

def puncfilter(line):  
    r1 = u'[’!"#$%&\'()*+,-./:;<=>?@;业稼;:.|~\≧▽—°?×????????▲?♀?●巜「」?/↓→<=>?@??ω★?????????·盗痒、…★、?…【】《》『』()低散?“”‘’俯邓![\\]^_`{|}~]+'
    return re.sub(r1, '', line)

過(guò)濾完以后就可以進(jìn)行結(jié)巴分詞的Tag提取了:
在這里topk=5規(guī)定了提取重要性前五的單詞.
因?yàn)榻Y(jié)巴分詞方法返回的是一連串tupe,每一個(gè)tupe里的第一位為詞語(yǔ)熔号,第二位為重要值稽鞭,我只需要詞,所以用for方法提取引镊,賦值給extracline以空格分割.

extract = jieba.analyse.extract_tags(itemTextP, topK=5, withWeight=True, allowPOS=())
extractline = ""
for word in extract:
    co = word[0]
    extractline = extractline + " " + co

微博發(fā)布平臺(tái)的規(guī)范化

那么朦蕴,除了微博文本要進(jìn)行符號(hào)過(guò)濾之外篮条,用戶發(fā)布平臺(tái)也需要,因?yàn)槲⒉┯脩艨梢宰约盒薷陌l(fā)布平臺(tái)的原因吩抓,收集到的很多平臺(tái)信息為累贅信息:

微博發(fā)布平臺(tái)中的累贅信息

我要去除這些用戶自定義的部分涉茧,對(duì)于iphone用戶,我直接建了張型號(hào)表進(jìn)行匹配疹娶。
而對(duì)于像是紅米這樣的情況伴栓,為了便于后期統(tǒng)計(jì),我加入小米前綴雨饺,同理還有魅藍(lán)钳垮,加入魅族前綴,榮耀加入華為前綴额港。
但是當(dāng)然饺窿,能兼顧到的也只是大部分用戶而已,過(guò)于小眾的一些手機(jī)的某些型號(hào)則無(wú)法做到百分百的規(guī)范化移斩。

def platformUni(platform):
    if 'iPhone' in platform:
        iphonelist =[ "iPhone 5s", "iPhone 5c", "iPhone 5",  "iPhone 6 Plus", "iPhone 6s Plus", "iPhone 6s","iPhone 6", "iPhone 7 Plus", "iPhone 7","iPhone SE", "iPhone"]
        for phone in iphonelist:
            if phone in platform:
                new = phone
                return new
        # new = "iPhone" + platform.split('iPhone')[1]
    elif 'iOS' in platform:
        new = "iPhone"
        return new
    elif 'Android' in platform:
        new = "Android" + platform.split('Android')[1]
        return new
    elif 'iPad' in platform:
        new = "iPad" + platform.split('iPad')[1]
        return new
    elif '360手機(jī)' in platform:
        new = "360手機(jī)"
        return new
    elif '魅族' in platform:
        new = "魅族" + platform.split('魅族')[1]
        return new
    elif 'MEIZU' in platform:
        new = "魅族" + platform.split('MEIZU')[1]
        return new
    elif '魅藍(lán)' in platform:
        new = "魅族 魅藍(lán)" + platform.split('魅藍(lán)')[1]
        return new
    elif 'Galaxy' in platform:
        new = "三星 Galaxy" + platform.split('Galaxy')[1]
        return new
    elif 'GALAXY' in platform:
        new = "三星 Galaxy" + platform.split('GALAXY')[1]
        return new
    elif 'Samsung' in platform:
        new = "三星" + platform.split('Samsung')[1]
        return new
    elif '360' in platform:
        new = "360" + platform.split('360')[1]
        return new
    elif '小米' in platform:
        new = "小米" + platform.split('小米')[1]
        return new
    elif '紅米' in platform:
        new = "小米 紅米" + platform.split('紅米')[1]
        return new
    elif 'xiaomi' in platform:
        new = "小米" + platform.split('小米')[1]
        return new
    elif '榮耀' in platform:
        new = "華為榮耀" + platform.split('榮耀')[1]
        return new
    elif 'vivo' in platform:
        new = "vivo" + platform.split('vivo')[1]
        return new
    elif 'HUAWEI' in platform:
        new = "華為" + platform.split('HUAWEI')[1]
        return new
    elif 'OnePlus' in platform:
        new = "一加" + platform.split('OnePlus')[1]
        return new
    elif 'Smartisan' in platform:
        new = "錘子" + platform.split('Smartisan')[1]
        return new
    elif '堅(jiān)果' in platform:
        new = "錘子 堅(jiān)果" + platform.split('堅(jiān)果')[1]
        return new
    elif 'Xperia' in platform:
        new = "索尼 Xperia" + platform.split('Xperia')[1]
        return new
    else:
        return platform

規(guī)范化是一方面短荐,但是介于后期我可能會(huì)需要統(tǒng)計(jì)不同品牌的手機(jī)型號(hào)占比,我在這里就直接再添加了一個(gè)屬性段叹哭,即把發(fā)布平臺(tái)進(jìn)行籠統(tǒng)分類(lèi)忍宋,所有iphone的各種型號(hào)都?xì)w為一類(lèi),所有三星手機(jī)歸為三星類(lèi)這樣.

def platformSimp(platform):
    platformlist = ["iPhone", "iPad", "秒拍", "三星", "華為", "小米", "OPPO", "vivo", "魅族","索尼","錘子","一加","Android"]
    thisphone = platform
    for phone in platformlist:
        if phone in platform:
            return phone
    return platform

寫(xiě)行

在做完這一切以后风罩,就可以把屬性按順序組成一行寫(xiě)入了.

 dataLine = itemCreatFormat + "\t" + itemKeyword.encode("UTF-8") + "\t" + str(itemID)  + "\t" + str(itemRepostCount) + "\t" + itemSourceUni + "\t" + itemSourceSimp + "\t" +itemUser.encode("UTF-8") + "\t" + str(itemUserID) + "\t" + str(itemUserFollower) + "\t" + itemUserGender + "\t" +itemTextP.encode("UTF-8")+ "\t"+ extractline.encode("UTF-8") + '\n'
                        

最終結(jié)果如下:

輸出結(jié)果

這個(gè)文本文件就可以很輕松的導(dǎo)入mysql進(jìn)行下一步的去重糠排,分析等操作了.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市超升,隨后出現(xiàn)的幾起案子入宦,更是在濱河造成了極大的恐慌,老刑警劉巖室琢,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乾闰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡盈滴,警方通過(guò)查閱死者的電腦和手機(jī)涯肩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)巢钓,“玉大人病苗,你說(shuō)我怎么就攤上這事≈⑿冢” “怎么了硫朦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)背镇。 經(jīng)常有香客問(wèn)我咬展,道長(zhǎng)泽裳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任破婆,我火速辦了婚禮涮总,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘荠割。我一直安慰自己,他們只是感情好旺矾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蔑鹦。 她就那樣靜靜地躺著,像睡著了一般箕宙。 火紅的嫁衣襯著肌膚如雪嚎朽。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天柬帕,我揣著相機(jī)與錄音哟忍,去河邊找鬼。 笑死陷寝,一個(gè)胖子當(dāng)著我的面吹牛锅很,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤跑,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼爆安,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了仔引?” 一聲冷哼從身側(cè)響起扔仓,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咖耘,沒(méi)想到半個(gè)月后翘簇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡儿倒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年版保,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫否。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡找筝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慷吊,到底是詐尸還是另有隱情袖裕,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布溉瓶,位于F島的核電站急鳄,受9級(jí)特大地震影響谤民,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疾宏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一张足、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧坎藐,春花似錦为牍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蛀恩,卻和暖如春疫铜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背双谆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工壳咕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人顽馋。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓谓厘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親寸谜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庞呕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容