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, 很多人 ...
随机推荐
- CTF中的一些图形密码
1.传统猪圈密码 猪圈密码又称为亦称朱高密码.共济会暗号.共济会密码或共济会员密码:是一种以特定符号来替换字母的加密方式 在线解密网址:http://moersima.00cha.net/zhuqua ...
- spring4 mvc + jpa demo
BEGIN; pom.xml 的引入的相关jar版本配置 <properties> <project.build.sourceEncoding>UTF-8</projec ...
- JS加载不出来 必须alert才可以 alert另一种功能
BEGIN; 今天在引入百度编辑器时,发现百度编辑器加载不出来. 代码是这样的: var editor = new baidu.editor.ui.Editor({ textarea: 'con ...
- js 前端实现下拉刷新 上拉加载
效果 css html,body{ height:100%; // 其他界面未设置html 无法监听scroll } /* 下拉刷新 */ .refresh-loading { transition: ...
- NuGet包管理平台
这节来讲一下.NET下的包管理平台:NuGet. 我们做一个项目,除了自己的代码文件之外,实际上还要引用诸多代码文件,这些文件可能是我们自己封装的底层框架代码,或者为了完成某个功能而引用的工具类文件等 ...
- 【Linux 网络编程】生动讲解 Reactor 模式与 Proactor 模式
五种 I/O 模型 先花费点时间了解这几种 I/O 模型,有助于后面的理解. 阻塞 I/O 与非阻塞 I/O 阻塞和非阻塞的概念能应用于所有的文件描述符,而不仅仅是 socket.我们称阻塞的文件描述 ...
- 记将一个大型客户端应用项目迁移到 dotnet 6 的经验和决策
在经过了两年的准备,以及迁移了几个应用项目积累了让我有信心的经验之后,我最近在开始将团队里面最大的一个项目,从 .NET Framework 4.5 迁移到 .NET 6 上.这是一个从 2016 时 ...
- fedora访问win10共享
sudo mount -t cifs -o username=user,password=123 //192.168.31.20/aa /home/liao/win
- SecureCRT使用SSH链接出现Password Authentication Failed,Please verify that the username and password are correct的解决办法(亲测有效)
- 学习Java的第十五天——数学运算
学习内容:数学运算 1.三角函数运算 代码实现: public class 三角函数运算 { public static void main(String[] args) { // TODO 自动生成 ...