爬取重庆大学计算机学院老师信息

该段代码获取的信息是来自2018-10-03的重庆大学计算机学院主页(http://www.cs.cqu.edu.cn/ )上的公开数据和信息,同时需要指出的是,所有的数据使用均以学习交流为目的,而非营利。

该段代码属于teach_computer_to_identify_teachers项目

1. 确定爬虫入口 : http://www.cs.cqu.edu.cn/szdw/szdw.htm

2. 看下网页源码,找到老师详细信息的入口

<td width="72" style="padding-bottom: 0cm; padding-left: 5.4pt; width: 54pt; padding-right: 5.4pt; height: 13.5pt; padding-top: 0cm"><p class="MsoNormal" style="text-align: center"><span lang="EN-US"><a href="http://www.cs.cqu.edu.cn/info/1141/1375.htm"><span lang="EN-US" style="font-family: 宋体; color: blue; font-size: 11pt"><span lang="EN-US">伍星</span></span></a></span> </p>

3.开始干活!

In [1]:
import re
from bs4 import BeautifulSoup
from urllib.request import urlopen,urlretrieve
In [2]:
html = urlopen(" http://www.cs.cqu.edu.cn/szdw/szdw.htm").read().decode('utf-8')
# html

发现网页结构很简单,用正则就够了

In [3]:
name = re.findall('">([^a][^a]|[^a][^a][^a]|[^a][^a][^a])</span>', html, flags=0)
href = re.findall('http://www.cs.cqu.edu.cn/info/\d\d\d\d/\d\d\d\d.htm', html, flags=0)
for i in range(len(name)):
    print(name[i],end = " ")
冯永 李学明 刘卫宁 熊忠阳 叶春晓 张玉芳 钟将 周尚波 陈四清 李季 宋伟 郑林江 尚家兴 刘大江 曽一 郭平 李佳 王茜 夏云霓 朱庆生 朱征宇 曾令秋 但静培 何静媛 黄仁 李双庆 刘慧君 刘然 石锐 孙天昊 王波 张程 周明强 邹东升 陈波 刘骥 吴全旺 杨瑞龙 叶莲 张敏 房斌 何中市 尚赵伟 陈恒鑫 葛亮 古平 文静 伍星 邢永康 张太平 陈自郁 杨广超 冯亮 郭松涛 刘凯 刘韦辰 汪成亮 吴开贵 陈超 石亮 谭玉娟 万里 吴长泽 肖春华 尹云飞 邓绍江 廖晓峰 向涛 肖迪 周庆 黄宏宇 罗军 涂凤华 杨吉云 郑洪英 朱晓红 李东晖 刘斌 钟世刚 

发现混入了三个错误的结果,另外还有一位老师没有详情页

In [4]:
del name[-3]
In [5]:
import pandas as pd
data = pd.DataFrame()
data["name"] = name
data["href"] = href
# data

然后到详情页里去把照片找到

In [6]:
buffer = urlopen("http://www.cs.cqu.edu.cn/info/1139/1271.htm").read().decode('utf-8')
# buffer

还是上Soup算了(这照片有png,jpg 甚至还有一张bmp...)

In [7]:
def get_picture(href):
    buffer = urlopen(href).read().decode('utf-8')
    soup = BeautifulSoup(buffer, features='lxml')
    img_links = soup.find_all("img", {"src": re.compile('.*?\.(jpg|png|bmp)')})
    if img_links:
        return "http://www.cs.cqu.edu.cn"+str(img_links[1]['src'])
    else:
        return "null"
data["picture_href"] = data["href"].apply(lambda x:get_picture(x))
data
Out[7]:
name href picture_href
0 冯永 http://www.cs.cqu.edu.cn/info/1139/1271.htm http://www.cs.cqu.edu.cn/__local/A/E6/4E/D4B16...
1 李学明 http://www.cs.cqu.edu.cn/info/1139/1259.htm http://www.cs.cqu.edu.cn/__local/1/5A/64/34202...
2 刘卫宁 http://www.cs.cqu.edu.cn/info/1139/1338.htm http://www.cs.cqu.edu.cn/__local/B/63/14/D8C75...
3 熊忠阳 http://www.cs.cqu.edu.cn/info/1141/1408.htm http://www.cs.cqu.edu.cn/__local/9/75/C9/69040...
4 叶春晓 http://www.cs.cqu.edu.cn/info/1139/2021.htm http://www.cs.cqu.edu.cn/__local/E/A5/E4/47A2B...
5 张玉芳 http://www.cs.cqu.edu.cn/info/1139/1260.htm http://www.cs.cqu.edu.cn/__local/6/CE/65/9B7ED...
6 钟将 http://www.cs.cqu.edu.cn/info/1139/1783.htm http://www.cs.cqu.edu.cn/__local/6/A4/6A/0E8EA...
7 周尚波 http://www.cs.cqu.edu.cn/info/1139/1434.htm http://www.cs.cqu.edu.cn/__local/0/25/4C/96207...
8 陈四清 http://www.cs.cqu.edu.cn/info/1139/1293.htm http://www.cs.cqu.edu.cn/__local/0/7D/F9/ACED9...
9 李季 http://www.cs.cqu.edu.cn/info/1139/1290.htm http://www.cs.cqu.edu.cn/__local/6/50/FA/8E53D...
10 宋伟 http://www.cs.cqu.edu.cn/info/1139/1286.htm http://www.cs.cqu.edu.cn/__local/9/92/EF/C5A10...
11 郑林江 http://www.cs.cqu.edu.cn/info/1139/1293.htm http://www.cs.cqu.edu.cn/__local/0/7D/F9/ACED9...
12 尚家兴 http://www.cs.cqu.edu.cn/info/1139/1312.htm http://www.cs.cqu.edu.cn/__local/9/88/C9/B9EC7...
13 刘大江 http://www.cs.cqu.edu.cn/info/1139/1757.htm http://www.cs.cqu.edu.cn/__local/B/9F/81/CAA52...
14 曽一 http://www.cs.cqu.edu.cn/info/1141/1361.htm http://www.cs.cqu.edu.cn/__local/0/43/4B/4B186...
15 郭平 http://www.cs.cqu.edu.cn/info/1138/1255.htm http://www.cs.cqu.edu.cn/__local/3/36/D4/66117...
16 李佳 http://www.cs.cqu.edu.cn/info/1138/1256.htm http://www.cs.cqu.edu.cn/__local/4/0C/AB/80166...
17 王茜 http://www.cs.cqu.edu.cn/info/1138/1362.htm http://www.cs.cqu.edu.cn/__local/4/53/C3/18787...
18 夏云霓 http://www.cs.cqu.edu.cn/info/1138/1257.htm http://www.cs.cqu.edu.cn/__local/6/A4/72/9ED4F...
19 朱庆生 http://www.cs.cqu.edu.cn/info/1138/1253.htm http://www.cs.cqu.edu.cn/__local/9/CB/24/4F704...
20 朱征宇 http://www.cs.cqu.edu.cn/info/1138/1436.htm http://www.cs.cqu.edu.cn/__local/E/AF/DC/3E6B0...
21 曾令秋 http://www.cs.cqu.edu.cn/info/1138/1311.htm http://www.cs.cqu.edu.cn/__local/9/4B/37/7F725...
22 但静培 http://www.cs.cqu.edu.cn/info/1138/1352.htm null
23 何静媛 http://www.cs.cqu.edu.cn/info/1138/1303.htm http://www.cs.cqu.edu.cn/__local/3/F7/F4/0F408...
24 黄仁 http://www.cs.cqu.edu.cn/info/1140/1403.htm http://www.cs.cqu.edu.cn/__local/A/61/7F/76D39...
25 李双庆 http://www.cs.cqu.edu.cn/info/1138/1389.htm http://www.cs.cqu.edu.cn/__local/E/8E/41/1E7CE...
26 刘慧君 http://www.cs.cqu.edu.cn/info/1141/1364.htm http://www.cs.cqu.edu.cn/__local/A/9D/0E/EB046...
27 刘然 http://www.cs.cqu.edu.cn/info/1138/1307.htm http://www.cs.cqu.edu.cn/__local/8/A7/25/22780...
28 石锐 http://www.cs.cqu.edu.cn/info/1138/1299.htm http://www.cs.cqu.edu.cn/__local/A/55/D6/C5228...
29 孙天昊 http://www.cs.cqu.edu.cn/info/1140/1414.htm http://www.cs.cqu.edu.cn/__local/5/56/56/EFE44...
... ... ... ...
48 邢永康 http://www.cs.cqu.edu.cn/info/1138/1294.htm http://www.cs.cqu.edu.cn/__local/6/93/0C/C236C...
49 张太平 http://www.cs.cqu.edu.cn/info/1139/1279.htm http://www.cs.cqu.edu.cn/__local/D/18/13/64F6E...
50 陈自郁 http://www.cs.cqu.edu.cn/info/1138/1351.htm http://www.cs.cqu.edu.cn/__local/9/09/A7/F4B60...
51 杨广超 http://www.cs.cqu.edu.cn/info/1138/1359.htm http://www.cs.cqu.edu.cn/__local/E/DB/F3/F8951...
52 冯亮 http://www.cs.cqu.edu.cn/info/1139/1336.htm http://www.cs.cqu.edu.cn/__local/8/5B/59/006F5...
53 郭松涛 http://www.cs.cqu.edu.cn/info/1139/1329.htm http://www.cs.cqu.edu.cn/__local/F/B1/D9/4E8C8...
54 刘凯 http://www.cs.cqu.edu.cn/info/1139/1489.htm http://www.cs.cqu.edu.cn/__local/C/FD/71/04CDE...
55 刘韦辰 http://www.cs.cqu.edu.cn/info/1139/1334.htm http://www.cs.cqu.edu.cn/__local/B/E9/2E/E5BBB...
56 汪成亮 http://www.cs.cqu.edu.cn/info/1139/1262.htm http://www.cs.cqu.edu.cn/__local/8/44/C2/9BDBD...
57 吴开贵 http://www.cs.cqu.edu.cn/info/1140/1382.htm http://www.cs.cqu.edu.cn/__local/3/CE/7B/C516C...
58 陈超 http://www.cs.cqu.edu.cn/info/1140/1583.htm http://www.cs.cqu.edu.cn/__local/8/CE/EB/E7D5C...
59 石亮 http://www.cs.cqu.edu.cn/info/1139/1297.htm http://www.cs.cqu.edu.cn/__local/D/85/82/33EEE...
60 谭玉娟 http://www.cs.cqu.edu.cn/info/1139/1295.htm http://www.cs.cqu.edu.cn/__local/6/04/D8/C1B45...
61 万里 http://www.cs.cqu.edu.cn/info/1139/1288.htm http://www.cs.cqu.edu.cn/__local/0/23/73/D74CA...
62 吴长泽 http://www.cs.cqu.edu.cn/info/1140/1396.htm http://www.cs.cqu.edu.cn/__local/3/9D/61/C52D6...
63 肖春华 http://www.cs.cqu.edu.cn/info/1139/1942.htm http://www.cs.cqu.edu.cn/__local/2/18/1E/07C35...
64 尹云飞 http://www.cs.cqu.edu.cn/info/1139/1292.htm http://www.cs.cqu.edu.cn/__local/6/72/F7/D0C52...
65 邓绍江 http://www.cs.cqu.edu.cn/info/1140/2118.htm http://www.cs.cqu.edu.cn/__local/E/83/A1/5FFBE...
66 廖晓峰 http://www.cs.cqu.edu.cn/info/1140/2224.htm http://www.cs.cqu.edu.cn/__local/2/27/87/2E85D...
67 向涛 http://www.cs.cqu.edu.cn/info/1140/1746.htm http://www.cs.cqu.edu.cn/__local/C/6E/56/1D886...
68 肖迪 http://www.cs.cqu.edu.cn/info/1140/1381.htm http://www.cs.cqu.edu.cn/__local/7/83/DC/C81C5...
69 周庆 http://www.cs.cqu.edu.cn/info/1140/1384.htm http://www.cs.cqu.edu.cn/__local/2/55/26/92974...
70 黄宏宇 http://www.cs.cqu.edu.cn/info/1140/1391.htm http://www.cs.cqu.edu.cn/__local/4/CE/E1/3A853...
71 罗军 http://www.cs.cqu.edu.cn/info/1140/1386.htm http://www.cs.cqu.edu.cn/__local/7/FE/31/A9BF2...
72 涂凤华 http://www.cs.cqu.edu.cn/info/1140/1390.htm http://www.cs.cqu.edu.cn/__local/9/92/EF/C5A10...
73 杨吉云 http://www.cs.cqu.edu.cn/info/1140/1388.htm http://www.cs.cqu.edu.cn/__local/4/26/97/79DB2...
74 郑洪英 http://www.cs.cqu.edu.cn/info/1140/2155.htm http://www.cs.cqu.edu.cn/__local/A/F9/79/6E219...
75 朱晓红 http://www.cs.cqu.edu.cn/info/1140/1861.htm http://www.cs.cqu.edu.cn/__local/B/27/7A/AC0AD...
76 刘斌 http://www.cs.cqu.edu.cn/info/1140/1517.htm http://www.cs.cqu.edu.cn/__local/9/E8/C1/95E24...
77 钟世刚 http://www.cs.cqu.edu.cn/info/1140/1398.htm http://www.cs.cqu.edu.cn/__local/2/AC/9D/DE2EE...

78 rows × 3 columns

把图片下下来

In [9]:
import os
from PIL import Image
def download_picture(name,url):
    if url == "null":
        return name+" 无照片"
    else:
        if not os.path.exists("./picture"):
            os.makedirs("./picture")
            
        if url[-3:] =="jpg":
            filename ="./picture/{}.jpg".format(name)
            urlretrieve(url,filename)
            return name
        
        if url[-3:] =="png":
            filename ="./picture/{}.png".format(name)
            urlretrieve(url,filename)
            
            Image.open(filename).convert('RGB').save(filename.replace("png","jpg"))
            os.remove(filename)
            return name
        
        if url[-3:] =="bmp":
            filename ="./picture/{}.bmp".format(name)
            urlretrieve(url,filename)
            Image.open(filename).convert('RGB').save(filename.replace("bmp","jpg"))
            os.remove(filename)
            return name
        
data.apply(lambda x:download_picture(x["name"],x["picture_href"]), axis=1)

print("Done") #只是不想看上一行的输出
Done