用爬虫爬取学校教务处的内容

requests部分

明确需求

每次打开教务处网页实在是太麻烦了,要输入账号密码,然后登陆,最后再查询,上了大学以后就变得很懒了,所以我想写一段爬虫,可以很快地获取到我想要得到的内容。于是我有了如下需求:

  • 输入“成绩查询”就可以得到相关数据,其余类似
  • 爬虫自动化
  • 以字典的形式返回数据

分析页面

目标网址

# 接下来的分析以“我的考试安排”为例,其余的处理很相似
url = "http://ehall.xjtu.edu.cn/jwapp/sys/studentWdksapApp/*default/index.do?amp_sec_version_=1&gid_=d1FSamp2Y2tzcmhLREI1UnBSZ2FUS0FiRHBTUS9SMkJJaFdZU2E5SnFCcnM4UWpRKzNHWExFSVZHRzJwL2wrbkxKdzN2eFJGRjhJWGF5dFkyMytUaVE9PQ&EMAP_LANG=zh&THEME=cherry#/wdksap"

页面分析

  • 实现步骤:
    • 首先我们点击右键,查看网页源代码,发现源代码内根本没有相关内容,这说明这个页面是由ajax渲染加载的,所以我们直接对这个页面的网址发送请求没有任何意义。
    • 接下来我们需要寻找数据接口,打开“F12",寻找数据接口,通过preview发现了有一个网址有我想要的元素
url = "http://ehall.xjtu.edu.cn/jwapp/sys/studentWdksapApp/modules/wdksap/wdksap.do"

如图所示

  • 用requests请求访问,获取数据,处理数据

以上就是整个分析过程,我们终于获得了实际接口,并确定了爬取方式,接下来只需要很简单地写一段代码获取数据就行了。

爬取数据

我们需要用到requests中的post方法,所以切记:要带上data,否则请求会失败的。

import requests
import json

req = requests.session()
data = {
   'XNXQDM': '2020-2021-2',
        '*order': '-KSRQ,-KSSJMS'}

headers = {
   
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36'}
rep=req.post('http://ehall.xjtu.edu.cn/jwapp/sys/studentWdksapApp/modules/wdksap/wdksap.do', data=data,
               headers=headers)
content = rep.text
content = json.loads(content)

如果只是这么一段程序一定会报错的,报错如下:

raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

这说明我们没有正确的获取到文本内容,返回去检查,如果我们打印出文本内容,会发现它和我们预期的完全不一样,内容有关于账号输入错误等等。根据这点提示我们可以想到:我们需要携带我们的登录信息,即加入cookie。
cookie如下:

Cookie: EMAP_LANG=zh; THEME=cherry; _WEU=0y8mOygQIDkyLBngGULcuv53LsbNzAi0XIqwXTOqJpfaCSB*JYPGxD5NINbhuNohVfospXNT76k5AcfBHIl2IxX3drQStkcyOgMrTP0VUr9JuPnMqSSp8j..; CASTGC=LQhyOrYKNl6UPpZ+qWQbBWVavdqe3K1VwXarvrBsEKvcRdFhFnqQaw==; MOD_AMP_AUTH=MOD_AMP_ec3f74e5-52af-4410-b6bf-89fd5971a00e; route=ab22dc972e174017d573ee90262bcc96; asessionid=c73fb5c1-4a72-40fe-a419-0fda107aa153; amp.locale=undefined; JSESSIONID=znWPu7n2I7JAjlgGNE779Tzbu03-HMqqURcM9Vb921mesC58rsHY!596962737

经过反复验证,我们发现网站实际上验证的是_WEU和MOD_AMP_AUTH两项,删除其余内容只保留这两个,并加入cookie中,即可获取数据。

import requests
import json

req = requests.session()
data = {
   'XNXQDM': '2020-2021-2',
        '*order': '-KSRQ,-KSSJMS'}

headers = {
   
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36''cookie':'_WEU=0y8mOygQIDkyLBngGULcuv53LsbNzAi0XIqwXTOqJpfaCSB*JYPGxD5NINbhuNohVfospXNT76k5AcfBHIl2IxX3drQStkcyOgMrTP0VUr9JuPnMqSSp8j..;MOD_AMP_AUTH=MOD_AMP_ec3f74e5-52af-4410-b6bf-89fd5971a00e'}
rep=req.post('http://ehall.xjtu.edu.cn/jwapp/sys/studentWdksapApp/modules/wdksap/wdksap.do', data=data,
               headers=headers)
content = rep.text
# 下边的是简单的数据处理
content = json.loads(content)
dic = {
   }
for i in range(len(content['datas']['wdksap']['rows'
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我来给您讲解一下如何使用Scrapy框架来桂林理工大学教务处的课表信息。 Scrapy框架是一个基于Python开发的高级网络爬虫框架,其主要特点是结构清晰、功能强大、扩展性好、灵活性高等。使用Scrapy框架可以方便地完成对网站的数据、处理和存储等工作。 下面是具体的步骤: 第一步:创建Scrapy项目 首先,我们需要在命令行中输入以下命令来创建一个新的Scrapy项目: ``` scrapy startproject guet_course ``` 其中,“guet_course”是我们项目的名称。 第二步:创建Spider 接下来,我们需要在项目目录下创建一个Spider,用于指定需要的网站和规则。 在命令行中输入以下命令: ``` cd guet_course scrapy genspider guet_course_spider jwc.guet.edu.cn ``` 其中,“guet_course_spider”是我们Spider的名称,“jwc.guet.edu.cn”是我们需要的网站地址。 第三步:配置Spider 接下来,我们需要打开“guet_course_spider.py”文件,进行Spider的配置。 首先,我们需要设置Spider的名称和允许的域名: ```python name = 'guet_course_spider' allowed_domains = ['jwc.guet.edu.cn'] ``` 然后,我们需要设置起始URL: ```python start_urls = ['http://jwc.guet.edu.cn/cms/info/2018/201804/20180417/49106.html'] ``` 这里,我们设置了一个URL作为起始点,用于指定的入口页面。 接下来,我们需要设置规则: ```python rules = ( Rule(LinkExtractor(allow=r'/cms/info/\d+/\d+/\d+/\d+\.html'), callback='parse_item', follow=True), ) ``` 这里,我们使用了LinkExtractor来提需要的链接,然后使用回调函数“parse_item”来处理提出来的数据。 最后,我们需要定义“parse_item”函数: ```python def parse_item(self, response): item = GuetCourseItem() # TODO: 进行解析并保存数据 yield item ``` 这里,我们使用“GuetCourseItem”类来保存我们到的数据。 第四步:解析数据 接下来,我们需要在“parse_item”函数中进行数据的解析和保存。 首先,我们需要使用XPath表达式来提需要的数据,例如: ```python item['course_name'] = response.xpath('//h3/text()').get() ``` 这里,我们使用了XPath表达式“//h3/text()”来提页面中的标题文本。 然后,我们需要将解析出来的数据保存到“GuetCourseItem”对象中,例如: ```python item['course_name'] = response.xpath('//h3/text()').get() ``` 最后,我们需要将保存好的数据返回,以便Scrapy框架进行后续的处理和存储。 ```python yield item ``` 第五步:运行Spider 最后,我们可以在命令行中输入以下命令来运行我们的Spider: ``` scrapy crawl guet_course_spider ``` 这里,“guet_course_spider”是我们Spider的名称。 当我们运行完毕后,Scrapy框架会自动将到的数据存储到指定的位置,例如CSV文件、JSON文件或者数据库中。 以上就是使用Scrapy框架桂林理工大学教务处课表信息的详细步骤,希望能对您有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值