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 的描述符 descriptor详解
Feb 27 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
名片管理系统python版
Jan 11 Python
Python文本处理之按行处理大文件的方法
Apr 09 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
用于业余项目的8个优秀Python库
Sep 21 Python
使用Python实现文字转语音并生成wav文件的例子
Aug 08 Python
python matplotlib折线图样式实现过程
Nov 04 Python
Python高级编程之继承问题详解(super与mro)
Nov 19 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
自己做矿石收音机
2021/03/02 无线电
用PHP实现WEB动态网页静态
2006/10/09 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
PHP实现简易计算器功能
2020/08/28 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
让textarea自动调整大小的js代码
2011/04/12 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
jquery+css3打造一款ajax分页插件(自写)
2014/06/18 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
2015/08/06 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
2016/04/08 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
JS 验证码功能的三种实现方式
2018/11/26 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python IDE PyCharm的基本快捷键和配置简介
2015/11/04 Python
Python编程入门之Hello World的三种实现方式
2015/11/13 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
Python的pygame安装教程详解
2020/02/10 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
基于Html5 canvas实现裁剪图片和马赛克功能及又拍云上传图片 功能
2019/07/09 HTML / CSS
优秀英语专业毕业生求职信
2013/11/23 职场文书
运动会方阵解说词
2014/02/12 职场文书
小学生国庆65周年演讲稿范文(2篇)
2014/09/21 职场文书
2014年少先队工作总结
2014/12/03 职场文书
班主任先进事迹材料
2014/12/17 职场文书
监守自盗观后感
2015/06/10 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers