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映射列表实例分析
Jan 26 Python
Python下载懒人图库JavaScript特效
May 28 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
Apr 20 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
django框架auth模块用法实例详解
Dec 10 Python
没编程基础可以学python吗
Jun 17 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
python 开心网和豆瓣日记爬取的小爬虫
May 29 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
session 的生命周期是多长
2006/10/09 PHP
用php+javascript实现二级级联菜单的制作
2008/05/06 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
浅谈jQuery this和$(this)的区别及获取$(this)子元素对象的方法
2016/11/29 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
解决vue-cli项目webpack打包后iconfont文件路径的问题
2018/09/01 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
如何在 ant 的table中实现图片的渲染操作
2020/10/28 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
PyTorch实现AlexNet示例
2020/01/14 Python
python实现的分层随机抽样案例
2020/02/25 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
Belvilla德国:在线预订度假屋
2018/04/10 全球购物
斐乐美国官方网站:FILA美国
2019/03/01 全球购物
澳洲CFL商城:CHEMIST FOR LESS(中文)
2021/02/28 全球购物
什么是Rollback Segment
2013/04/22 面试题
最新党员的自我评价分享
2013/11/04 职场文书
党章学习思想汇报
2014/01/14 职场文书
四风问题查摆材料
2014/08/25 职场文书
暂停营业通知
2015/04/25 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang