一眨眼明天就周末了,一周過的真快! 今天咱們用Python來實現一下動態網頁數據的抓取 最近不是有消息說世界首富馬上要變成中國人了嗎,這要真成了,可就是歷史上首位中國世界首富了! 那我們就以富豪排行榜為例,爬取一下2023年國內富豪五百強,最後實現一下可視化分析。 準備工作 環境使用 Python ...
一眨眼明天就周末了,一周過的真快!
今天咱們用Python來實現一下動態網頁數據的抓取
最近不是有消息說世界首富馬上要變成中國人了嗎,這要真成了,可就是歷史上首位中國世界首富了!
那我們就以富豪排行榜為例,爬取一下2023年國內富豪五百強,最後實現一下可視化分析。
準備工作
環境使用
- Python
- Pycharm
模塊使用
- re 正則表達式
- csv <表格文件> 內置模塊 保存數據
- requests >>> 數據請求
- pandas >>> 保存表格
- pyecharts >>> 可視化模塊
實現流程: <基本公式>
數據來源分析
- 明確需求: 明確採集的網站以及數據內容
- 目標網址 - 抓包分析: 通過瀏覽器自帶工具 (開發者工具)
- 打開開發者工具: F12 / 右鍵點檢查選擇network (網路)
- 點擊下一頁按鈕
數據包地址
代碼實現步驟
- 發送請求 -> 模擬瀏覽器對於url地址發送請求
url地址: 分析找到鏈接地址 - 獲取數據 -> 獲取伺服器返迴響應數據
- 解析數據 -> 提取我們自己需要數據
- 保存數據 -> 保存到表格文件裡面
代碼解析
發送請求
for page in range(1, 35): print(f'{page}' * 20) # url地址: 請求網址 url = f'https://service.ikuyu.cn/XinCaiFu2/pcremoting/bdListAction.do?method=getPage&callback=jsonpCallback&sortBy=assets&order=asc&type=4&keyword=&pageSize=15&year=2023&pageNo={page}&from=jsonp&_=1700739728273' # 模擬瀏覽器: 請求頭 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36' } # 發送請求: 請求方法 <開發者工具> response = requests.get(url=url, headers=headers)
獲取數據
data = response.text
解析數據
re.findall(‘匹配數據’, ‘數據源’) -> 從什麼地方去獲取什麼數據
# json字元串數據 html = re.findall('jsonpCallback\((.*)', data)[0].replace(')', '') print(html) # 轉成json字典 當你轉json數據報錯的時候 html不是完整json數據格式 json_data = json.loads(html) # 鍵值對取值 提取 rows 列表 (根據冒號左邊的內容[鍵], 提取冒號右邊的內容[值]) rows = json_data['data']['rows'] # for迴圈遍歷 for row in rows:
創建文件對象
f = open('data.csv', mode='w', encoding='utf-8', newline='') csv_writer = csv.DictWriter(f, fieldnames=[ '財富', '姓名', '主要公司', '相關行業', '公司總部省份', '公司總部城市', '性別', '年齡', '年份', ]) csv_writer.writeheader()
保存數據
dit = { '財富': row['assets'], '姓名': row['name'], '主要公司': row['company'], '相關行業': row['industry'], '公司總部省份': row['addr'][:2], '公司總部城市': row['addr'][-2:], '性別': row['sex'], '年齡': row['age'], '年份': row['year'], } csv_writer.writerow(dit) print(row) # 源碼+wei❤:python1018 領取
採集數據+可視化代碼我都打包好了,還有視頻講解,都在最後一段代碼中。
效果展示
好了,本次分享就到這結束了,咱們下次見~