網站首頁 編程語言 正文
前言
我們百度搜索一些東西得時候,經常找到文檔里面
然后就會發現需要充值才能復制!怎么可以不花錢也保存呢?
今天就分享給大家一個python獲取文檔數據得方法
環境使用
python 3.8
pycharm
模塊使用
requests >>> 數據請求模塊 pip install requests
docx >>> 文檔保存 pip install python-docx
re 內置模塊 不需要安裝
ctrl + R : 首先你得看得數據, 才能想辦法獲取
安裝python第三方模塊
win + R 輸入 cmd 點擊確定, 輸入安裝命令 pip install 模塊名 (pip install requests) 回車
在pycharm中點擊Terminal(終端) 輸入安裝命令
基本思路流程
一. 分析數據來源
找文檔數據內容, 是在那個url里面生成的
通過開發者工具進行抓包分析
1.打開開發者工具: F12 / 鼠標右鍵點擊檢查選擇network
2.刷新網頁: 讓本網頁數據內容重新加載一遍
如果你是非VIP賬號, 看數據, 圖片形式 —> 把數據<圖片> 獲取下來 —> 做文字識別
3.分析文庫數據內容, 圖片所在地址
獲取所有圖片內容: 文庫數據 --> 圖片形式 —> 所有圖片內容保存下載
文字識別, 把圖片文字識別出來, 保存word文檔里面
二. 代碼實現步驟
1.發送請求, 模擬瀏覽器對于url地址發送請求
圖片數據包
2.獲取數據, 獲取服務器返回響應數據
開發者工具: response
3.解析數據, 提取圖片鏈接地址
4.保存數據, 把圖片內容保存到本地文件夾
5.做文字識別, 識別文字內容
6.把文字數據信息, 保存word文檔里面
代碼展示
# 導入數據請求模塊
import requests
# 導入格式化輸出模塊
from pprint import pprint
# 導入base64
import base64
# 導入os模塊
import os
# 導入文檔模塊
from docx import Document
# 導入正則
import re
# 導入json
import json
文字識別:
- 注冊一個百度云API賬號
- 創建應用 并且去免費領取資源
- 在技術文檔里面 Access Token獲取
- 調用API接口去做文字識別
def get_content(file):
# client_id 為官網獲取的AK, client_secret 為官網獲取的SK
host = 'https://aip.****.com/oauth/2.0/token?grant_type=client_credentials&client_id=Gu7BGsfoKFZjLGvOKP7WezYv&client_secret=rGa2v2FcVnxBDFlerSW5H0D2eO7nRxdp'
response = requests.get(host)
access_token = response.json()['access_token']
'''
通用文字識別(高精度版)
'''
request_url = "https://aip.****.com/rest/2.0/ocr/v1/accurate_basic"
# 二進制方式打開圖片文件
f = open(file, 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
json_data = requests.post(request_url, data=params, headers=headers).json()
# 列表推導式
words = '\n'.join([i['words'] for i in json_data['words_result']])
return words
# # 讀取文件夾里面所有圖片內容
# content_list = []
# files = os.listdir('img\\')
# for file in files:
# filename = 'img\\' + file
# words = get_content(file=filename)
# print(words)
# content_list.append(words)
#
# # 保存word文檔里面
# doc = Document()
# # 添加第一段文檔內容
# content = '\n'.join(content_list)
# doc.add_paragraph(content)
# doc.save('data.docx')
link = 'https://wenku.****.com/aggs/74d1a923482fb4daa58d4b8e?index=0&_wkts_=1670327737660&bdQuery=%E7%AD%94%E9%A2%98'
# 請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
html_data = requests.get(url=link, headers=headers).text
json_data = json.loads(re.findall('var pageData = (.*?);', html_data)[0])
pprint(json_data)
for j in json_data['aggInfo']['docList']:
name = j['title'] # 名字
score = j['score'] # 評分
viewCount = j['viewCount'] # 閱讀量
downloadCount = j['downloadCount'] # 下載量
docId = j['docId'] # 數據包ID
1.發送請求, 模擬瀏覽器對于url地址發送請求
長鏈接, 可以分段寫
問號前面: url鏈接
問號后面: 請求參數/查詢參數
# 確定請求鏈接
url = 'https://wenku.****.com/gsearch/rec/pcviewdocrec'
# 請求參數
data = {
'docId': docId,
'query': name,
'recPositions': ''
}
# 請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
#發送請求
response = requests.get(url=url, params=data, headers=headers)
# <Response [200]> 響應對象, 200 表示請求成功
print(response)
2.獲取數據, 獲取服務器返回響應數據
開發者工具: response
- response.json() 獲取響應json字典數據, 但是返回數據必須是完整json數據格式 花括號 {}
- response.text 獲取響應文本數據, 返回字符串 任何時候都可以, 但是基本獲取網頁源代碼的時候
- response.content 獲取響應二進制數據, 返回字節 保存圖片/音頻/視頻/特定格式文件
- print(response.json()) 打印字典數據, 呈現一行
- pprint(response.json()) 打印字典數據, 呈現多行, 展開效果
3.解析數據, 提取圖片鏈接地址
字典取值: 鍵值對 根據冒號左邊內容[鍵], 提取冒號右邊的內容[值]
# 定義文件名 整型
num = 1
# for循環遍歷, 把列表里面元素一個一個提取出來
for index in response.json()['data']['relateDoc']:
# index 字典呀
pic = index['pic']
print(pic)
# # 4. 保存數據 發送請求 + 獲取數據 二進制數據內容
# img_content = requests.get(url=pic, headers=headers).content
# # 'img\\'<文件夾名字> + str(num)<文件名> + '.jpg'<文件后綴> mode='wb' 保存方式, 二進制保存
# # str(num) 強制轉換成 字符串
# # '圖片\\' 相對路徑, 相對于你代碼的路徑 你代碼在那個地方, 那個代碼所在地方圖片文件夾
# with open('圖片\\' + str(num) + '.jpg', mode='wb') as f:
# # 寫入數據 保存數據 把圖片二進制數據保存
# f.write(img_content)
# # 每次循環 + 1
# print(num)
# num += 1
原文鏈接:https://blog.csdn.net/python56123/article/details/128308881
相關推薦
- 2023-02-06 python?wordcloud庫實例講解使用方法_python
- 2022-08-12 python使用pandas實現篩選功能方式_python
- 2022-04-17 python 提取出字符串括號中的內容
- 2023-09-18 springboot異常處理的一點總結
- 2022-10-31 R語言中set.seed()函數的作用詳解_R語言
- 2022-10-21 K8s解決主機重啟后kubelet無法自動啟動問題(推薦)_云其它
- 2022-12-22 C++?Boost?Foreach超詳細分析講解_C 語言
- 2022-03-12 C++類和對象之多態詳解_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支