使用Python獲取建築網站數據,進行可視化分析,並實現網站JS解密!

来源:https://www.cnblogs.com/hahaa/archive/2023/10/30/17796267.html
-Advertisement-
Play Games

哈嘍兄弟們,今天來實現一下建築市場公共服務平臺的數據採集,順便實現一下網站的JS解密。 話不多說,我們直接開始今天的內容。 首先我們需要準備這些 環境使用 Python 3.8 Pycharm 模塊使用 requests --> pip install requests execjs --> pip ...


哈嘍兄弟們,今天來實現一下建築市場公共服務平臺的數據採集,順便實現一下網站的JS解密。

話不多說,我們直接開始今天的內容。

 

首先我們需要準備這些

環境使用

  • Python 3.8
  • Pycharm

模塊使用

  • requests --> pip install requests
  • execjs --> pip install PyExecJS
  • json

爬蟲基本流程思路

一. 數據來源分析

1. 明確需求: 明確採集的網站以及數據內容
    - 網址: https://jzsc.mohurd.gov.cn/data/company
    - 數據: 企業信息

初學者同學: 瀏覽器導航欄上面鏈接是什麼, 請求什麼鏈接

2. 抓包分析: 通過瀏覽器去分析, 我們需要數據具體在那個鏈接中
    - 靜態網頁: 刷新網頁查看數據包內
    - 動態網頁: 點擊到下一頁數據內容 / 下滑到下一頁的數據內容
    * 打開開發者工具: F12
    * 點擊第二頁數據內容
    加密數據: https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list?pg=1&pgsz=15&total=450

二. 代碼實現步驟

1. 發送請求 -> 模擬瀏覽器對於url地址發送請求
    url地址: 通過抓包分析找到鏈接地址
2. 獲取數據 -> 獲取伺服器返迴響應數據
    開發者工具: response 響應
3. 解析數據 -> 獲取加密數據內容
4. 保存數據 -> 通過解密, 還原明文數據 保存表格文件中

爬蟲部分代碼

# 導入數據請求模塊 
import requests
# 導入模塊
import execjs
# 導入json模塊
import json
# 導入csv模塊
import csv

# 創建文件對象
csv_file = open('data.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(csv_file, fieldnames=[
    '企業名稱',
    '統一社會信用代碼',
    '法人',
    '註冊屬地省份',
    '註冊屬地城市',
])
csv_writer.writeheader()
# 模擬瀏覽器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
}
for page in range(30):
    # 請求鏈接
    url = f'https://jzsc.mohurd.gov.cn/APi/webApi/dataservice/query/comp/list?pg={page}&pgsz=15&total=450'
    # 發送請求 關鍵字傳參, 指定參數傳入到那個位置
    response = requests.get(url=url, headers=headers)
    # 2. 獲取響應數據 --> 加密數據
    data = response.text
    # 3. 解密數據 -> 把密文轉成明文 通過python代碼調用JS代碼
    f = open('建築平臺.js', mode='r', encoding='utf-8').read()
    # 編譯js文件
    js_code = execjs.compile(f)
    # 調用js代碼的函數 data->密文數據
    result = js_code.call('m', data)
    # 把json字元串數據, 轉成json字典數據
    json_data = json.loads(result)
    # for 迴圈遍歷
    for index in json_data['data']['list']:
        try:
            info = index['QY_REGION_NAME'].split('-')
            if len(info) == 2:
                area_1 = info[0]  # 省份
                area_2 = info[1]  # 城市
            else:
                area_1 = info[0]  # 省份
                area_2 = '未知'
            dit = {
                '企業名稱': index['QY_NAME'],
                '統一社會信用代碼': index['QY_ORG_CODE'],
                '法人': index['QY_FR_NAME'],
                '註冊屬地省份': area_1,
                '註冊屬地城市': area_2,
            }
            csv_writer.writerow(dit)
            print(dit)
        except:
            pass

 

可視化部分代碼

 

import pandas as pd
from pyecharts import options as opts # 配置項
from pyecharts.charts import Pie # 導入餅圖
# 讀取文件
df = pd.read_csv('data.csv')
print(df.head())
info = df['註冊屬地省份'].value_counts().index.to_list() # 數據類目
num = df['註冊屬地省份'].value_counts().to_list() # 數據數量
print(info)
print(num)
c = (
    Pie()
    .add(
        "",
        [list(z) for z in zip(info,num,)],
        center=["40%", "50%"],
    )
    .set_global_opts(
        # 設置標題
        title_opts=opts.TitleOpts(title="註冊省份占比分佈"),
        legend_opts=opts.LegendOpts(type_="scroll", pos_left="80%", orient="vertical"),
    )
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
    # 保存html文件
    .render("註冊省份占比分佈.html")
)
# 對此我錄製了詳細的視頻講解,跟源碼一起打包好了。
# 都放在這個摳裙了 872937351

 

 

JS解密

const CryptoJS = require('crypto-js')
 
function b(t) {
    var e = CryptoJS.enc.Hex.parse(t)
        , n = CryptoJS.enc.Base64.stringify(e)
        , a = CryptoJS.AES.decrypt(n, f, {
        iv: m,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    })
        , r = a.toString(CryptoJS.enc.Utf8);
    return r.toString()
}
 
