Python爬虫之爬取某文库文档数据


Posted in Python onApril 21, 2021

一、基本开发环境

Python 3.6

Pycharm

二、相关模块的使用

import os
import requests
import time
import re
import json
from docx import Document
from docx.shared import Cm

安装Python并添加到环境变量,pip安装需要的相关模块即可。

三、目标网页分析

Python爬虫之爬取某文库文档数据

网站的文档内容,都是以图片形式存在的。它有自己的数据接口

接口链接:

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

接口的请求参数

Python爬虫之爬取某文库文档数据

四、整体思路

  • 请求网页返回response数据(字符串)
  • 通过re模块匹配提取中间的数据(列表)索引取0(字符串)
  • 通过json模块是把提取出来的数据转换成json模块
  • 通过遍历获取每张图片的url地址
  • 保存图片到本地文件夹
  • 把图片保存到word文档
  • 爬虫代码实现

五、爬虫代码实现

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文档里面。

六、写入文档

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爬取文档数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 基础学习第二弹 类属性和实例属性
Aug 27 Python
Python中Random和Math模块学习笔记
May 18 Python
python 实时遍历日志文件
Apr 12 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
python回调函数中使用多线程的方法
Dec 25 Python
使用Python对微信好友进行数据分析
Jun 27 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
对pyqt5之menu和action的使用详解
Jun 20 Python
python字典和json.dumps()的遇到的坑分析
Mar 11 Python
pyspark 随机森林的实现
Apr 24 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
Python面试不修改数组找出重复的数字
May 20 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
php split汉字
2009/06/05 PHP
PHP以及MYSQL日期比较方法
2012/11/29 PHP
php读取3389的脚本
2014/05/06 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
裁剪字符串trim()自定义改进版
2013/04/10 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
JS Replace()的高级使用方法介绍
2013/06/29 Javascript
JavaScript中的继承方式详解
2015/02/11 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
python调用fortran模块
2016/04/08 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
大学生求职工作的自我评价
2014/02/13 职场文书
小学毕业感言50字
2014/02/16 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
英语故事演讲稿
2014/04/29 职场文书
煤矿安全生产标语
2014/06/06 职场文书
德育标兵事迹材料
2014/08/24 职场文书
庆国庆国旗下讲话稿2014
2014/09/21 职场文书
加强作风建设工作总结
2014/10/23 职场文书
期末复习计划
2015/01/19 职场文书
主持人开幕词
2015/01/29 职场文书
Matlab如何实现矩阵复制扩充
2021/06/02 Python
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang