基于Python爬取教师主页
发布日期:2021-06-27 12:56:25 浏览次数:18 分类:技术文章

本文共 3620 字,大约阅读时间需要 12 分钟。

Python实现爬取西安电子科技大学所有教师个人简介以及简历
基于Sublime Text 3运行,整体实现比较简单。
如果需要使用,直接粘贴源码即可,可以修改对应的循环控制值或者直接只复制某一个函数来实现爬取的功能。
自己已经大三,对网络安全方面比较有兴趣,而西安电子科技大学又是网络安全的强校,所以想看一下相关的导师,顺便锻炼一下自己写脚本的能力。
本文所爬取到的信息均是西安电子科技大学学校网页上的公开信息,如果侵权,立即删除。
下面是代码段

#coding=utf-8import re
  #正则匹配运行库import requestsfrom  bs4 import BeautifulSoup #加载美味汤运行库import timeimport randomdef visit():   url='https://faculty.xidian.edu.cn/yxsz.jsp?urltype=tree.TreeTempUrl&wbtreeid=1020'   content=requests.get(url)   soup=BeautifulSoup(content.text,'lxml')   final_str=''   for x in soup.find_all('div',attrs={    "class":"li-b"}):
final_str+=str(x)
final_str1=final_str.replace('&','&')   college_url=re.findall('xyjslb.jsp.*urltype=tsites.CollegeTeacherList&wbtreeid=1020&st=0&id=.*&lang=zh_CN#collegeteacher',final_str1)   return college_url
   def replace_special_str(line):
for ch in line:
if ch in "u[]|\'":
line = line.replace(ch, "")
return linedef visit_every_college(college_url):
content=requests.get(college_url)
rule='  1/(.*) '
Number_of_page=re.findall(rule,content.text)
Number_of_page=replace_special_str(str(Number_of_page))
Number_of_page=int(Number_of_page)
match_rule='http://faculty.xidian.edu.cn/.*/zh_CN/index.htm'
for i in range(1,(Number_of_page+1),1):
aim_url='https://faculty.xidian.edu.cn/xyjslb.jsp?totalpage='+str(Number_of_page)+'&PAGENUM='+str(i)+'&urltype=tsites.CollegeTeacherList&wbtreeid=1001&st=0&id=1601&lang=zh_CN'
final_content=re.findall(match_rule,content.text)
return final_contentdef spide_teacher_Intro(url_i):
result=requests.get(url_i)
time.sleep(random.randint(0,3))
soup=BeautifulSoup(result.text,"lxml")
str2=''
str3=''
div=soup.find("div",attrs={    "class":"p_l_nr"})
if div==None:
str1='该老师无法爬取,请手动观看'
else:
str1=div.text
div1=soup.find("div",attrs={    "class":"t_jbxx_nr"})
str2=div1.text
div2=soup.find("div",attrs={    "class":"t_grjj_nr"})  
str="程序中没有编写对应的标签,请进行手动访问"
if div2==None:
div2=soup.find("div",class_="p_r_nr")
if div2==None:
str3=''
else:
str3=div2.text
final_str=str1.strip()+str2.strip()+str3
return final_strdef write_file(filename,final_content):
f= open(filename,'w')
double_teacher_num=len(final_content)
print (final_content)
#以写的方式打开文件,编码方式是utf-8
for i in range(0,double_teacher_num,2):#从0开始,步长为2
this_teacher=spide_teacher_Intro(final_content[i])
 
print (i)
f.write(u'\r\n')
  
link="第"+str(int((i/2)+1))+"个老师的个人简介:"
f.write(link)
f.write(u'\r\n') 
f.write(this_teacher.replace(u'\xa0',u' '))
f.write(u'\r\n')
f.close()
   def obt_filename():
url='https://faculty.xidian.edu.cn/yxsz.jsp?urltype=tree.TreeTempUrl&wbtreeid=1020'
content=requests.get(url)
soup=BeautifulSoup(content.text,"lxml")
second_content=''
for x in soup.find_all('div',attrs={    "class":"li-b"}):
second_content+=str(x)
rule='collegeteacher">(.*)'
college_name=re.findall(rule,second_content)
return college_name
 def main():
college_list=visit()
#先获取所有二级学院的列表
print ('Successful access to college list')
print (college_list)
college_num=len(college_list)   #获取学院个数
print ('Number of successful Colleges')
print (college_num)
#现在可以确认爬取所有学院是没有问题的
college_name=obt_filename()
  #获取所有学院名
print ('Successfully obtained all college names')
print (college_name)
#上面获取学院名也没有问题,下面就是分别读取每一页的内容然后写文件出了问题
for i in range(college_num-1):
#这一步是遍历学院
college_url_aim="https://faculty.xidian.edu.cn/"+college_list[i]
teacher_url=visit_every_college(college_url_aim)
print (len(teacher_url))
print (i)
print (college_name[i])
i=str(i)
file_name="D:\\pyjy\\"+str(college_name[int(i)])+'.txt'
write_file(file_name,teacher_url)   #将这个系的系名,还有所有老师的url传进写文件的函数if __name__ == '__main__':
main()

//
运行过程以及结果
在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述代码实现比较简单,整体的思路就是寻找网页中对应的标签,然后进行正则匹配。

转载地址:https://blog.csdn.net/weixin_43460070/article/details/109142915 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:从信息泄露到网站getshell
下一篇:代码审计-es*cms v6.7版本 文件包含漏洞

发表评论

最新留言

感谢大佬
[***.8.128.20]2023年03月03日 07时42分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

php中file用法,php中__FILE__常量用法简介 2019-12-06 20:23:37
Java1.8接口方法都是抽象,判断(1分) Java接口中所有的方法都是抽象的。 2019-12-06 20:23:37
java servlet 过滤,Java Web--Servlet--Filter过滤器 2019-12-06 20:23:37
php导出csv超时,php – 处理非常大的csv文件没有超时和内存错误 2019-12-06 20:23:37
python2018年面试题_2018年最新Python面试题及答案精编 2019-12-06 20:23:34
php 上传图片 中文,PHP 文件上传 2019-12-06 20:23:35
怎么表示一个PHP语句块,代码块之间的PHP变量范围 2019-12-06 20:23:35
dict去重python_python sorted() count() set(list)-去重 2019-12-06 20:23:35
php pdo要释放资源,php如何关闭pdo 2019-12-06 20:23:35
php保活,保活Docker容器与supervisord 2019-12-06 20:23:35
js文件引用php变量,php 引用js变量 2019-12-06 20:23:35
java简单手机脚本编写,Java认证:Java平台上更简单的脚本编写方法 2019-12-06 20:23:36
java写安卓布局_java – Android主布局模板 2019-12-06 20:23:33
java 8 switch用法_Java14新特性:Switch表达式 2019-12-06 20:23:33
java 泛型类型擦除后获得类型_Java泛型类型擦除以及类型擦除带来的问题 2019-12-06 20:23:33
java启动设置堆内存参数_005. 深入JVM学习—Java堆内存参数调整 2019-12-06 20:23:33
java怎么算数_JAVA初学者——算数运算符 2019-12-06 20:23:34
chrome嵌入式java_java – 在Chrome中的Vaadin Subwindow中显示嵌入式PDF 2019-12-06 20:23:34
dht 爬虫 java_[C#搜片神器] 之P2P中DHT网络爬虫原理 2019-12-06 20:23:34
java pcm16位_Java C.ENCODING_PCM_16BIT属性代码示例 2019-12-06 20:23:32