爬蟲(chóng)入門的一點(diǎn)筆記

8月13號(hào)開(kāi)始欲芹,用了六天學(xué)習(xí)了來(lái)自傳智播客的“六節(jié)課掌握爬蟲(chóng)入門”課程卿啡,對(duì)python爬蟲(chóng)技術(shù)有了初步的了解,能夠用爬蟲(chóng)的原理寫(xiě)基本的小程序菱父,通過(guò)對(duì)樣例對(duì)人人網(wǎng)颈娜、豆瓣電影以及糗事百科的爬取,了解了html浙宜,xpath等知識(shí)官辽。寫(xiě)下總結(jié),以防忘記粟瞬。視頻來(lái)源:http://yun.itheima.com/course/368.html

第一課:爬蟲(chóng)基礎(chǔ)知識(shí)和軟件準(zhǔn)備

什么是爬蟲(chóng):

  • 爬蟲(chóng)就是指模擬客戶端(瀏覽器)發(fā)送網(wǎng)絡(luò)請(qǐng)求獲取響應(yīng)同仆,按規(guī)則提取數(shù)據(jù)的程序
  • 模擬客戶端(瀏覽器)發(fā)送網(wǎng)絡(luò)請(qǐng)求:和瀏覽器發(fā)送一模一樣的數(shù)據(jù)

爬蟲(chóng)獲取的數(shù)據(jù)去了哪里:

  • 1.可以通過(guò)處理或者直接呈現(xiàn)出來(lái),獲取我們想要的數(shù)據(jù)裙品;
  • 2.可以進(jìn)一步分析俗批,機(jī)器學(xué)習(xí)領(lǐng)域等俗或。

需要的軟件和環(huán)境:

  • python版本:python3.6.5(3.x即可)
  • python IDE:我選擇的是pycharm,當(dāng)然也可以用VS code岁忘,甚至有些大神會(huì)選擇用python自帶的IDLE辛慰,順手就好。
  • 瀏覽器:我選的是我常用的一款瀏覽器Google的Chrome瀏覽器干像,功能比較強(qiáng)大帅腌,擴(kuò)展性能好。選擇自己順手的就好麻汰,不必苛求速客,當(dāng)然,不建議用IE和某些不知名的瀏覽器什乙,會(huì)出各種奇奇怪怪的東西挽封,國(guó)產(chǎn)瀏覽器的話,360臣镣,QQ還是不錯(cuò)的辅愿。
  • 需要導(dǎo)入的包:requests(獲取響應(yīng)),json(獲取網(wǎng)頁(yè)內(nèi)容忆某,Python自帶)点待,lxml(寫(xiě)xpath,獲取網(wǎng)頁(yè)內(nèi)容)弃舒,retrying(提高容錯(cuò)性)
  • 前期準(zhǔn)備:要了解python的基本語(yǔ)法癞埠,熟悉列表瘫絮,字典冻押,函數(shù)(函數(shù)的創(chuàng)建和調(diào)用),以及自定義類的用法帚戳,需要一部分html的知識(shí)削锰。

瀏覽器的請(qǐng)求

  • URL(統(tǒng)一資源定位符):
    • 在chrome瀏覽器中“右鍵”→“檢查”點(diǎn)擊選項(xiàng)卡“network”
    • URL = 請(qǐng)求的協(xié)議(http/https)+網(wǎng)站域名+資源的路徑+url地址參數(shù)(對(duì)方服務(wù)器解析)
    • URL地址中如果出現(xiàn)百分號(hào)通铲,亂碼等,可以用相關(guān)工具進(jìn)行解碼器贩。
  • 瀏覽器請(qǐng)求URL地址:
    • 當(dāng)前URL的響應(yīng)+js+css+圖片-->elements中的內(nèi)容
  • 爬蟲(chóng)請(qǐng)求URL地址:
    • 僅包含當(dāng)前URL的響應(yīng)
  • elements的內(nèi)容和爬蟲(chóng)獲取到的URL地址的響應(yīng)不同:
    • 所以需要爬蟲(chóng)以當(dāng)前對(duì)應(yīng)的URL地址的響應(yīng)為準(zhǔn)提取數(shù)據(jù)
    • 當(dāng)前URL地址的響應(yīng)颅夺,在network里Response里可以查看,也可以打開(kāi)網(wǎng)頁(yè)原碼進(jìn)行查看

