成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

大話爬蟲的基本套路

Towers / 1084人閱讀

摘要:有什么作用通過有效的爬蟲手段批量采集數(shù)據(jù),可以降低人工成本,提高有效數(shù)據(jù)量,給予運(yùn)營(yíng)銷售的數(shù)據(jù)支撐,加快產(chǎn)品發(fā)展。因?yàn)樾畔⑹峭耆_的,所以是合法的。



  

什么是爬蟲?

網(wǎng)絡(luò)爬蟲也叫網(wǎng)絡(luò)蜘蛛,如果把互聯(lián)網(wǎng)比喻成一個(gè)蜘蛛網(wǎng),那么蜘蛛就是在網(wǎng)上爬來爬去的蜘蛛,爬蟲程序通過請(qǐng)求url地址,根據(jù)響應(yīng)的內(nèi)容進(jìn)行解析采集數(shù)據(jù),
比如:如果響應(yīng)內(nèi)容是html,分析dom結(jié)構(gòu),進(jìn)行dom解析、或者正則匹配,如果響應(yīng)內(nèi)容是xml/json數(shù)據(jù),就可以轉(zhuǎn)數(shù)據(jù)對(duì)象,然后對(duì)數(shù)據(jù)進(jìn)行解析。


有什么作用?

通過有效的爬蟲手段批量采集數(shù)據(jù),可以降低人工成本,提高有效數(shù)據(jù)量,給予運(yùn)營(yíng)/銷售的數(shù)據(jù)支撐,加快產(chǎn)品發(fā)展。


業(yè)界的情況

目前互聯(lián)網(wǎng)產(chǎn)品競(jìng)爭(zhēng)激烈,業(yè)界大部分都會(huì)使用爬蟲技術(shù)對(duì)競(jìng)品產(chǎn)品的數(shù)據(jù)進(jìn)行挖掘、采集、大數(shù)據(jù)分析,這是必備手段,并且很多公司都設(shè)立了爬蟲工程師的崗位


合法性

爬蟲是利用程序進(jìn)行批量爬取網(wǎng)頁上的公開信息,也就是前端顯示的數(shù)據(jù)信息。因?yàn)樾畔⑹峭耆_的,所以是合法的。其實(shí)就像瀏覽器一樣,瀏覽器解析響應(yīng)內(nèi)容并渲染為頁面,而爬蟲解析響應(yīng)內(nèi)容采集想要的數(shù)據(jù)進(jìn)行存儲(chǔ)。


反爬蟲

爬蟲很難完全的制止,道高一尺魔高一丈,這是一場(chǎng)沒有硝煙的戰(zhàn)爭(zhēng),碼農(nóng)VS碼農(nóng)
反爬蟲一些手段:

合法檢測(cè):請(qǐng)求校驗(yàn)(useragent,referer,接口加簽名,等)

小黑屋:IP/用戶限制請(qǐng)求頻率,或者直接攔截

投毒:反爬蟲高境界可以不用攔截,攔截是一時(shí)的,投毒返回虛假數(shù)據(jù),可以誤導(dǎo)競(jìng)品決策

... ...


爬蟲基本套路

基本流程

目標(biāo)數(shù)據(jù)

來源地址

結(jié)構(gòu)分析

實(shí)現(xiàn)構(gòu)思

操刀編碼

基本手段

破解請(qǐng)求限制

請(qǐng)求頭設(shè)置,如:useragant為有效客戶端

控制請(qǐng)求頻率(根據(jù)實(shí)際情景)

IP代理

簽名/加密參數(shù)從html/cookie/js分析

破解登錄授權(quán)

請(qǐng)求帶上用戶cookie信息

破解驗(yàn)證碼

簡(jiǎn)單的驗(yàn)證碼可以使用識(shí)圖讀驗(yàn)證碼第三方庫(kù)

解析數(shù)據(jù)

HTML Dom解析

正則匹配,通過的正則表達(dá)式來匹配想要爬取的數(shù)據(jù),如:有些數(shù)據(jù)不是在html 標(biāo)簽里,而是在html的script 標(biāo)簽的js變量中

