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 相关文章推荐
动态创建类实例代码
Oct 07 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python实现远程控制电脑
May 23 Python
通过PYTHON来实现图像分割详解
Jun 26 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
pandas中read_csv的缺失值处理方式
Dec 19 Python
python实现滑雪游戏
Feb 22 Python
PyCharm MySQL可视化Database配置过程图解
Jun 09 Python
Python和Bash结合在一起的方法
Nov 13 Python
Python批量修改xml的坐标值全部转为整数的实例代码
Nov 26 Python
Python tkinter实现日期选择器
Feb 22 Python
解决python绘图使用subplots出现标题重叠的问题
Apr 30 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
PHP 中文乱码解决办法总结分析
2009/07/30 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP关联链接常用代码
2012/11/05 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
PHP中cookie和session的区别实例分析
2014/08/28 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
PHP编程实现的TCP服务端和客户端功能示例
2018/04/13 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
nodejs实现获取某宝商品分类
2015/05/28 NodeJs
JQuery节点元素属性操作方法
2015/06/11 Javascript
JavaScript中最容易混淆的作用域、提升、闭包知识详解(推荐)
2016/09/05 Javascript
关于Bootstrap按钮组件消除黄框的方法
2017/05/19 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
2017/09/25 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
python实现复制整个目录的方法
2015/05/12 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
Python button选取本地图片并显示的实例
2019/06/13 Python
英国体育器材进口商店:UK Sport Imports
2017/03/14 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
入党申请书自我鉴定
2013/10/12 职场文书
表彰先进集体通报
2014/01/12 职场文书
小学新学期教师寄语
2014/01/18 职场文书
应届毕业生应聘自荐信范文
2014/02/26 职场文书
2015年超市收银员工作总结
2015/04/25 职场文书
二审代理词范文
2015/05/25 职场文书
升学宴学生致辞
2015/07/27 职场文书