成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何利用Python爬蟲實現給微信群發新聞早報?

開發 后端
后期更改了一種方案,通過修改爬蟲方案,創建 API 服務,編寫 App 去獲取數據,然后手動發送到微信群,本篇文章將和大家詳細聊聊具體的實現過程。

[[433136]]

 1. 場景

經常有小伙伴在交流群問我,每天的早報新聞是怎么獲取的?

其實,早期使用的方案,是利用爬蟲獲取到一些新聞網站的標題,然后做了一些簡單的數據清洗,最后利用 itchat 發送到指定的社群中。

由于爬蟲面對網站改版的不穩定性及 itchat 不安全性,所以放棄了這種方案。

后期更改了一種方案,通過修改爬蟲方案,創建 API 服務,編寫 App 去獲取數據,然后手動發送到微信群。

本篇文章將和大家詳細聊聊具體的實現過程。

2. 數據爬取

第 1 步,通過 Python 爬蟲獲取數據

獲取方式有 2 種,分別是:已有的新聞早報網站、新聞網站的頭條新聞

選擇一種爬蟲方式,就能很快地爬取到目標網站的數據

第 2 步,數據清洗,排序

將爬取到的數據先進行一次關鍵字篩選,然后按照點贊或者閱讀數按照熱點進行排序

第 3 步,參數化,去重

去掉數據中重復的新聞,然后將最后展示的數目參數化 

  1. # 按照點贊數目,降序排列  
  2. news_sorted_pro = sorted(news, key=itemgetter('news_approve_num'), reverse=True 
  3. result = []  
  4. for news_sorted_item in news_sorted_pro:  
  5.       result.append(news_sorted_item.get('title'))  
  6. # 去重  
  7. result = sorted(set(result), key=result.index)  
  8. # 只取前12條數據  
  9. resultresult = result[:self.news_num] if len(result) >= self.news_num else result 

需要注意的是,由于新聞網站會經常改版,建議爬取多個新聞網站,做好異常處理,做一個優先級,如果一個網站爬取數據失敗,切換到下一個級別的網站爬取數據

3. 服務化

將數據服務化,即編寫 API,目的是為了方便終端調用

如果使用 Python 編寫 API,建議使用 FastAPI 或 Flask 框架,因為這兩個框架開發 API 方便快捷,以 FastAPI 為例:

第 1 步,安裝依賴

包含 FastAPI 框架及 hypercorn 依賴,hypercorn 是獨立的 ASGI 服務器,方便 FastAPI 項目的部署 

  1. # FastAPI框架  
  2. pip3 install fastapi  
  3. pip3 install hypercorn  

第 2 步,編寫 API

使用 FastAPI 很方便,不到 10 行代碼就能編寫一個接口服務。

只需要實例化 FastAPI 對象,利用裝飾器指定請求方法和路徑即可,調用上面的爬蟲方法即可。 

  1. from fastapi import FastAPI  
  2. # 實例化 
  3. app = FastAPI()  
  4. # API,Get方式  
  5. @app.get("/last_news")  
  6. def get_last_news():  
  7.     """  
  8.     最新的新聞  
  9.     :return:  
  10.     """  
  11.     news = get_news()  
  12.     data = {  
  13.         'code': 0,  
  14.         'news': news  
  15.     }  
  16.     # 封裝  
  17.     return data 

如要想本地調試 API,可以通過 uvicorn 命令運行項目。

  1. # 運行項目  
  2. uvicorn news:app --reload 

然后訪問下面的地址,查看返回的新聞數據

http://127.0.0.1:8000/last_news

第 3 步,生成依賴遷移文件

使用 pip freeze 命令將在本地生成依賴遷移文件 

  1. # 生成遷移文件  
  2. pip freeze > requirements.txt 

第 4 步,上傳代碼

將代碼上傳到代碼托管平臺,比如:碼云、GitLab 等

第 5 步,服務器拉取代碼

服務器中通過 git 拉取代碼,并通過依賴文件一鍵安裝所有依賴 

  1. # 安裝依賴  
  2. pip3 install -r requirements.txt 

第 6 步,運行服務

使用 hypercorn 運行 FastAPI 項目,使進程一直在后臺運行,并保存運行日志信息 

  1. # 后臺運行  
  2. # 保存日志,綁定端口號為:8000  
  3. # nohup hypercorn news:app --bind 0.0.0.0:8000 > /news.log 2>&1 & 

需要注意的是,項目綁定的端口號需要在防火墻和云服務器安全組開啟

當然,如果使用 Java 編寫 API,推薦使用 Spring Boot,可以快速開發一個 Restful API 服務

4. 編寫 App

完成 API 服務之后,接下來就是在終端編寫一款 App 去訪問 API,拿到數據并展示出來

以編寫一款 Android 應用為例

首先,我們在界面上放置一個文本顯示框和一個按鈕控件

然后,對按鈕控件設置點擊事件的監聽 

  1. get_news_btn = findViewById(R.id.get_news_btn);  
  2. //監聽事件  
  3. get_news_btn.setOnClickListener(this);  
  4. @Override  
  5. public void onClick(View v)  
  6.  
  7.     switch (v.getId())  
  8.     {  
  9.         case R.id.get_news_btn:  
  10.             news_et.setText("獲取中。。。");  
  11.             getNewsMet();  
  12.             break;  
  13.         }  
  14.     } 

