python之request库与lxml库的使用

本期来写一下python用于网页请求两个大库的使用

作者安排了这个项目教学,只需要挂在服务器上运行即可

文章同款搭建服务器https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=f0552e9eadafced33d3c20de84094b4b&from=console本期python代码一共用到了两个库

一个用于发送请求requests  一个用于解析xpath lxml

在这之前我们需要找到一个叫活动状态的界面 在进入课程之后 点击

然后点击任务

 就可以进入到我们的 学习进度界面啦

https://mobilelearn.chaoxing.com/widget/pcpick/stu/index?

然后你可以在你的url中找到classid与courseid点击任意一个任务就可以看到fid

cookies与header的话需要按下F12按键

选择网络在标头处即可查看

cookies = ""
classid = ""
courseid = ""
fid = ""
headers = {
    "Cookie": "",
    "User-Agent": "",
    "Referer": ""
}

准备好之后 我们就可以使用get来访问这个地址啦

resoponse = requests.get(url, headers=headers, timeout=5)

获取到响应信息之后使用xpath来找到签到与抢答链接

关于xpath的信息获取也是同样按下F12按键 在找到需要获取xpath的控件之后按下右键选择复制Xpath即可啦

html = etree.HTML(resoponse.content)
            divs = html.xpath('//*[@id="startList"]/div')
            if (divs):
                for div in divs:
                    activeid = div.xpath('./div[1]/@onclick')[0]
                    active = re.findall('activeDetail\((\d+),(\d+),.*?\)', activeid)[0]

                    #从这里开始删除
                    if (int(active[1]) == 4):
                        fangwen(str(active[0]))
                        print('抢答成功')
                    else:
                        print("暂无抢答")

                    #到这里结束都删除 就可以安心睡觉啦

                    if (int(active[1]) == 2):
                        fangwen(str(active[0]))
                        print('签到成功')
                    else:
                        print("暂无签到")
                print(active[1])
            else:
                print("暂无活动")

要是你不需要抢答只想睡觉 只要将抢答部分删除就可以睡觉啦

代码还用到了re库用来匹配所有onclick为activeDetail()的 选项

最后同学们只需要在服务器中搭建并在课前运行就好啦

文章同款搭建服务器https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=f0552e9eadafced33d3c20de84094b4b&from=console

要是想24小时无间断运行的话可以把入口函数中的input删除 并将while条件改为true

最后献上我们的code

import requests
import re
from datetime import datetime
import time
from lxml import etree

endTimeStr = ""
classid = ""
courseid = ""
fid = ""
headers = {
    "Cookie": "",
    "User-Agent":
        "",
    "Referer":
        ""
}


def fangwen(activeid):
    global headers, classid ,courseid, fid

    url = "https://mobilelearn.chaoxing.com/widget/pcAnswer/teaAnswer?activeId={}&classId={}&fid={}&courseId={}".format(activeid, int(classid), int(fid), int(courseid))
    response = requests.get(url, headers=headers, timeout=5)
    print(url)


def run():

    global endTimeStr,classid,courseid
    endTime = datetime.strptime(endTimeStr, "%H:%M:%S")
    # runTime = (endTime - datetime.now()).seconds

    print("当前时间:{}\ <{}> ".format(
        datetime.now(), 'xx课程'))
    url = 'https://mobilelearn.chaoxing.com/widget/pcpick/stu/index?courseId={}&jclassId={}'.format(courseid, classid)
    while (endTime - datetime.now()).seconds > 0:
        time.sleep(1)
        try:
            resoponse = requests.get(url, headers=headers, timeout=5)
            # xpath解析文本
            html = etree.HTML(resoponse.content)
            divs = html.xpath('//*[@id="startList"]/div')
            if (divs):
                for div in divs:
                    activeid = div.xpath('./div[1]/@onclick')[0]
                    active = re.findall('activeDetail\((\d+),(\d+),.*?\)', activeid)[0]


                    if (int(active[1]) == 4):
                        fangwen(str(active[0]))
                        print('抢答成功')
                    else:
                        print("暂无抢答")

                    if (int(active[1]) == 2):
                        fangwen(str(active[0]))
                        print('签到成功')
                    else:
                        print("暂无签到")
                print(active[1])
            else:
                print("暂无活动")
        except requests.exceptions.ReadTimeout as e:
            time.sleep(1)

if __name__ == '__main__':
    endTimeStr = input("input class over time\n")
    run()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叽里咕噜qiu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值