国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

大話爬蟲的基本套路

Towers / 1062人閱讀

摘要:有什么作用通過有效的爬蟲手段批量采集數據,可以降低人工成本,提高有效數據量,給予運營銷售的數據支撐,加快產品發展。因為信息是完全公開的,所以是合法的。



  

什么是爬蟲?

網絡爬蟲也叫網絡蜘蛛,如果把互聯網比喻成一個蜘蛛網,那么蜘蛛就是在網上爬來爬去的蜘蛛,爬蟲程序通過請求url地址,根據響應的內容進行解析采集數據,
比如:如果響應內容是html,分析dom結構,進行dom解析、或者正則匹配,如果響應內容是xml/json數據,就可以轉數據對象,然后對數據進行解析。


有什么作用?

通過有效的爬蟲手段批量采集數據,可以降低人工成本,提高有效數據量,給予運營/銷售的數據支撐,加快產品發展。


業界的情況

目前互聯網產品競爭激烈,業界大部分都會使用爬蟲技術對競品產品的數據進行挖掘、采集、大數據分析,這是必備手段,并且很多公司都設立了爬蟲工程師的崗位


合法性

爬蟲是利用程序進行批量爬取網頁上的公開信息,也就是前端顯示的數據信息。因為信息是完全公開的,所以是合法的。其實就像瀏覽器一樣,瀏覽器解析響應內容并渲染為頁面,而爬蟲解析響應內容采集想要的數據進行存儲。


反爬蟲

爬蟲很難完全的制止,道高一尺魔高一丈,這是一場沒有硝煙的戰爭,碼農VS碼農
反爬蟲一些手段:

合法檢測:請求校驗(useragent,referer,接口加簽名,等)

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

投毒:反爬蟲高境界可以不用攔截,攔截是一時的,投毒返回虛假數據,可以誤導競品決策

... ...


爬蟲基本套路

基本流程

目標數據

來源地址

結構分析

實現構思

操刀編碼

基本手段

破解請求限制

請求頭設置,如:useragant為有效客戶端

控制請求頻率(根據實際情景)

IP代理

簽名/加密參數從html/cookie/js分析

破解登錄授權

請求帶上用戶cookie信息

破解驗證碼

簡單的驗證碼可以使用識圖讀驗證碼第三方庫

解析數據

HTML Dom解析

正則匹配,通過的正則表達式來匹配想要爬取的數據,如:有些數據不是在html 標簽里,而是在html的script 標簽的js變量中

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

數據字符串

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

轉 JSON/XML 對象進行解析


python爬蟲

python寫爬蟲的優勢

python語法易學,容易上手

社區活躍,實現方案多可參考

各種功能包豐富

少量代碼即可完成強大功能

涉及模塊包

請求

urllib

urllib2

cookielib

多線程

threading

正則

re

json解析

json

html dom解析

pyquery

beautiful soup

操作瀏覽器

selenium


實例解析

斗魚主播排行

目標數據

獲取排行榜主播信息

來源地址

[排行榜地址]

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

[主播房間地址]

https://www.douyu.com/xxx

xxx=房間號

結構分析

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

獲得排行數據接口:https://www.douyu.com/directo...

參數確認(去掉不必要參數)

cookie確認(去掉不必要cookie)

模擬請求(charles/fiddler/postman)

獲得主播房間信息數據

發現$ROOM是主播房間信息,在頁面的script標簽的js變量中,可使用正則工具寫表達式去匹配

實現構思

通過請求 [主播排行接口] 獲取 [排行榜數據]

[排行榜數據] 中有主播房間號,可以通過拼接獲得 [主播房間地址]

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

操刀編碼

申明:此例子僅作為爬蟲學習DEMO,并無其他利用


基于python實現爬蟲學習基礎demo

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

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

    rankName = "%sListData" % rankName.name
    statType = "%sListData" % statType.name
    # 請求獲取html源碼 
    rs = rq.get(
        "https://www.douyu.com/directory/rank_list/game",
        headers={"User-Agent": "Mozilla/5.0"})
    # 正則解析出數據
    mt = re.search(r"rankListDatas+?=(.*?);", rs, re.S)
    if (not mt):
        print u"無法解析rankListData數據"
        return
    grps = mt.groups()
    # 數據轉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):
    """
        主播房間信息解析
        [數據地址](https://www.douyu.com/xxx)
        "romm_id" 主播房號
    """
    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數據"
        return
    grps = mt.groups()
    roomDataStr = grps[0]
    roomData = json.loads(roomDataStr)
    return roomData
    
def run():
    """
        測試爬蟲
    """
    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()

運行結果:

主播排行榜:

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

Demo源碼地址


文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40934.html

相關文章

  • 大話WEB開發》

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

    ytwman 評論0 收藏0
  • 大話WEB開發》

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

    zsirfs 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<