Python爬取某网站文档数据完整教程(附源码)
基本开发环境 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
- Python 3.6
- Pycharm
相关模块的使用 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
import os
import requests
import time
import re
import json
from docx import Document
from docx.shared import Cm
安装Python并添加到环境变量,pip安装需要的相关模块即可。
目标网页分析 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)

网站的文档内容,都是以图片形式存在的。它有自己的数据接口
接口链接:
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
接口的请求参数

整体思路 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
- 请求网页返回response数据(字符串)
- 通过re模块匹配提取中间的数据(列表)索引取0(字符串)
- 通过json模块是把提取出来的数据转换成json模块
- 通过遍历获取每张图片的url地址
- 保存图片到本地文件夹
- 把图片保存到word文档
- 爬虫代码实现
爬虫代码实现 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
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': 'Python程序设计试题库(95页)-原创力文档',
'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': '403 Forbidden',
'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文档里面。
写入文档 (https://jq.qq.com/?_wv=1027&k=NofUEYzs)
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爬取某网站文档数据完整教程(附源码)的更多相关文章
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- python3爬取墨迹天气并发送给微信好友,附源码
需求: 1. 爬取墨迹天气的信息,包括温湿度.风速.紫外线.限号情况,生活tips等信息 2. 输入需要查询的城市,自动爬取相应信息 3. 链接微信,发送给指定好友 思路比较清晰,主要分两块,一是爬虫 ...
- python爬取某个网站的图片并保存到本地
python爬取某个网站的图片并保存到本地 #coding:utf- import urllib import re import sys reload(sys) sys.setdefaultenco ...
- python 爬取天猫美的评论数据
笔者最近迷上了数据挖掘和机器学习,要做数据分析首先得有数据才行.对于我等平民来说,最廉价的获取数据的方法,应该是用爬虫在网络上爬取数据了.本文记录一下笔者爬取天猫某商品的全过程,淘宝上面的店铺也是类似 ...
- 用Python爬取斗鱼网站的一个小案例
思路解析: 1.我们需要明确爬取数据的目的:为了按热度查看主播的在线观看人数 2.浏览网页源代码,查看我们需要的数据的定位标签 3.在代码中发送一个http请求,获取到网页返回的html(需要注意的是 ...
- Python爬取招聘网站数据,给学习、求职一点参考
1.项目背景 随着科技的飞速发展,数据呈现爆发式的增长,任何人都摆脱不了与数据打交道,社会对于“数据”方面的人才需求也在不断增大.因此了解当下企业究竟需要招聘什么样的人才?需要什么样的技能?不管是对于 ...
- python爬取招聘网站数据
# -*- coding: utf-8 -*- # 爬虫分析 from bs4 import BeautifulSoup from lxml import etree from selenium im ...
- 利用Python爬取电影网站
#!/usr/bin/env python #coding = utf-8 ''' 本爬虫是用来爬取6V电影网站上的电影资源的一个小脚本程序,爬取到的电影链接会通过网页的形式显示出来 ''' impo ...
- Python爬取6271家死亡公司数据,一眼看尽十年创业公司消亡史!
小五利用python将其中的死亡公司数据爬取下来,借此来观察最近十年创业公司消亡史. 获取数据 F12,Network查看异步请求XHR,翻页. 成功找到返回json格式数据的url, 很多人 ...
随机推荐
- APL 和 Web APL 的概述
APL APl ( Application ProgrammingInterface,应用程序编程接口) 是一些预先定义的函数,目的是提供应用程序 与开发人员基于某软件或硬件得以访问一组例程的能力,而 ...
- python基础练习题(题目 统计 1 到 100 之和)
day31 --------------------------------------------------------------- 实例045:求和 题目 统计 1 到 100 之和. 分析: ...
- Sliding Window - 题解【单调队列】
题面: An array of size n ≤ 106 is given to you. There is a sliding window of size k which is moving fr ...
- 数据库-mysql索引篇
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. mysql的索引类型? mysql中有5种索引:普通索引.唯一索引.主键 ...
- 聊聊 node 如何优雅地获取 mac 系统版本
背景 今天突然碰到了一个兼容性需求,需要根据不同 macOS 版本,进行不同的兼容性处理. 没想到看似简单的需求,中间也经历了一番波折,好在最后解决了问题. 在此记录一下解决问题的过程,也方便其他有类 ...
- Halo 开源项目学习(七):缓存机制
基本介绍 我们知道,频繁操作数据库会降低服务器的系统性能,因此通常需要将频繁访问.更新的数据存入到缓存.Halo 项目也引入了缓存机制,且设置了多种实现方式,如自定义缓存.Redis.LevelDB ...
- [笔记] 有向无环图 DAG
最小链覆盖 (最长反链) 最小链覆盖 \(=n-\) 最大匹配. 考虑首先每个点自成一条链,此时恰好有 \(n\) 条链,最终答案一定是合并(首尾相接)若干条链形成的. 将两点匹配的含义其实就是将链合 ...
- .NET混合开发解决方案12 网页JS调用C#方法访问WinForm或WPF窗体
系列目录 [已更新最新开发文章,点击查看详细] WebView2控件应用详解系列博客 .NET桌面程序集成Web网页开发的十种解决方案 .NET混合开发解决方案1 WebView2简介 .NE ...
- 一、深入学习c++先要练好的内功
掌握进程虚拟地址空间区域的划分 课程讲的内容建立在x86 32位的Linux系统下. 任何的编程语言会产生两种东西:指令和数据.磁盘上的可执行文件在启动时都会加载到内存当中,但是不会加载到物理内存中, ...
- skywalking 搭建链路监控
一.skywalking简介 官网:https://github.com/apache/skywalking 引用官网的架构: 二.部署OAP和UI 需使用的镜像 apache/skywalking ...