前言
最近在做公司的知识门户,需要采集公司内网的wiki、jira文档信息,对于图片内容需要爬取到链接,并能够预览图片,由于公司的wiki、jira图片预览链接都是做了登录态校验,所以直接爬取下来的链接没法再另外的Web页面中使用
问题思路分析
针对上述图片无法做直接预览的问题,只能自行模拟下登录态,抓取所有wiki、jira中的图片下载到本地,最后以其他服务接口预览的方式提供图片的查看
问题解决要点
主要分成下面三点,话不多说,直接上代码
1、python 模拟登录态
tips:如何找网站登录接口,谷歌浏览器F12,找到Network(网络),退出登录后,再登录抓取login接口。
抓到login_url和登录需要的入参,比如os_username, os_password等,如果遇到还有验证码的登录校验的,还需要参考其他博主
import requests
session = requests.Session()
// 类似该网页的login地址
login_url = "http://xxx/dologin.action"
data = {
"os_username": "xxx",
"os_password": "xxx",
"login": "登录"
}
headers = {'User-Agent': ''}
response = session.post(url=login_url, headers=headers, data=data)
2、python 下载图片
登录态模拟完成后,就是下载网路图片到本地了,另外下载大量图片的,也可以多线程异步下载,可参考网络其他博主
import requests
session = requests.Session()
login_url = "http://xxx/dologin.action"
data = {
"os_username": "xxx",
"os_password": "xxx,
"login": "登录"
}
headers = {'User-Agent': ''}
response = session.post(url=login_url, headers=headers, data=data)
// 图片地址
image_url = 'http://xxx/image.png'
r = session.get(url)
// 下载地址前缀
path = 'xxx'
with open(path + 'image.png', 'wb') as f:
f.write(r.content)
3、python flask 提供预览图片接口
下载完图片到本地后,就是对外提供图片预览功能了,主要采用python flask提供web api方式
from flask import Flask, request, make_response
from flask_cors import CORS, cross_origin
app = Flask(__name__)
CORS(app)
@app.get('/show')
// 针对方法增加跨域配置
@cross_origin()
def show():
file_dir = 'D:/xxx.jpg'
filename = 'xxx.jpg'
if request.method == 'GET':
if filename is None:
pass
else:
image_data = open(file_dir, "rb").read()
response = make_response(image_data)
response.headers['Content-Type'] = 'image/jpeg'
return response
else:
pass
if __name__ == '__main__':
app.run()