接著,使用 Android 的網絡請求框架 OkHttp 框架調用 API 獲取數據 

  1. /***  
  2. * 獲取新聞  
  3. */  
  4. private void getNewsMet()  
  5.  
  6.      OkHttpClient okHttpClient = new OkHttpClient();  
  7.      //構建請求信息:連接請求url 請求方法method 請求頭部headers 請求體body 標簽tag  
  8.      Request request = new Request.Builder().url(url).get().build();  
  9. //        Call call = okHttpClient.newCall(request);  
  10.      okHttpClient.newCall(request).enqueue(new Callback() 
  11.      {  
  12.           @Override  
  13.           public void onFailure(Call call, IOException e)  
  14.           { 
  15.                Log.d("xag", "獲取失敗"); 
  16.               showResult(false, "");  
  17.           }   
  18.           @Override 
  19.           public void onResponse(Call call, final Response response) throws IOException  
  20.           {  
  21.               Log.d("xag", "獲取成功")  
  22.               parseJsonWithJsonObject(response);  
  23.           }  
  24.       });  

最后,將新聞數據顯示在文本控件中,并復制到系統剪切板 

  1. private void copyToClip(String content)  
  2.      //獲取剪貼板管理器:  
  3.      ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);  
  4.      // 創建普通字符型ClipData 
  5.      ClipData mClipData = ClipData.newPlainText("Label", content);  
  6.      // 將ClipData內容放到系統剪貼板里。  
  7.      if (null != cm)  
  8.      {  
  9.          cm.setPrimaryClip(mClipData);  
  10.      }  

如果只有 iOS 設備,使用 Xcode 編寫 iOS 應用,建議將 Xcode 升級到 11.0 以上

創建項目的時候,推薦使用 SwiftUI 構建 UI 界面,然后利用 CocoaPods 添加 Alamofire 網絡請求依賴庫,其他操作步驟和 Android 端類似,這里不展開說明 

  1. # Uncomment the next line to define a global platform for your project  
  2. source 'https://github.com/CocoaPods/Specs.git'  
  3. platform :ios, '9.0'  
  4. use_frameworks!  
  5. target 'news_eve' do  
  6.   # Comment the next line if you don't want to use dynamic frameworks  
  7.   pod 'Alamofire'  
  8.   pod 'SwiftyJSON'  
  9.   pod 'HandyJSON'  
  10.   # Pods for news_eve  
  11. end 

5. 最后

上面步驟只需要點擊 App 中的按鈕,早報新聞就復制到系統剪切板了,接著可以轉發到多個微信群了

當然,最后一步也可以利用 SoloPi 或者無障礙,將內容利用自動化操作,一鍵轉發出去 

責任編輯:龐桂玉 來源: 菜鳥學Python
相關推薦

2020-04-10 12:25:28

Python爬蟲代碼

2014-11-20 09:38:40

C#

2013-04-12 01:22:02

2020-11-03 10:35:39

Python

2019-12-16 17:25:04

Python微信群同步直播

2013-05-22 10:58:09

微信公眾賬號微信

2020-05-16 12:06:32

微信公眾平臺Python開發

2015-11-12 09:39:28

微信紅包實現

2013-11-13 07:19:19

2024-12-19 10:00:00

Python發送消息編程

2013-08-08 10:13:25

微信

2013-05-24 09:35:46

Java實現

2017-01-04 18:09:23

Android微信支付快速實現

2018-06-05 15:04:19

爬蟲微信服務器

2021-11-06 19:43:34

Python微信服務器

2018-12-11 10:39:14

Python服務器微信

2020-03-18 09:23:24

Python數據SQL

2018-02-26 08:44:35

Python微信數據分析

2014-09-24 13:11:34

信企業號

2021-10-15 09:00:02

Python日期轉換Python基礎
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区二区av在线 | 国产精品视频久久 | 日韩一区二区精品 | 日韩综合| 久久久www | 一区二区三区成人 | 自拍视频一区二区三区 | 伊人久久成人 | 亚洲精品天堂 | 国产精品免费大片 | 99re6在线视频 | 亚洲午夜电影 | 午夜精品一区二区三区在线观看 | 国产精品日韩 | 91在线区 | 久久精品亚洲精品国产欧美 | 日一区二区| 亚洲精品视频导航 | 人人九九精| 亚洲一区二区在线视频 | www.日日干| 久久9热 | 欧美性成人 | 美女逼网站| 蜜臀久久99精品久久久久久宅男 | 国产精品视频久久久 | 亚洲综合色 | japanhd美女动 | 精品视频一区二区三区在线观看 | 日韩在线不卡视频 | 欧美日韩中文字幕在线 | 狠狠涩 | 五月综合激情在线 | 狠狠的干狠狠的操 | 国产精品久久久久久久久久久久 | 日韩精品一区二区三区在线 | 日本不卡免费新一二三区 | 国产精品久久在线 | 国产一区精品 | 精品一区二区三区免费毛片 | 欧美性生活网 |