使用第三方庫(kù)解析html dom,比較喜歡類jquery的庫(kù)

數(shù)據(jù)字符串

正則匹配(根據(jù)情景使用)

轉(zhuǎn) JSON/XML 對(duì)象進(jìn)行解析


python爬蟲

python寫爬蟲的優(yōu)勢(shì)

python語法易學(xué),容易上手

社區(qū)活躍,實(shí)現(xiàn)方案多可參考

各種功能包豐富

少量代碼即可完成強(qiáng)大功能

涉及模塊包

請(qǐng)求

urllib

urllib2

cookielib

多線程

threading

正則

re

json解析

json

html dom解析

pyquery

beautiful soup

操作瀏覽器

selenium


實(shí)例解析

斗魚主播排行

目標(biāo)數(shù)據(jù)

獲取排行榜主播信息

來源地址

[排行榜地址]

https://www.douyu.com/directo...

[主播房間地址]

https://www.douyu.com/xxx

xxx=房間號(hào)

結(jié)構(gòu)分析

通過抓包 [排行榜地址],[主播房間地址] (谷歌調(diào)試network/charles/fiddler)

獲得排行數(shù)據(jù)接口:https://www.douyu.com/directo...

參數(shù)確認(rèn)(去掉不必要參數(shù))

cookie確認(rèn)(去掉不必要cookie)

模擬請(qǐng)求(charles/fiddler/postman)

獲得主播房間信息數(shù)據(jù)

發(fā)現(xiàn)$ROOM是主播房間信息,在頁面的script標(biāo)簽的js變量中,可使用正則工具寫表達(dá)式去匹配

實(shí)現(xiàn)構(gòu)思

通過請(qǐng)求 [主播排行接口] 獲取 [排行榜數(shù)據(jù)]

[排行榜數(shù)據(jù)] 中有主播房間號(hào),可以通過拼接獲得 [主播房間地址]

請(qǐng)求 [主播房間地址] 可以獲得 [$ROOM信息] ,解析可以獲得主播房間信息

操刀編碼

申明:此例子僅作為爬蟲學(xué)習(xí)DEMO,并無其他利用


基于python實(shí)現(xiàn)爬蟲學(xué)習(xí)基礎(chǔ)demo

def douyu_rank(rankName, statType):
    """
        斗魚主播排行數(shù)據(jù)抓取
        [數(shù)據(jù)地址](https://www.douyu.com/directory/rank_list/game)

        * `rankName` anchor(巨星主播榜),fans(主播粉絲榜),haoyou(土豪實(shí)力榜),user(主播壕友榜)
        * `statType` day(日),week(周),month(月)
    """
    if not isinstance(rankName, ERankName):
        raise Exception("rankName 類型錯(cuò)誤,必須是ERankName枚舉")
    if not isinstance(statType, EStatType):
        raise Exception("statType 類型錯(cuò)誤,必須是EStatType枚舉")

    rankName = "%sListData" % rankName.name
    statType = "%sListData" % statType.name
    # 請(qǐng)求獲取html源碼 
    rs = rq.get(
        "https://www.douyu.com/directory/rank_list/game",
        headers={"User-Agent": "Mozilla/5.0"})
    # 正則解析出數(shù)據(jù)
    mt = re.search(r"rankListDatas+?=(.*?);", rs, re.S)
    if (not mt):
        print u"無法解析rankListData數(shù)據(jù)"
        return
    grps = mt.groups()
    # 數(shù)據(jù)轉(zhuǎn)json
    rankListDataStr = grps[0]
    rankListData = json.loads(rankListDataStr)
    dayList = rankListData[rankName][statType]
    # 修改排序
    dayList.sort(key=lambda k: (k.get("id", 0)), reverse=False)
    return dayList


def douyu_room(romm_id):
    """
        主播房間信息解析
        [數(shù)據(jù)地址](https://www.douyu.com/xxx)
        "romm_id" 主播房號(hào)
    """
    rs = rq.get(
        ("https://www.douyu.com/%s" % romm_id),
        headers={"User-Agent": "Mozilla/5.0"})
    mt = re.search(r"$ROOMs+?=s+?({.*?});", rs, re.S)
    if (not mt):
        print u"無法解析ROOM數(shù)據(jù)"
        return
    grps = mt.groups()
    roomDataStr = grps[0]
    roomData = json.loads(roomDataStr)
    return roomData
    
def run():
    """
        測(cè)試爬蟲
    """
    datas = douyu_rank(ERankName.anchor, EStatType.month)
    print "
主播排行榜:"
    for item in datas:
        room_id = item["room_id"]
        roomData = douyu_room(room_id)
        rommName = None
        if roomData is not None:
            rommName = roomData["room_name"]
        roomInfo = (u"房間(%s):%s" % (item["room_id"], rommName))
        print item["id"], item[
            "nickname"], roomInfo, "[" + item["catagory"] + "]"


run()

運(yùn)行結(jié)果:

主播排行榜:

無法解析ROOM數(shù)據(jù)
1 馮提莫 房間(71017):今晚來 [英雄聯(lián)盟]
2 阿冷aleng丶 房間(2371789):又是我最喜歡的阿冷ktv時(shí)間~ [英雄聯(lián)盟]
3 勝哥002 房間(414818):勝哥:南通的雨下的我好心累。 [DNF]
4 White55開解說 房間(138286):盧本偉五五開 每天都要很強(qiáng) [英雄聯(lián)盟]
5 東北大鵪鶉 房間(96291):東北大鵪鶉 宇宙第一寒冰 相聲藝術(shù)家! [英雄聯(lián)盟]
6 老實(shí)敦厚的笑笑 房間(154537):德云色 給兄弟們賠個(gè)不是 [英雄聯(lián)盟]
7 劉飛兒faye 房間(265438):劉飛兒  月底吃雞 大吉大利 [絕地求生]
8 pigff 房間(24422):【PIGFF】借基地直播,沒OW [守望先鋒]
9 云彩上的翅膀 房間(28101):翅:還是抽天空套刺激! [DNF]
10 yyfyyf 房間(58428):無盡的9月,殺 [DOTA2]

Demo源碼地址


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40934.html

相關(guān)文章

  • 大話WEB開發(fā)》

    摘要:作為開發(fā)者,需要不斷的對(duì)技術(shù)點(diǎn)進(jìn)行總結(jié),并且把它沉淀下來,寫技術(shù)博文無疑是最好的方式,隨著時(shí)間流逝,還可以作為自己每個(gè)階段的技術(shù)認(rèn)知軌跡進(jìn)行回顧和反思,這里將會(huì)持續(xù)記錄對(duì)開發(fā)相關(guān)總結(jié)內(nèi)容后端開發(fā)大話后端開發(fā)的奇淫技巧大集合高并發(fā)大話程序猿眼 作為WEB開發(fā)者,需要不斷的對(duì)技術(shù)點(diǎn)進(jìn)行總結(jié),并且把它沉淀下來,寫技術(shù)博文無疑是最好的方式,隨著時(shí)間流逝,還可以作為自己每個(gè)階段的技術(shù)認(rèn)知軌跡進(jìn)行...

    ytwman 評(píng)論0 收藏0
  • 大話WEB開發(fā)》

    摘要:作為開發(fā)者,需要不斷的對(duì)技術(shù)點(diǎn)進(jìn)行總結(jié),并且把它沉淀下來,寫技術(shù)博文無疑是最好的方式,隨著時(shí)間流逝,還可以作為自己每個(gè)階段的技術(shù)認(rèn)知軌跡進(jìn)行回顧和反思,這里將會(huì)持續(xù)記錄對(duì)開發(fā)相關(guān)總結(jié)內(nèi)容后端開發(fā)大話后端開發(fā)的奇淫技巧大集合高并發(fā)大話程序猿眼 作為WEB開發(fā)者,需要不斷的對(duì)技術(shù)點(diǎn)進(jìn)行總結(jié),并且把它沉淀下來,寫技術(shù)博文無疑是最好的方式,隨著時(shí)間流逝,還可以作為自己每個(gè)階段的技術(shù)認(rèn)知軌跡進(jìn)行...

    zsirfs 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<