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进程类subprocess的一些操作方法例子
Nov 22 Python
Python基于Tkinter实现的记事本实例
Jun 17 Python
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
python构建自定义回调函数详解
Jun 20 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
Python3读取Excel数据存入MySQL的方法
May 04 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
python爬虫爬取微博评论案例详解
Mar 27 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
基于Python的接口自动化读写excel文件的方法
Jan 15 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 Python
Django路由层如何获取正确的url
Jul 15 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
WHOIS类的修改版
2006/10/09 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
php smarty模版引擎中的缓存应用
2009/12/11 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
深入理解PHP 数组之count 函数
2016/06/13 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
JavaScript去掉数组中的重复元素
2011/01/13 Javascript
jQuery版Tab标签切换
2011/03/16 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jQuery取得设置清空select选择的文本与值
2014/07/08 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
VUE脚手架的下载和配置步骤详解
2019/04/01 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
css3 利用transform打造走动的2D时钟
2020/10/20 HTML / CSS
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
总监职责范文
2013/11/09 职场文书
腾讯广告词
2014/03/19 职场文书
运动会加油稿50字
2015/07/21 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
mysql 联合索引生效的条件及索引失效的条件
2021/11/20 MySQL
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript