工作技术小结

2023/1/31
关于论坛后端接口编写小结
1,了解小程序原型图流程和细节性的东西
2,数据库关联结构仔细分析,找到最容易查询的关键字段,标语表之间靠什么关联

2023/2/10
在小程序抓包过程中,如果要实现批量抓取,必须解决cookie问题,但是cookie值太多,对比当前用户COOKIE 进行筛选,缩小范围,找到关键参数值
源码js关键字找不到,寻找加密方式找不到, 跳转思路可能set-cookie在跳转页面里面,如果还找不到,则从头开始走流程用charles抓。
302跳转,cookie 在服务端怎么拿可用找到参数直接调用,cookie参数值在本地怎么拿 allow_redirects=False 默认为True

2023/2/13
关于多线程,多进程以及python 线程池的了解和使用
多进程:对系统的cup资源进行最大的利用
多线程:对系统分配给当前进程的cup资源进行最大限度的运用
window 核心是主多线程   liunx核心主是多进程,每一个请求开出一个进程
可用将多线程理解为多个人多张桌子吃饭
多进程可用理解为多个人在同一张桌子吃饭
进程是系统资源分配的基本单位,线程是进程资源分配的基本单位
关于python中concurrent.futurn的应用
协程案例
# python 源码
import asyncio
import requests
import time
async def result(url):
    res = await request_url(url)
    print(url, res)


async def request_url(url):
    res = requests.get(url, proxies={'https': None, 'http': None}, verify=False)
    print(url)
    await asyncio.sleep(2)
    print("execute_time:", time.time() - start)
    return res


url_list = ["https://www.csdn.net/",
            "https://blog.csdn.net/qq_43380180/article/details/111573642",
            "https://www.baidu.com/",
            ]

start = time.time()
print(f"start_time:{start}\n")

task = [result(url) for url in url_list]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(task))

endtime = time.time() - start
print("\nendtime:", time.time())
print("all_execute_time:", endtime)


websocket优化

#服务端
import asyncio
import websockets

IP_ADDR = "127.0.0.1"
IP_PORT = "8888"

# 握手,通过接收hello,发送"123"来进行双方的握手。
async def serverHands(websocket):
    while True:
        recv_text = await websocket.recv()
        print("recv_text=" + recv_text)
        if recv_text == "hello":
            print("connected success")
            await websocket.send("123")
            return True
        else:
            await websocket.send("False")
            return None

# 接收从客户端发来的消息并处理,再返给客户端ok
async def serverRecv(websocket):
    while True:
        recv_text = await websocket.recv()
        print("recv:", recv_text)
        if recv_text !='exit':
            await websocket.send("ok!!!")


# 握手并且接收数据
async def serverRun(websocket, path):
    print(path)
    if await serverHands(websocket):
        while True:
            try:
                await serverRecv(websocket)
            except:
                continue

# main function
if __name__ == '__main__':
    print("======server main begin======")
    server = websockets.serve(serverRun, IP_ADDR, IP_PORT,ping_interval=None)
    asyncio.get_event_loop().run_until_complete(server)
    asyncio.get_event_loop().run_forever()


#客户端

import asyncio
import websockets

IP_ADDR = "127.0.0.1"
IP_PORT = "8888"

# 握手,通过发送hello,接收"123"来进行双方的握手。
async def clientHands(websocket):
    while True:
        await websocket.send("hello")
        response_str = await websocket.recv()
        if "123" in response_str:
            print("握手成功")
            return True
        else:
            return False

# 向服务器端发送消息
async def clientSend(websocket):
    while True:
        name='小王'
        input_text = input(f"{name}: ")
        if input_text == "exit":
            print(f'"exit", bye!')
            await websocket.send(input_text)
            await websocket.close(reason="exit")
            return False
        await websocket.send(input_text)
        recv_text = await websocket.recv()
        print(f"{recv_text}")

# 进行websocket连接
async def clientRun():
    ipaddress = IP_ADDR + ":" + IP_PORT
    async with websockets.connect("ws://" + ipaddress, ping_interval=None) as websocket:
        if await clientHands(websocket):
            await clientSend(websocket)

# main function
if __name__ == '__main__':
    print("======client main begin======")
    asyncio.get_event_loop().run_until_complete(clientRun())


2023/2/16
DATABASE = os.path.join(os.path.dirname(__file__), "db.sqlite3")
os.path.join 表示路径链接     os.path.dirname(__file__) 表示当前脚本的路径
from flask import Flask,request,jsonify,g
数据库中的g表示全局变量

flask数据库链接
def connect_db():
    db = getattr(g, 'db', None)
    if db is None:
        conn = sqlite3.connect(DATABASE)
        conn.row_factory = lambda cursor, row: {
            key: value for key, value in zip([col[0] for col in cursor.description], row)
        }
        db = g.db = conn
    return db

@app.before_request
def before_request():
    g.db = connect_db()

@app.teardown_request
def close_db(exception):
    if hasattr(g, 'db'):
        g.db.close()
'select name,grade,commentNum,cityName,sceneryThemeName from dataList where cityId=? limit ? offset ?',(spiderid,pagesize,offset, 在sqlite3里面可用?代替字符
2023/2/21
请求参数一切正常,但是接口还是调不通说明请求头的                 'content-type':m.content_type, 可能不同 或者 没有 'accept': '*/*',  尽量保持请求头和保持抓包接口一致
关于MultipartEncoder对参数进行封装的用法和django文件参数的接受
            m=MultipartEncoder(fields={'id':'WU_FILE_0','name': imge_file.name,'type':imge_file.content_type,'lastModifiedDate':now_time,'size':str(imge_file.size),'file':(imge_file.name,imge_file.read(),imge_file.content_type)},boundary=boundary)

爬虫有情况可以储存原json,关键时候前后端交互有妙用
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值