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实现二分法算法实例
Feb 02 Python
基于循环神经网络(RNN)的古诗生成器
Mar 26 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
python 利用栈和队列模拟递归的过程
May 29 Python
python中验证码连通域分割的方法详解
Jun 04 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
pyqt5 使用label控件实时显示时间的实例
Jun 14 Python
python pandas模块基础学习详解
Jul 03 Python
Django REST Framework之频率限制的使用
Sep 29 Python
Python打印特殊符号及对应编码解析
May 07 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
给jQuery方法添加回调函数一款插件的应用
2013/01/21 Javascript
运算符&&的三个不同层次
2013/04/07 Javascript
jQuery的attr与prop使用介绍
2013/10/10 Javascript
深入理解javascript动态插入技术
2013/11/12 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
node.js中的fs.rmdir方法使用说明
2014/12/16 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
javascript中html字符串转化为jquery dom对象的方法
2015/08/27 Javascript
vue,angular,avalon这三种MVVM框架优缺点
2016/04/27 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
2018/08/06 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
[01:03]DOTA2新的征程 你的脚印值得踏上
2014/08/13 DOTA
Python enumerate遍历数组示例应用
2008/09/06 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
python实现扫描ip地址的小程序
2019/04/16 Python
django 类视图的使用方法详解
2019/07/24 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
2014标准社保办理委托书
2014/10/06 职场文书
2014年教育实习工作总结
2014/11/22 职场文书
使用HTML+Css+transform实现3D导航栏的示例代码
2021/03/31 HTML / CSS