以上兩個(gè)的區(qū)別蛹稍,比如我們請(qǐng)求一個(gè)JS文件的URL吧黄,大家都知道,js文件是用來(lái)規(guī)范網(wǎng)頁(yè)顯示格式的一種程序唆姐,如果我們用瀏覽器請(qǐng)求拗慨,那我們可以看到它正常的顯示效果,但當(dāng)我們用爬蟲(chóng)去請(qǐng)求時(shí),只會(huì)拿到一堆字符串赵抢,無(wú)法執(zhí)行瘫想。

第二課:認(rèn)識(shí)HTTP、HTTPS和requests模塊

認(rèn)識(shí)HTTP昌讲、HTTPS

  • HTTP:超文本傳輸協(xié)議
    • 以明文形式傳輸,效率高减噪,不安全
  • HTTPS:HTTP+SSL(安全套接字層)
    • 傳輸數(shù)據(jù)前先加密短绸,接收數(shù)據(jù)后解密獲取內(nèi)容,效率低筹裕,更安全醋闭。
    • GET請(qǐng)求和POST請(qǐng)求的區(qū)別:
      • GET請(qǐng)求無(wú)請(qǐng)求體,POST請(qǐng)求有請(qǐng)求體朝卒。
      • POST請(qǐng)求常用于登錄证逻、注冊(cè),傳輸大文本等(因?yàn)镻OST請(qǐng)求可以攜帶比GET更大的數(shù)據(jù)量)抗斤,例如翻譯網(wǎng)頁(yè)等囚企。
  • HTTP協(xié)議之請(qǐng)求
    • 1.請(qǐng)求行
    • 2.請(qǐng)求頭
      • User-Agent(用戶代理):對(duì)方服務(wù)器通過(guò)user-agent知道請(qǐng)求對(duì)方資源的是什么瀏覽器,或者說(shuō)是不是瀏覽器瑞眼,通過(guò)chrome可以模仿(模擬)手機(jī)版的網(wǎng)頁(yè)瀏覽龙宏,模仿時(shí)候,user-agent是改成手機(jī)版的伤疙。
      • Accept:告訴服務(wù)端银酗,我想接受什么數(shù)據(jù)
      • Accept-Encoding:告訴服務(wù)端我可以接受什么編碼方式的數(shù)據(jù)。
      • Accept-Language:告訴服務(wù)端我們希望接受什么語(yǔ)言的數(shù)據(jù)徒像。
      • Cookie:用來(lái)存儲(chǔ)用戶信息的黍特,每次請(qǐng)求都會(huì)被帶上發(fā)送給對(duì)方的瀏覽器。
        • 要獲取登陸后才能訪問(wèn)的頁(yè)面的內(nèi)容
        • 對(duì)方的服務(wù)器會(huì)通過(guò)cookie來(lái)判斷爬蟲(chóng)

      我們已經(jīng)了解過(guò)了锯蛀,爬蟲(chóng)就是用來(lái)模擬瀏覽器發(fā)送請(qǐng)求灭衷,怎樣才能模擬的像呢?我們可以看一下瀏覽器里面的Request Header 發(fā)現(xiàn)里面有許多參數(shù)谬墙,上面羅列的這幾項(xiàng)也包含在這里面今布,所以,如果想要模擬的像拭抬,就可以把這些參數(shù)全部帶上部默。特別是,當(dāng)我們發(fā)現(xiàn)只帶User-Agent不行時(shí)造虎,就需要帶上一些別的字段傅蹂,如host等。

    • 3.請(qǐng)求體:攜帶數(shù)據(jù)
    • GET請(qǐng)求:沒(méi)有請(qǐng)求體
    • POST請(qǐng)求:有請(qǐng)求體
  • HTTP協(xié)議之響應(yīng):
    • 1.響應(yīng)頭
      • Set-Cookie:通過(guò)這個(gè)鍵,對(duì)方服務(wù)器可以向本地設(shè)置Cookie(Response Cookie)
    • 2.響應(yīng)體
      • URL地址對(duì)應(yīng)的響應(yīng)

requests模塊

  • 安裝requests模塊:
    • requests模塊是一個(gè)第三方模塊
      • pip install requests
      • 或者在你的IDE中直接加載配置(建議)
  • requests模塊的使用
    • 首先份蝴,像許多別的python第三方模塊一樣犁功,用之前,我們需要
    import request
    
    • 發(fā)送GET婚夫、POST請(qǐng)求浸卦,獲取響應(yīng)
    response1 = requests.get(url)   #get請(qǐng)求,獲取響應(yīng)
    response2 = requests.post(url,data = {請(qǐng)求體的字典})    #post請(qǐng)求,需要請(qǐng)求體
    
    這個(gè)時(shí)候案糙,當(dāng)我們直接print(response1)或者print(response2)的話限嫌,會(huì)得到一個(gè)<Response [200]> 其中200是狀態(tài)碼,如果學(xué)過(guò)HTTP知識(shí)的話时捌,我們知道怒医,這是一個(gè)代表正常訪問(wèn)(200 OK)的狀態(tài)碼(關(guān)于狀態(tài)碼的詳細(xì)可以百度百科,我們常見(jiàn)的404NotFound就屬于狀態(tài)碼)

response的方法:

  • 1.response.content.decode()

此方法是把響應(yīng)的二進(jìn)制字節(jié)流轉(zhuǎn)化為字符串類型

  • 2.response.text

該方法獲取網(wǎng)頁(yè)內(nèi)容時(shí)往往會(huì)出現(xiàn)亂碼奢讨,所以要在此前加上一個(gè)response.encoding = "utf-8"

  • 3.response.request.url

獲取發(fā)送請(qǐng)求的url地址

  • 4.response.url

獲取響應(yīng)的url地址

  • 5.response.request.headers

請(qǐng)求頭

  • 6.requests.headers

響應(yīng)頭

獲取網(wǎng)頁(yè)原碼的方式:

  • 1.response.content.decode()
  • 2.response.content.decode("gbk")

某些網(wǎng)站的 編碼方式不是使用的"utf-8"而是"gbk"

  • 3.response.text 》

因?yàn)?text方法是根據(jù)響應(yīng)頭部的編碼進(jìn)行推測(cè)稚叹,所以放到最后使用,有時(shí)候也會(huì)推測(cè)正確

當(dāng)我們拿到一個(gè)網(wǎng)頁(yè)拿诸,用以上三種方式扒袖,一定可以獲取到網(wǎng)頁(yè)正確解碼方式的字符串

攜帶header的請(qǐng)求

  • 為了模擬瀏覽器(更像)獲得和瀏覽器一模一樣的內(nèi)容。
headers = {
"User-Agent","Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
,"Referer":"https://www.baidu.com/link?url=2AZ4aoeuSBsv_DIT2glxe8YKtzrFnpjE6gE0kBfZAIYHR68fCE_qEqJHAwCGLxwZ9EgAWJ1VlgWpsc2AP0w9h8HCCYyk76C4ZkZ31Kkx6Oa&wd=&eqid=b52b5e950002d7ea000000045b7ab019"
,"Cookie":"__cfduid=d1980ca26bf900a830b821bbeb347e14e1524844627; BDUSS=ZZTlpUbjFKSWlzNWd3MFBJTnA2OXRTfjVRM2JtQjExVlNxbXVwRmFuOWhRcGRiQVFBQUFBJCQAAAAAAAAAAAEAAADfpd0Tz8q9o8bvz7rXqgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGG1b1thtW9bbF; BIDUPSID=64317FC091E534AA95A51E108E720B05; PSTM=1534572862; BAIDUID=64317FC091E534AA9D2CA222BE99583F:FG=1; PSINO=5; pgv_pvi=8543101952; pgv_si=s5921124352; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_PSSID=1441_21124_26350_26921_20929; Hm_lvt_55b574651fcae74b0a9f1cf9c8d7c93a=1534689869,1534750696,1534750859,1534767134; Hm_lpvt_55b574651fcae74b0a9f1cf9c8d7c93a=1534767134; BKWPF=3"
,"Host":"baike.baidu.com"
}

當(dāng)我們只帶header不夠的時(shí)候亩码,可以帶點(diǎn)別的東西進(jìn)去僚稿,比如Referer,Host蟀伸,還有最重要的Cookie

例子是百度百科“HTTP狀態(tài)碼”詞條蚀同,代理用的是IPad

注意,這些全部都是放在header里面的啊掏,當(dāng)現(xiàn)實(shí)狀態(tài)碼為200時(shí)蠢络,但沒(méi)有反應(yīng),就是缺Header

第三課:retrying模塊的使用和攜帶cookie的請(qǐng)求

