一、基本開發環境
python 3.6
pycharm
二、相關模塊的使用
1
2
3
4
5
6
7
|
import os import requests import time import re import json from docx import document from docx.shared import cm |
安裝python并添加到環境變量,pip安裝需要的相關模塊即可。
三、目標網頁分析
網站的文檔內容,都是以圖片形式存在的。它有自己的數據接口
接口鏈接:
1
|
https: / / openapi.book118.com / getpreview.html?&project_id = 1 &aid = 272112230 &t = f2c66902d6b63726d8e08b557fef90fb&view_token = sqx7ktrz_zakjdi@vcohccwbn_plb3c1&page = 1 &callback = jquery18304186406662159248_1614492889385&_ = 1614492889486 |
接口的請求參數
四、整體思路
- 請求網頁返回response數據(字符串)
- 通過re模塊匹配提取中間的數據(列表)索引取0(字符串)
- 通過json模塊是把提取出來的數據轉換成json模塊
- 通過遍歷獲取每張圖片的url地址
- 保存圖片到本地文件夾
- 把圖片保存到word文檔
- 爬蟲代碼實現
五、爬蟲代碼實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
def download(): content = 0 for page in range ( 1 , 96 , 6 ): # 給定 2秒延時 time.sleep( 2 ) # 獲取時間戳 now_time = int (time.time() * 1000 ) url = 'https://openapi.book118.com/getpreview.html' # 請求參數 params = { 'project_id' : '1' , 'aid' : '272112230' , 't' : 'f2c66902d6b63726d8e08b557fef90fb' , 'view_token' : 'sqx7ktrz_zakjdi@vcohccwbn_plb3c1' , 'page' : f '{page}' , '_' : now_time, } # 請求頭 headers = { 'host' : 'openapi.book118.com' , 'referer' : 'https://max.book118.com/html/2020/0427/8026036013002110.shtm' , 'user-agent' : 'mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/81.0.4044.138 safari/537.36' } response = requests.get(url = url, params = params, headers = headers) # 使用正則表達式提取內容 result = re.findall( 'jsonpreturn\((.*?)\)' , response.text)[ 0 ] # 字符串轉json數據 json_data = json.loads(result)[ 'data' ] # 字典值的遍歷 for value in json_data.values(): content + = 1 # 拼接圖片url img_url = 'http:' + value print (img_url) headers_1 = { 'host' : 'view-cache.book118.com' , 'user-agent' : 'mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/81.0.4044.138 safari/537.36' } # 請求圖片url地址 獲取content二進制數據 img_content = requests.get(url = img_url, headers = headers_1).content # 文件名 img_name = str (content) + '.jpg' # 保存路徑 filename = 'img\\' # 以二進制方式保存 (圖片、音頻、視頻等文件都是以二進制的方式保存) with open (filename + img_name, mode = 'wb' ) as f: f.write(img_content) |
注意點:
1、一定要給延時,不然后面接口數據會請求不到。
2、請求圖片url的時候headers參數需要寫完整,否則保存圖片是無法打開的
3、命名最好是給定數字,1.jpg、2.jpg 這樣,方便后續保存到word
爬蟲部分的代碼還是比較簡單的,沒有什么特別的難度。
爬取這些文檔,都是需要打印或者查詢所以要把這些單張的圖片都保存到word文檔里面。
六、寫入文檔
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
def save_picture(): document = document() path = './img/' lis = os.listdir(path) c = [] for li in lis: index = li.replace( '.jpg' , '') c.append(index) c_1 = sorted ( list ( map ( int , c))) print (c_1) new_files = [( str (i) + '.jpg' ) for i in c_1] for num in new_files: img_path = path + num document.add_picture(img_path, width = cm( 17 ), height = cm( 24 )) document.save( 'tu.doc' ) # 保存文檔 os.remove(img_path) # 刪除保存在本地的圖片 |
到此這篇關于python爬蟲之爬取某文庫文檔數據的文章就介紹到這了,更多相關python爬取文檔數據內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/m0_48405781/article/details/114398129