go语言抓取研招网硕士专业目录

Posted 念秋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言抓取研招网硕士专业目录相关的知识,希望对你有一定的参考价值。

最近在学go语言,不知道何从下手。突然想到了硕士专业目录,可以用来练习数据库操作,并且具有实际意义。

于是就开始和bing一起编程。想做什么,提问就好了。搜索效率比自己搜索,然后看一些重复无用的博客好多了。

整个过程就是研招网查询,抓包分析,编码,数据库建表,最后抓取所有数据进行保存。

项目地址

研招网查询

研招网专业

ssdm	省市
yjxkdm	专业领域
zymc	专业名称
xxfs	学习方式
mldm	门类类别
这是点击查询后,post里面需要修改的数据。基本上只需要秀应该省市和专业名称。
下拉选择框的时候,也会有一些get请求。自己使用fiddler抓取分析即可。不过我已经保存了相关的请求和响应包在gitee项目里面。有需要直接看gitee项目即可。

编码

编码,我问bing,它回答,再进行修改即可。需要什么功能,就问什么,然后返回示例代码,进行修改。

数据库建表

CREATE TABLE major (
  id INT NOT NULL AUTO_INCREMENT,
  code INT NOT NULL,
  school VARCHAR(40) NOT NULL,
  college VARCHAR(40) NOT NULL,
  major VARCHAR(40) NOT NULL,
  num	INT NOT NULL,
  full	INT NOT NULL default 1,
  tongkao	INT NOT NULL default 0,
  PRIMARY KEY (id)
);

CREATE TABLE exam (
  id INT NOT NULL AUTO_INCREMENT,
  first VARCHAR(40) NOT NULL,
  second VARCHAR(40) NOT NULL,
  third VARCHAR(40) NOT NULL,
  forth VARCHAR(40) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE major_exam (
  major_id INT NOT NULL,
  exam_id INT NOT NULL,
  FOREIGN KEY (major_id) REFERENCES major(id),
  FOREIGN KEY (exam_id) REFERENCES exam(id)
);
读者应根据需要自行修改。

最后进行请求数据,进行处理,然后保存

可以看见,计算机专硕大概有不到3000个选择。major表的行数,就是所有大学所有学院相关专业以及研究方向的数量。至于招生人数,也是可以自己统计的。

爬研招网院校信息——python爬虫

使用的Python库包:Beautifulsoup
爬取的网站:https://yz.chsi.com.cn/zsml/queryAction.do
爬取内容:爬取院校名称、考试方式、专业、学习方式、研究方向、指导老师、招生人数。

效果如下:

关键点:
1.Beautifulsoup里的find_all函数的使用
find_all('tag名称",“所对应的属性值”)
2.td.a[‘href’]
对应a标签里的href的值。

第一步,得到要爬取网页的html

结果展现:

第二步:
爬取得到每一项对应的各自的URL

for td in tds:
	num+=1
	if((num-5)%6==0):
		numtrue+=1
		print("rank ######################################################################3".format(numtrue))
		# print(td)
		href='https://yz.chsi.com.cn'
		tmp=td.a['href']
		href+=tmp
		# print(tmp)
		print(href)#nice爬取到了要读的网页
		get_info(href)
	# print(url)

第三步:
对每一个单独的链接进行处理

"""爬取单页内容里的具体信息"""
def get_info(url):
	response = requests.get(url,headers=headers)
	time.sleep(3)
	#查看响应状态码
	status_code = response.status_code
	print(status_code)
	content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
	# print(content)
	trs=content.find_all('tr')
	for tr in trs:
		# print(tr)
		for t in tr:
			if(t.string!='None'):
				print(t.string,end="")

完整代码如下:

"""研招网,details可看exercise_test.py"""
"""进度:完成!"""
import requests
import bs4
import time
import re
#反boss反爬取
headers = 
			'authority': 'static.zhipin.com',
			'method':'GET',
			'path': '/v2/web/geek/js/socket.js?t=1645165512072',
			'scheme': 'https',
			'accept':'*/*',
			'accept-encoding': 'gzip, deflate, br',
			'accept-language': 'zh-CN,zh;q=0.9',
			'cookie':'JSESSIONID=39A7A6D5A79E81F63B47E478AAD6967F; aliyungf_tc=423706e2a0ceab40a6b543a78fd720f683763f45f249d573ee2a8246cb7cfb25; acw_tc=781bad0c16507162723057775e186596e7b7638cfc53c51d0a171165393d2a; CHSICC_CLIENTFLAGZSML=34a470f172525ff109a64ba7033c0113; _gid=GA1.3.925681405.1650716296; _ga_YZV5950NX3=GS1.1.1650716283.6.1.1650716284.0; _ga=GA1.3.640078954.1650460515',
			'referer': 'https://www.zhipin.com/',
			'sec-ch-ua-mobile': '?0',
			'sec-ch-ua-platform': "Windows",
			'sec-fetch-dest': 'script',
			'sec-fetch-mode': 'no-cors',
			'sec-fetch-site': 'same-site',
			'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36'
               
#抓取页码内容,返回响应对象
"""爬取对应的每个网页链接"""
url = "https://yz.chsi.com.cn/zsml/querySchAction.do?ssdm=43&dwmc=%E6%B9%98%E6%BD%AD%E5%A4%A7%E5%AD%A6&mldm=08&mlmc=&yjxkdm=0812&xxfs=1&zymc=";
response = requests.get(url,headers=headers)
time.sleep(3)
#查看响应状态码
status_code = response.status_code
#使用BeautifulSoup解析代码,并锁定页码指定标签内容
content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
# print(content)
tds = content.find_all('td',class_="ch-table-center")

num = 0
numtrue = 0

"""爬取单页内容里的具体信息"""
def get_info(url):
	response = requests.get(url,headers=headers)
	time.sleep(3)
	#查看响应状态码
	status_code = response.status_code
	print(status_code)
	content = bs4.BeautifulSoup(response.content.decode("utf-8"), "lxml")
	# print(content)
	trs=content.find_all('tr')
	for tr in trs:
		# print(tr)
		for t in tr:
			if(t.string!='None'):
				print(t.string,end="")

for td in tds:
	num+=1
	if((num-5)%6==0):
		numtrue+=1
		print("rank ######################################################################3".format(numtrue))
		# print(td)
		href='https://yz.chsi.com.cn'
		tmp=td.a['href']
		href+=tmp
		# print(tmp)
		print(href)#nice爬取到了要读的网页
		get_info(href)
	# print(url)


以上是关于go语言抓取研招网硕士专业目录的主要内容,如果未能解决你的问题,请参考以下文章

爬研招网院校信息——python爬虫

考研大数据:15-18年研究生报考数据分析报告

Go语言爬虫抓取拉勾职位—提升找工作成功概率

北航和北京科技大学的材料专业考研的历年分数线是多少?两者哪个更好一些?

一个java自动化爬虫场景,参考文档代码注释非常详细!

好课分享: go语言世界五百强大厂之路超推荐 百度云