国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現爬取馬云的微博功能示例

2020-02-16 01:10:49
字體:
來源:轉載
供稿:網友

本文實例講述了Python實現爬取馬云的微博功能。分享給大家供大家參考,具體如下:

分析請求

我們打開 Ajax 的 XHR 過濾器,然后一直滑動頁面加載新的微博內容,可以看到會不斷有Ajax請求發出。

我們選定其中一個請求來分析一下它的參數信息,點擊該請求進入詳情頁面,如圖所示:

可以發現這是一個 GET 請求,請求的參數有 6 個:display、retcode、type、value、containerid 和 page,觀察這些請求可以發現只有 page 在變化,很明顯 page 是用來控制分頁的。

分析響應

如圖所示:

它是一個 Json 格式,瀏覽器開發者工具自動為做了解析方便我們查看,可以看到最關鍵的兩部分信息就是 cardlistInfo 和 cards,將二者展開,cardlistInfo 里面包含了一個比較重要的信息就是 total,經過觀察后發現其實它是微博的總數量,我們可以根據這個數字來估算出分頁的數目。

發現它又有一個比較重要的字段,叫做 mblog,繼續把它展開,發現它包含的正是微博的一些信息。比如 attitudes_count 贊數目、comments_count 評論數目、reposts_count 轉發數目、created_at 發布時間、text 微博正文等等,得來全不費功夫,而且都是一些格式化的內容,所以我們提取信息也更加方便了。

這樣我們可以請求一個接口就得到 10 條微博,而且請求的時候只需要改變 page 參數即可。這樣我們只需要簡單做一個循環就可以獲取到所有的微博了。

實戰演練

在這里我們就開始用程序來模擬這些 Ajax 請求,將馬云的所有微博全部爬取下來。

首先我們定義一個方法,來獲取每次請求的結果,在請求時page 是一個可變參數,所以我們將它作為方法的參數傳遞進來,代碼如下:

from urllib.parse import urlencodeimport requestsbase_url = 'https://m.weibo.cn/api/container/getIndex?'headers = {  'Host': 'm.weibo.cn',  'Referer': 'https://m.weibo.cn/u/2145291155',  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',  'X-Requested-With': 'XMLHttpRequest',}def get_page(page):  params = {    'display': '0',    'retcode': '6102',    'type': 'uid',    'value': '2145291155',    'containerid': '1076032145291155',    'page': page  }  url = base_url + urlencode(params)  try:    response = requests.get(url, headers=headers)    if response.status_code == 200:      return response.json()  except requests.ConnectionError as e:    print('Error', e.args)

首先在這里我們定義了一個 base_url 來表示請求的 URL 的前半部分,接下來構造了一個參數字典,其中 display、retcode、 type、value、containerid 是固定的參數,只有 page 是可變參數,接下來我們調用了 urlencode() 方法將參數轉化為 URL 的 GET請求參數,即類似于display=0&retcode=6102&type=uid&value=2145291155&containerid=1076032145291155&page=2 這樣的形式,隨后 base_url 與參數拼合形成一個新的 URL,然后我們用 Requests 請求這個鏈接,加入 headers 參數,然后判斷響應的狀態碼,如果是200,則直接調用 json() 方法將內容解析為 Json 返回,否則不返回任何信息,如果出現異常則捕獲并輸出其異常信息。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阜平县| 金塔县| 宜兰县| 封开县| 鄯善县| 承德县| 瓮安县| 色达县| 双桥区| 宁蒗| 清涧县| 峨山| 宁河县| 滨海县| 扶余县| 嘉鱼县| 汕尾市| 德清县| 五原县| 都江堰市| 田阳县| 松江区| 肃北| 正安县| 弥勒县| 板桥市| 岗巴县| 海门市| 甘孜县| 潞西市| 大足县| 汶上县| 陆川县| 海盐县| 屯门区| 兴业县| 通海县| 石台县| 金门县| 永顺县| 麻栗坡县|