研究生报考时利用爬虫筛选导师研究方向

相信每个报考研究生的人,经常为寻找专业对口的导师而发愁,如果一条一条找,很容易让人失去耐心,特别是对于我这种已经工作的人来说。下面就以武汉大学生科院导师研究方向为例,目的是找到匹配关键字的导师介绍网址。

    本期内容还是要熟悉HTML网页结构,与如何通过网络爬虫获得NCBI蛋白质序列这期文章有相似的地方,这个以后抽时间可能会聊一聊。代码如下:

一、获取所有武大生科院老师的公开网址信息

python
from bs4 import BeautifulSoup
import requests
import re
f = open("/home/lxh/Documents/爬虫/professor_website.txt" , "a+")
item = ['zrjs' , 'lyys', 'xsjrc' , 'jcqn' , 'ljxz' , 'yxqn']
for m in item:
  target = 'http://www.bio.whu.edu.cn/szdw/' + m + '.htm'
  req = requests.get(url = target)
  html = req.text
  bf = BeautifulSoup(html,'html.parser')
  for link in bf.find_all('a'):
    linker = link.get('href')
    lin = "".join(re.findall(".*info/(.*).htm.*" , linker))
    if len(lin) != 0:
      tar = 'http://www.bio.whu.edu.cn/info/' + lin + '.htm'
      f.write(tar + "\n")
​
f.close()
​

二、将同一种编码格式的导师网址单独列出来,有利于后期编码以及程序运行简单

f = open("/home/lxh/Documents/爬虫/professor_website.txt" , "r")
f1 = open("/home/lxh/Documents/爬虫/professor_website_diffcult.txt" , "a+")
f2 = open("/home/lxh/Documents/爬虫/professor_website_easy.txt" , "a+")
for x in f.readlines():
  tar = x.replace('\n','')
  req = requests.get(url = tar)
  html = req.content.decode('utf-8','ignore').encode('GBK','ignore')
  bf = BeautifulSoup(html,'lxml')   
  text1 = bf.find_all('div' , class_ = 'v_news_content')
  if len(text1) != 0:
    print(text1[0].text)
    f2.write(x)
  else:
    f1.write(x)
​
f.close()
f1.close()
f2.close()

三、在合格网址中获取网页介绍信息,并给出匹配关键字的导师网址

f2 = open("/home/lxh/Documents/爬虫/professor_website_easy.txt" , "r")
for x in f2.readlines():
  tar = x.replace('\n','')
  req = requests.get(url = tar)
  html = req.content.decode('utf-8','ignore').encode('GBK','ignore')
  bf = BeautifulSoup(html,'lxml')   
  text1 = bf.find_all('div' , class_ = 'v_news_content')
  kwd = ['抗菌','抑菌','噬菌体','裂解酶','耐药菌','抗菌药物']
  for xx in kwd:
    if text1[0].text.find(xx) != -1:
      print(tar)
​
f2.close()
​
​

统计下结果:

共有144条导师信息,当然有些重复网址也在其中(同一个导师有多重身份或者职位,并不妨碍我们的目的),其中有以下三条为网页编码较为特殊的,可能也为了反制爬虫吧。

http://www.bio.whu.edu.cn/info/1191/4358.htm
http://www.bio.whu.edu.cn/info/1191/4532.htm
http://www.bio.whu.edu.cn/info/1191/4542.htm

    符合我们设置的关键字的有5条,实际上应该是4条,其中4295重复了一次,这下我们不用伤脑筋了,可以仔细看一下了。

http://www.bio.whu.edu.cn/info/1191/4310.htm
http://www.bio.whu.edu.cn/info/1191/4312.htm
http://www.bio.whu.edu.cn/info/1191/4295.htm
http://www.bio.whu.edu.cn/info/1191/4274.htm
http://www.bio.whu.edu.cn/info/1191/4295.htm
    以上大部分代码可以合并简化运行,但对于编程初级的人来说,还是分开步步验证最好,既能发现错误,从实际上其实也能提高效率(不出错就是最大的高效)

