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连接DB2数据库
Aug 27 Python
Python中第三方库Requests库的高级用法详解
Mar 12 Python
Python实现类的创建与使用方法示例
Jul 25 Python
AI人工智能 Python实现人机对话
Nov 13 Python
使用python实现ANN
Dec 20 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Python字符串逆序的实现方法【一题多解】
Feb 18 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
django美化后台django-suit的安装配置操作
Jul 12 Python
如何使用pdb进行Python调试
Jun 30 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
Python数据分析之pandas函数详解
Apr 21 #Python
python基础之停用词过滤详解
Apr 21 #Python
python 模拟在天空中放风筝的示例代码
如何使用Python对NetCDF数据做空间相关分析
python实现简单倒计时功能
python Polars库的使用简介
python基础之匿名函数详解
Apr 21 #Python
You might like
第十二节 类的自动加载 [12]
2006/10/09 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
使用php清除bom示例
2014/03/03 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
详解javascript立即执行函数表达式IIFE
2017/02/13 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
layui table复选框禁止某几条勾选的实例
2019/09/20 Javascript
原生Vue 实现右键菜单组件功能
2019/12/16 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
Django中Forms的使用代码解析
2018/02/10 Python
python基础教程项目三之万能的XML
2018/04/02 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
css3动画 小球滚动 js控制动画暂停
2019/11/29 HTML / CSS
中科前程Java笔试题
2016/11/20 面试题
会计与审计专业自荐信范文
2014/03/15 职场文书
《恐龙》教学反思
2014/04/27 职场文书
网络技术专业求职信
2014/05/02 职场文书
商场促销活动总结
2014/07/10 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
优秀教师单行材料
2014/12/16 职场文书
工作失职检讨书
2015/01/26 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书
公司管理建议书
2015/09/14 职场文书