V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zoofy  ›  全部回复第 1 页 / 共 1 页
回复总数  8
要联系方式是吧?好的
2022-09-13 16:40:57 +08:00
回复了 barnett2010 创建的主题 Python 关于故宫紫禁城杂志 pdf 的爬取
@barnett2010 简单写了个下载 pdf 的 demo, 单纯的 requests 请求. 可以自己优化一下

import requests

headers = {
"Referer": "https://www.dpm.org.cn/Public/static/pdfwrap/js/pdf.worker.js",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"
}

url = "https://www.dpm.org.cn/Uploads/File/2022/08/29/u630c38230f984.pdf"

resp = requests.get(url, headers=headers)

total_len = int(resp.headers["Content-Length"])

range_int = 65535

loop = total_len // range_int + 1

for i in range(loop):
if i == loop - 1:
exist = True
start = range_int * i + 1
end = total_len
elif i == 0:
exist = False
start = 0
end = range_int
else:
exist = True
start = range_int * i + 1
end = range_int * (i + 1)

headers["Range"] = f"bytes={start}-{end}"

content = requests.get(url, headers=headers).content

if not exist:
with open("a.pdf", "wb") as f:
f.write(content)
else:
with open("a.pdf", "ab") as f:
f.write(content)
2022-09-06 11:43:59 +08:00
回复了 bananahotell 创建的主题 Python 需要网页加载了图片后才能通过链接打开爬取怎么解决呢?
加 referer headers 就解决了
2022-07-15 11:48:07 +08:00
回复了 zhishixiang 创建的主题 Python flask socketio 无法向客户端推送消息
@zhishixiang 感觉可以在注册的时候记录好 request.sid 和 request namespace sid 两个 id, 在服务端监听 disconnect 方法,获取到 request.sid 后拿到对应保存的 namespace sid, 然后再做 close room 或者 leave room 操作
2022-07-14 18:50:24 +08:00
回复了 zhishixiang 创建的主题 Python flask socketio 无法向客户端推送消息
@zhishixiang 不一样的,你可以打印看看。我那个代码可以直接允许的了
2022-07-14 18:37:09 +08:00
回复了 zhishixiang 创建的主题 Python flask socketio 无法向客户端推送消息
@zhishixiang 你的 namespace 跟 sid 要和客户端相同的,所以在连接的时候获取到的 sid 传送给服务端,记录好,test 接口才能发信息给客户端。不能在服务端获取啊
2022-07-14 16:27:31 +08:00
回复了 zhishixiang 创建的主题 Python flask socketio 无法向客户端推送消息
给你贴个可以运行的代码
``` 服务端
from flask import Flask
from flask_socketio import SocketIO, emit, join_room
from loguru import logger

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
tokenList = {}


@app.route("/test")
def testConnect():
sid = tokenList["114514"]
data = {'from': 'server'}
# socketio.emit('newMission', data, namespace='/mission')
socketio.emit('newMission', data, to=sid, namespace='/mission')
return 'success'


@socketio.on('register')
def register(data):
sid = data['sid']
print("服务器%s 尝试注册" % data["secret"])
emit('register', {"token": sid})
logger.debug("注册成功,token 为%s" % sid)
join_room(sid)
tokenList["114514"] = sid


@socketio.on('message', namespace='/mission')
def message(data):
print(data) # {'from': 'client'}
# emit('response', {'from': 'server'})
# sleep(5)
# emit('response', "exit")


if __name__ == '__main__':
socketio.run(app, debug=True, host='127.0.0.1', port=8090)
```

``` 客户端
import socketio

sio = socketio.Client()


@sio.on('connect')
def on_connect():
print('正在注册,请稍后')
# 获取 namespace sid, 发送给 server
sid = sio.get_sid('/mission')
sio.emit('register', {'secret': '114514', 'sid': sid})


@sio.on('register')
def isReg(data):
print("receiver message from register ,当前 token 为", data['token'])
pass


@sio.on("newMission", namespace='/mission')
def newMission(data):
print("get mission message data: ", data)


sio.connect('ws://localhost:8090')
sio.wait()
```

主要是获取到 namespace 后,把 namespace sid join room, 记录好 sid. 要 emit 的时候, 加上 namespace 和 roomId(sid)进行发送
2022-07-14 14:00:22 +08:00
回复了 u2gign 创建的主题 Python 如何在 celery 异步 task 执行中拿到里面的返回值
看代码感觉是用 django, 可以看下 django-celery-results
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2823 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 20ms · UTC 07:13 · PVG 15:13 · LAX 23:13 · JFK 02:13
Developed with CodeLauncher
♥ Do have faith in what you're doing.