var f = CryptoJS.enc.Utf8.parse("jo8j9wGw%6HbxfFn")
var m = CryptoJS.enc.Utf8.parse("0123456789ABCDEF");
data = '95780ba0943730051dccb5fe3918f9fe9f9c759baf71007abbbc84deedcdd81cf58832bbc54e50a84c41faa2c40030710f9dcd7c6d7c8c59d5ec869f8d20495c96d9c5cefdb18e82f51bc97e693fe3f42cf0c5f2e7b9d630185fd13c4d3e8aa7c2fea290184736151f6b4ac09c903e2fb2ea29428c2daa2244f2770b59500b9959e9fa5ab0e0482499dc8cfb0b6b362a3b953b8f67e5e64f9fe3b9c4b7e2e43d139e74713e5d25d54286cff02b2d01cfd75abfd07161e55990343d47c42affd49c67db8e6d7b3281d8e0d4d7f7f665362b38b8e25002fea25a54db8ff11bbd365330b02e965314c0dd2f5f142849986dd383fd5707f1f3fe17898bab6f51cc3acaa08510ac99d9988d1114dc81e9849e2203490d0599a6a7557c65083ae61a59d6119cfde6b43c05cdb62c49ffbaf203cf1c91e31ea2a8d9f1390e134f84d236dc9bcaa5b538478e5bb9db45d5350578ec02f288dbac4fc86dbc8c6e8586ace2a8e05e0594e143a9218aead1815919c1fd8a9b7071aab85e09afb24f42199cd68b72cb5e6fe378afe274b5985c1e12e7cfcbf6d9ffcaed6edd0eca8cc1249a5407c50837ec5547bf81b45e8d096d19b5cc6d1321119b8836f5ee4b3df301d9c32a517a7968587d904e168702c16071c6ef9fd5981b432a5d82898caad049c603e718d2b23b01958444d941dae01e9328dbfeaee7adc6a4d1742002a3c553ef8e7cff9277befdd1e63ae5bbcebf9588f4bb4f686f5be5b1929ab388035d392eb1d0eef5cf1cb6a6cba6487d868dfb28acfaf945b1915a2482682e8d88840c9060b39b53fd90c969dd1e2ffa3535c750ce95265b2beb738ee1166c000754399cbe061db59078926f643936b2cdb2ef5bda6ed3354df7b56d1881edb6be9febb5a66a5352851c2156e7fe61b74fd0a0c6acffbc80513895f5bb0fd7eb68b7dab775c7385d6b216df90a8d1a09995716bd374796c2d94aec68d6c97d78540c3896affc2e567caf527553f6ca784117cbecac91293ca519d4c8342bb64046ab7bffb306a32d2cad525b844b43ecf10dcb6e60f2248de9f52b592d9d67d923a777e3a2a130b1a6bc435bb711d7bfcaf5f7f2b1a8228fdd02c0b7506b06fb5a3f7093a9398a2e8421ab22c466e2e473f400d3dc45dbd8215f37583e9537d89424feb5a0a09ad388a5cc1ae8a015a867c69c76158be6a31cd0743b86d8ea33473053057eb0299970972aec9a7803b7465d797da0bc8f9a08a247ba9cef19710cec257c4405b01d1da39bd1ce13d2bd8786483e1b'
console.log(b(data))

 

好了,今天的分享就到這結束了,咱們下次見!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、字元串類型的轉換 1、自動轉換 <script> var str = 'hello'; var num = 100; console.log(str+num); console.log(typeof (str+num)); </script> 2、強制轉換 String(),object.toS ...
  • 基於electron27+react18+arco電腦端後臺管理程式EXE實例ElectronRAdmin。 electron27-react18-admin 基於跨平臺技術Electron集成Vite.js構建桌面端React18後臺管理系統應用解決方案。支持dark/light主題、中英文/繁體 ...
  • 拉取鏡像 docker pull mongo 使用 docker 安裝 mongodb docker run --restart=always --name mongodb -v ~/docker/mongo:/data/db -d -p 27017:27017 -e MONGO_INITDB_RO ...
  • Lock實現線程間定製化通信 案例 要求 三個線程,AA BB CC AA線程列印5次,BB線程列印10次,CC線程列印15次 代碼實現 import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lo ...
  • 基礎代碼 只包含最簡單的代碼,不包含亂碼解決、文件上傳。 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; imp ...
  • 不論是在團隊寫作還是在個人工作中,PDF 文檔往往會經過多次修訂和更新。掌握 PDF 文檔內容的變化對於管理文檔有極大的幫助。通過對比 PDF 文檔,用戶可以快速找出文檔增加、刪除和修改的內容,更好地瞭解文檔的演變過程,輕鬆地管理文檔。本文將介紹如何在 Java 程式中通過代碼快速比較兩個 PDF ...
  • 作者:Escape 來源:https://www.escapelife.site/posts/38c81b25.html 服務日誌收集方案:Filebeat + Graylog! 當我們公司內部部署很多服務以及測試、正式環境的時候,查看日誌就變成了一個非常剛需的需求了。是多個環境的日誌統一收集,然後 ...
  • 一、SpringCloud 簡介 Spring Cloud 是一系列框架的有序集合如服務發現註冊、配置中心、消息匯流排、負載均衡、熔斷器、數據監控等。 SpringCloud 將多個服務框架組合起來,通過Spring Boot進行再封裝,屏蔽掉了複雜的配置和實現原理,最終給開發者提供了一套簡單易懂、易 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...