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 获取et和excel的版本号
Apr 09 Python
Python实现二分法算法实例
Feb 02 Python
介绍Python的Urllib库的一些高级用法
Apr 30 Python
Python编写一个闹钟功能
Jul 11 Python
手把手教你python实现SVM算法
Dec 27 Python
Python语言描述随机梯度下降法
Jan 04 Python
NumPy.npy与pandas DataFrame的实例讲解
Jul 09 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
python虚拟环境完美部署教程
Aug 06 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
通过代码实例了解Python sys模块
Sep 14 Python
python 实现超级玛丽游戏
Nov 25 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
PHP遍历数组的方法汇总
2015/04/30 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
CSS中一些@规则的用法小结
2021/03/09 HTML / CSS
Javascript模块模式分析
2008/05/16 Javascript
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
Angular.js指令学习中一些重要属性的用法教程
2017/05/24 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
浅谈Vue数据响应
2018/11/05 Javascript
JS实现简易留言板增删功能
2020/02/08 Javascript
vue组件库的在线主题编辑器的实现思路
2020/04/03 Javascript
nginx部署多个vue项目的方法示例
2020/09/06 Javascript
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
分析在Python中何种情况下需要使用断言
2015/04/01 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
Python获取网段内ping通IP的方法
2019/01/31 Python
在python里从协程返回一个值的示例
2019/02/19 Python
啥是佩奇?使用Python自动绘画小猪佩奇的代码实例
2019/02/20 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
pytorch常见的Tensor类型详解
2020/01/15 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
软件测试英文面试题
2012/10/14 面试题
集团薪酬管理制度
2014/01/13 职场文书
保管员岗位职责
2015/02/14 职场文书
中秋节晚会开场白
2015/05/29 职场文书
《一面五星红旗》教学反思
2016/02/23 职场文书