<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                **作為科研狗,新浪微博一生黑。**一開始打算花錢買他們的商業API,結果跟我說不跟科研機構合作,我也是日了狗了。后來費盡千辛萬苦寫了個爬蟲,差點沒把我小號封了`手動再見.gif`本來寫字的陣地主要在lofter,結果lofter這坑貨不支持代碼高亮,讓我這個~~偽~~碼農如何自處?好了,閑話少敘~~已經敘了不少~~,把我這三天的奮斗結果稍稍記錄一下。 # 一些學習資料 1. [Fiddler簡易使用教程](http://xijiacs.lofter.com/post/1d96cd64_a0f4013) 抓cookies用**(必看)** 2. [PySpider簡易教程](http://www.jianshu.com/p/36290e6acf45) 整個爬蟲用到的框架**(必看)** 3. [HTTP Header入門詳解](http://my.oschina.net/abian/blog/131548?fromerr=rY5qyfx5) 在模擬登錄過程中要涉及到http頭的設置,需要了解基本信息 4. [全程模擬新浪微博登錄2015](http://blog.csdn.net/u010487568/article/details/46932839) 這個分析了新浪微博網頁版現在還在用的登錄過程,其中使用到的最新腳本ssologin.js版本號1.4.18。不過本文主要是基于wap版的爬蟲,這個沒必要看,如果想進一步爬取網頁版的微博可以參考學習。 5. [Sina微博爬取@pyspider](http://blog.csdn.net/dipolar/article/details/49661083) 這篇文章通過用戶名和密碼獲取wap版微博的cookies后再進行后續操作,也可參考。 6. [PyQuery文檔](https://pythonhosted.org/pyquery/index.html) `&&` [CSS選擇器](http://www.w3schools.com/cssref/css_selectors.asp)`&&`[Python正則表達式re package文檔](https://docs.python.org/2/library/re.html) `Python`頁面爬下來以后用于操作頁面元素獲取需要的內容**(必看)** # 獲取cookies用于模擬登陸 參考學習資料1里面設置好fiddler,然后打開[http://weibo.cn/](http://weibo.cn/) 沒登陸的話登陸。在登錄的狀態下打開你要進行爬取的頁面,觀察fiddler里抓到的包,得到需要的cookies信息 ![](https://box.kancloud.cn/2016-05-29_574a961d9f1f2.jpg) 獲取cookies 對應設置好PySpider里的`crawl_config`,需要注意的是`cookies`和`headers`,考慮到我的代碼邏輯我把這兩個都放在`crawl_config`里而不是具體的爬取函數里。關于頭的設置也可以參考fiddler里`Headers`一欄,完整代碼貼在最后可以參考我的設置。 # 爬蟲邏輯 我的需求是對于指定的用戶,給出用戶主頁(形如`http://weibo.cn/kaikai0818`或`http://weibo.cn/u/1788136742`),爬取TA全部的微博及相關信息(如發布時間、轉發數等)。 入口函數`on_start`沒什么可說的,因為設置了全局的headers和cookies這邊在`self.crawl`的時候就不需要再發送了,如果沒設置成全局的,必須在這邊設置并發送。 `index_page`函數主要用來計算一共有多少頁需要爬取,頁面有一個類型為`hidden`的`<input>`元素記錄了一共有多少頁,然后一個for得到所有需要爬取的頁面地址。 `list_single_page`用于處理每一頁微博的內容,一頁有十條,主要就是操作頁面獲取單條微博的地址(因為后續需求可能需要爬取每一條微博的轉發和評論內容)。這邊有個trick,和web版微博不同的是,wap版單條微博并沒有一個所謂的地址,只有一個轉發或者評論的地址,代碼里用了轉發的地址。值得注意的是**我自己測試這個爬蟲的時候爬了1500條微博左右的時候賬號被凍結了,建議在dashboard調一下rate、burst值。**不過后來登錄后激活了一下賬號又能用了,還沒測試過多少值可以避免被凍,因為不清楚新浪凍結的機制,我的小號還要用來花癡的,不敢瞎搞了*(:з」∠)* `detail_page`用來處理單條微博,然后就是css選擇器+正則的應用了哇,沒什么可說的,就是找規律,目前測試過了沒啥問題,不過爬下來的1500多條也沒認真檢查過,大家自己再看看了哇。 一個能跑的代碼如下: ~~~ #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-03-07 13:26:00 # Project: user_timeline import re import time from pyquery import PyQuery from pyspider.libs.base_handler import * class Handler(BaseHandler): user_url = "http://weibo.cn/kaikai0818" crawl_config = { 'itag': 'v1', 'headers': { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0', "Host": "weibo.cn", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "Accept-Language": "zh-CN,zh-TW;q=0.8,zh-HK;q=0.6,en-US;q=0.4,en;q=0.2", "Accept-Encoding": "gzip, deflate", "DNT": "1", "Connection": "keep-alive" }, 'cookies': { "_T_WM":"I?kkw(ˉ﹃ˉ)", "SUB":"I?kkw(ˉ﹃ˉ)", "gsid_CTandWM":"I?kkw(ˉ﹃ˉ)", "_T_WL":"1", "_WEIBO_UID":"I?kkw(ˉ﹃ˉ)" } } @every(minutes=24 * 60) def on_start(self): self.crawl(Handler.user_url, callback=self.index_page,method="GET") @config(age=1 * 24 * 60 * 60) def index_page(self, response): #計算該用戶的微博共有幾頁 pages = response.doc("[type=hidden]").attr["value"] for i in range(1,int(pages)+1): self.crawl(Handler.user_url+"?page="+str(i), callback=self.list_single_page,method="GET") @config(priority=2) #數字越大優先級越高 def list_single_page(self, response): #處理當前頁的微博 url = "http://weibo.cn/repost/" for each in response.doc("div[id^=\"M_\"]").items(): mid = each.attr("id") self.crawl(url + mid[2:], cookies = response.cookies, callback=self.detail_page) #self.crawl可加上參數exetime=time.time() + 1*60 (即一分鐘后再crawl) @config(priority=1) def detail_page(self, response): res = response.doc("#M_") #判斷是否為轉發 if len(res.find("span.cmt")) != 0: is_rt = 1 else: is_rt = 0 #判斷是否含圖片 if len(res.children("div").eq(1).find("img")) != 0: has_pic = 1 else: has_pic = 0 if is_rt == 0: text = res.find("span.ctt").text() orig_user = "NA" orig_text = "NA" else: orig_user = res("div:first-child span.cmt a").text() orig_text = res.find("span.ctt").text() td = re.findall(r'</span>([\s\S]+)<span class=',res("div:last-child").html()) text = PyQuery(td[0]).text() return { "screen_name":res("div:first-child > a:first-child").text(), "time":res.find("span.ct").text(), "text":text, "is_rt":is_rt, "has_pic":has_pic, "orig_user":orig_user[1:], "orig_text":orig_text, "repo_cnt":re.search('\d+',response.doc("span.pms").text()).group(), "cmt_cnt":re.search('\d+',response.doc("span.pms").siblings().eq(0).text()).group(), "atti_cnt":re.search('\d+',response.doc("span.pms").siblings().eq(1).text()).group() } ~~~ 這輩子干得最癡漢的事情就是寫了個爬蟲把人一千多條微博扒拉下來了,感覺以后再也不會這么用力愛一個人了→_→ …… …… …… 好了,我編不下去了,這就是科研狗的日常。`doge.jpg` `doge.jpg`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看