这是一个最简单的、没有任何针对反爬措施的爬虫。走错门的施主可以绕道了~~~
一、问题
受疫情影响,所有学校课程采用网课教学,各种课程群应运而生。想一次性找到所有课程群二维码,以供查询,怎么办呢?
二、原理
1、探明网页图片链接格式
打开学校指定的查询课程二维码的网站,找到图片对应的http请求返回的图片链接,发现所有图片的链接都是http://xxx.cn/os/pic/+课程号-课序号+.jpg
的格式。因此,只要将对应的课程号-课序号与之进行拼接即可完成爬取。
2、使用requests包爬取相关网页图片
requests包最简单的爬虫:
import requests
r = requests.get(url)
之后进一步完成存储工作即可。
三、解决
#从csv读取所有课程号-课序号,并拼接成网页链接
import pandas as pd
csv_data = pd.read_csv('D:/.../999 project/5 testing_file/num.csv', encoding = 'ANSI')
urls = []
for i in csv_data['num']:
urls.append("http://xxx.cn/os/pic/"+i+".jpg")
import requests
import os
root = "C://...//Desktop//lesson_QR_code/"
num = 0
#爬取课程二维码
for url in urls:
num = num + 1
path = root + url.split('/')[-1]
try:
#如果不存在该目录,创建目录
if not os.path.exists(root):
os.mkdir(root)
#如果文件不存在,爬取二维码并保存,若存在则打印“文件已存在”
if not os.path.exists(path):
r = requests.get(url)#实际上只有这一行是爬虫
with open(path, 'wb') as f:
f.write(r.content)#将二进制内容写入文件
f.close()
print(num,"文件保存成功")
else:
print(num,"文件已存在")
except:
#如果发生异常,打印发生异常的课程号
print(url.split('/')[-1])
print("爬取完毕")
四、反思
实际上,课程号-课序号信息可以从教务系统手动复制粘贴下来的。博主目前还不会爬虫登录教务系统并解决验证码问题,等解决了这个问题就不用手动复制粘贴啦(如果解决了这个问题就可以用代码抢课了…)。