超時(shí)參數(shù)的使用

  • requests.get(url,headers = headers, timeout = 3)#timeout 就是我們所說(shuō)的超時(shí)參數(shù)迟蜜,設(shè)置為3刹孔,是指3秒如果還鏈接不到(沒(méi)有返回響應(yīng))的話,就報(bào)錯(cuò)娜睛。

retrying模塊的使用

  • retrying模塊是一個(gè)第三方模塊髓霞,我們?cè)诖耸褂眠@個(gè)模塊的目的是防止網(wǎng)站請(qǐng)求超時(shí)
  • 舉個(gè)例子

假設(shè)我們要獲取一批url地址,其中某一個(gè)地址處于某種原因畦戒,鏈接失敗方库,當(dāng)我一般碰到鏈接失敗的時(shí)候,一般會(huì)選擇刷新網(wǎng)頁(yè)障斋,但如果我們發(fā)現(xiàn)刷新幾次都沒(méi)有反應(yīng)纵潦,我們就不必在這個(gè)地方糾結(jié)徐鹤,直接爬取下一個(gè)網(wǎng)頁(yè)就好了,retrying模塊就是起到這個(gè)目的邀层。

  • 首先 pip install retrying
form retrying import retry

@retry(stop_max_attempt_time = 3)
def func1():
    print("~~~~~~~~~")
    raise ValueError("error!")

上面函數(shù)用retry修飾返敬,函數(shù)反復(fù)執(zhí)行三次,如果三次全報(bào)錯(cuò)寥院,則報(bào)錯(cuò)劲赠,如果三次中有一次正常運(yùn)行,則程序繼續(xù)走秸谢【酰“stop_max_attemp_time”參賽可以更改。

requests模塊處理cookie相關(guān)請(qǐng)求:

  • 直接攜帶cookie請(qǐng)求url地址:
    • 直接把cookie放在requests的方法的headers參數(shù)里(抓包獲取cookie)

    • cookie字典:獲取cookie字典钮追,然后放在cookie參數(shù)里

    cookie = "anonymid=jktqcaaz-yc3q1e; depovince=SD; jebecookies=24118536-4dae-4958-ac10-cdf927806f0c|||||; _r01_=1; JSESSIONID=abcWx0fQyxjZQayV6K4uw; ick_login=74306d5d-341d-4ff8-8f3c-5d386dc971cd; _de=FF874E9B1254101280671A4BC2EEBA1B; p=e33464b788d6245684e63870b87557347; first_login_flag=1; ln_uact=15062181376; ln_hurl=http://head.xiaonei.com/photos/0/0/men_main.gif; t=74d612143be059c7c0a75fd5433c1dc87; societyguester=74d612143be059c7c0a75fd5433c1dc87; id=568207047; xnsid=c76bfd9c; loginfrom=syshome; wp_fold=0"
    cookie_dict = {i.split("=")[0]:i.split("=")[-1] for i in cookie.split(";")}  
    
  • 發(fā)送post請(qǐng)求獲取cookie
      1. session = requests.session()#session的方法和requests一樣
      1. session.post(url, data, headers)#服務(wù)器設(shè)置的cookie會(huì)保存在session中
      1. session.get(url)#會(huì)帶上之前保存在session中的cookie

第四課:數(shù)據(jù)提取方法之json

