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实现Linux下守护进程的编写方法
Aug 22 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
详解python时间模块中的datetime模块
Jan 13 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
python实现抖音点赞功能
Apr 07 Python
NumPy 数组使用大全
Apr 25 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
Python3 使用selenium插件爬取苏宁商家联系电话
Dec 23 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 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/01/07 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
2009/04/29 PHP
php快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
php提交post数组参数实例分析
2015/12/17 PHP
Laravel框架路由管理简单示例
2019/05/07 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
js图片处理示例代码
2014/05/12 Javascript
Jquery使用css方法改变样式实例
2015/05/18 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
python实时分析日志的一个小脚本分享
2017/05/07 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
python pygame实现2048游戏
2018/11/20 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
python3.7添加dlib模块的方法
2020/07/01 Python
python 实用工具状态机transitions
2020/11/21 Python
中科软测试工程师面试题
2012/06/16 面试题
实习自我评价怎么写
2013/12/02 职场文书
幼儿园教学管理制度
2014/02/04 职场文书
民族学专业求职信
2014/07/28 职场文书
2014年个人总结范文
2015/03/09 职场文书
家长反馈意见及建议
2015/06/03 职场文书
2016大一新生入学教育心得体会
2016/01/23 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android