四、更上一层楼----爬取华中科技大学生命科学与技术研究院的匹配信息的导师网址

     方法套路一样,只需要根据网页源代码更改一些标签即可,同时把新生成的文件重新命名。

       第一步,爬取所有导师网址:

python
import requests
from bs4 import BeautifulSoup
import re
f = open("/home/lxh/Documents/爬虫/professor_website_hzkj.txt" , "a+")
url = 'http://life.hust.edu.cn/szdw.htm'
req= requests.get(url)
html = req.text
bff = BeautifulSoup(html,'html.parser')
for link in bff.find_all('a'):
  linker = link.get('href')
  f.write(str(linker) + "\n")
  print(linker)
​
f.close()

     第二步,通过网页源代码观察,手动删除非导师网址,并将导师网址修改为一致格式。

f = open("/home/lxh/Documents/爬虫/professor_website_hzkj.txt" , "r")
website = []
for x in f.readlines():
  tar = x.replace('\n','')
  if tar != 'None':
    if tar.find("http") != -1:
      print(tar)
      website.append(tar)
    else:
      tar = 'http://life.hust.edu.cn/' + tar
      print(tar)
      website.append(tar)
​
f.close()
​

    第三步,通过关键词搜索导师网址,本次搜索华中科技大学与武大不一样的地方在于,武汉大学导师介绍是通过局部div标签查找的,而华科是通过所有div标签查找的,第一种的方法有利于输出特定内容,减少爬虫计算量,但需要导师网页编码格式较为一致,第二种的方法增加计算机计算量,但不依赖导师网页编码格式,具有更好的兼容性。

f3 = open("/home/lxh/Documents/爬虫/professor_website_hzkj_willing.txt" , "a+")
i = 0
ii = 0
kwd = ['抗菌','抑菌','噬菌体','裂解酶','耐药菌','抗菌药物']
for xx in range(len(website) - 1):
  req = requests.get(url = website[xx])
  html = req.content.decode('utf-8','ignore').encode('GBK','ignore')
  bf = BeautifulSoup(html,'lxml')
  text1 = bf.find_all('div')
  i += 1
  print(text1)
  for a in range(len(text1)):
    for words in kwd:
      if text1[a].text.find(words) != -1:
        ii += 1
        print(website[xx])
        f3.write(website[xx] + "\n")  
​
f3.close()

  结果只出现了一个导师网址:http://faculty.hust.edu.cn/chenweihua2/zh_CN/index.htm,没得多少选择啊

五、函数封装---包装简化,重复使用

python
from bs4 import BeautifulSoup
import requests
import re
def professor(*args):
  f2 = open("/home/lxh/Documents/爬虫/whdx/professor_website_easy.txt" , "r")
  for x in f2.readlines():
    tar = x.replace('\n','')
    req = requests.get(url = tar)
    html = req.content.decode('utf-8','ignore').encode('GBK','ignore')
    bf = BeautifulSoup(html,'lxml')   
    text1 = bf.find_all('div' , class_ = 'v_news_content')
    for a in args:
      if text1[0].text.find(a) != -1:
        tar = tar
        print(tar)
    f2.close()
​

       第一次运行后,第二次更换关键词便可调用函数professor('关键词1','关键词2','关键词3',......)得到匹配新的关键词的导师网址。

         未防止复制上述代码出现报错(网页展示代码和终端代码有一定程度不同)请:

         点击以下网址下载原码,提取华中科技大学生命科学与技术学院匹配导师网址代码:

链接: https://pan.baidu.com/s/1upfENs2L4_CXzhzDRFbXVg?pwd=tv6q 提取码: tv6q 复制这段内容后打开百度网盘手机App,操作更方便哦

        点击以下网址下载原码,提取武汉大学生科院匹配导师网址代码:

链接: https://pan.baidu.com/s/15v23Nr2Qm8PNLHfDSyU9Fg?pwd=iqku 提取码: iqku 复制这段内容后打开百度网盘手机App,操作更方便哦​

关注不迷路,更多精彩:研究生报考时利用爬虫筛选导师研究方向

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值