json

  • 數(shù)據(jù)交換格式,看起來(lái)像python類型(列表阿迈,字典)的字符串
  • 哪里會(huì)返回json的數(shù)據(jù)
    • 瀏覽器切換到手機(jī)版元媚,并不是每個(gè)頁(yè)面都會(huì)返回json數(shù)據(jù)
    • 抓包的軟件和app
  • json.loads()
    • 把json字符串轉(zhuǎn)換為python類型
    • json.loads('json字符串')#如果保存,一般由于不是json字符串導(dǎo)致的
  • json.dumps(
    • 把python類型轉(zhuǎn)化為json字符串
    • json.dumps({'1':"hello",'2':'world'},ensure_ascii = False, indent = 2)
      • ensure_ascii = False #能夠讓中文顯示
      • indent = 2 #上一行和下一行直接回車空格

      注意一點(diǎn)苗沧,當(dāng)URL中帶有callback=刊棕??待逞?時(shí)甥角,直接刪掉即可,沒(méi)有什么用识樱,帶著還不能構(gòu)造json字符串

第五課:xpath和lxml模塊

xpath

  • 一門從html提取數(shù)據(jù)的語(yǔ)言

xpath語(yǔ)法

  • xpath helper插件:幫助我們從elements中定位數(shù)據(jù)
    • 1.“/”選擇節(jié)點(diǎn)(標(biāo)簽):
      • '/html/head/meta':能夠選擇html head中所有meta標(biāo)簽
    • 2.“//”從任意節(jié)點(diǎn)開(kāi)始選擇
      • “//li”選擇頁(yè)面上所有l(wèi)i標(biāo)簽
      • “/html/head//link”選擇head下所有的link標(biāo)簽
    • 3."@"符號(hào)的用途
      • 選擇具體的某個(gè)元素:“//div[@class = 'content']/ul/li”

        選擇class = 'content' 的div下的ul的li
        - “/a/@href”獲取選擇的a的href的值

    • 4.獲取文本
      • /a/text():獲取a的文本
      • /a//text():獲取a下所有的文本
    • 5.“./a”當(dāng)前節(jié)點(diǎn)下的a標(biāo)簽

lxml模塊

安裝lxml

  • pip install lxml
  • 在IDE中直接配置安裝(推薦)

使用

from lxml import etree
elements = etree.HTML('html字符串')
elements.xpath('xpath語(yǔ)句')

第六課:實(shí)戰(zhàn)訓(xùn)練案例/爬蟲(chóng)流程概念

基礎(chǔ)知識(shí)補(bǔ)充

  • 列表推導(dǎo)式

    • 幫助我們迅速生成列表
      [i for i in range(1,10)]
    

    生成一個(gè)[1,2,3,4,5,6,7,8,9,10]列表

      [i+10 for i in range(10)]
    

    生成[10,12,13……18嗤无,19]列表

  • 字典推導(dǎo)式

    • 幫助我們快速生成字典
       {i+10: i for i in range(10)}
    

    生成的字典為{10:0,11:1,12:2……18:8,19:9}

  • 三元運(yùn)算符

    a = 10 if 3<4 else 20
    

    a = 10 因?yàn)?<4成立

    a = 10 if 3>4 else 20
    

    a = 20 因?yàn)?>4不成立

    -若if后面條件成立,則把if前面的值賦給變量怜庸,若不成立当犯,則把后面的值付給變量。

一個(gè)爬蟲(chóng)的基本流程(討論)

  • 1.URL:
    • 知道URL地址的規(guī)律和需要爬取的數(shù)量割疾,構(gòu)造URL地址列表嚎卫,可以用python字符串的方法,比如format宏榕,strip等拓诸。
    • start_url 初始字符串
  • 2.發(fā)送請(qǐng)求,獲取響應(yīng)
    • requests方法麻昼,get或者post請(qǐng)求
  • 3.提取數(shù)據(jù)
    • 返回json字符串:json模塊
    • 若返回html字符串:lxml模塊
  • 4.保存數(shù)據(jù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末奠支,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子抚芦,更是在濱河造成了極大的恐慌胚宦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異枢劝,居然都是意外死亡井联,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門您旁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烙常,“玉大人,你說(shuō)我怎么就攤上這事鹤盒〔显啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵侦锯,是天一觀的道長(zhǎng)驼鞭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)尺碰,這世上最難降的妖魔是什么挣棕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮亲桥,結(jié)果婚禮上洛心,老公的妹妹穿的比我還像新娘。我一直安慰自己题篷,他們只是感情好词身,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著番枚,像睡著了一般法严。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫笼,一...
    開(kāi)封第一講書(shū)人閱讀 49,792評(píng)論 1 290
  • 那天渐夸,我揣著相機(jī)與錄音,去河邊找鬼渔欢。 笑死墓塌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奥额。 我是一名探鬼主播苫幢,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垫挨!你這毒婦竟也來(lái)了韩肝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤九榔,失蹤者是張志新(化名)和其女友劉穎哀峻,沒(méi)想到半個(gè)月后涡相,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剩蟀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年催蝗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育特。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丙号,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缰冤,到底是詐尸還是另有隱情犬缨,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布棉浸,位于F島的核電站怀薛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏迷郑。R本人自食惡果不足惜枝恋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望三热。 院中可真熱鬧,春花似錦三幻、人聲如沸就漾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抑堡。三九已至,卻和暖如春朗徊,著一層夾襖步出監(jiān)牢的瞬間首妖,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工爷恳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留有缆,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓温亲,卻偏偏與公主長(zhǎng)得像棚壁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栈虚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

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