三、 实验内容和实验步骤:
3.1 第一项内容:爬取大学排名
爬取最好大学网网页中549所国内大学的排名数据,并将排名、学校名称、省市、总分、社会声誉等内容打印出来。
3.2 第二项内容:爬取中国工程院院士信息
爬取中国工程院网页上,把每位院士的简介保存为本地文件,把每位院士的照片保存为本地图片,文本文件和图片文件都以院士的姓名为主文件。
4.1 任务一实验步骤:
(1)使用Google Chrome或其他浏览器打开下面的网址,然后在页面上右击,在弹出的菜单中选择“查看网页源代码”。
http://www.zuihaodaxue.cn/zuihaodaxuepaiming20链接19.html
(2)分析网页源代码的,确定每个学校的姓名和连接所在的HTML标签,为解析网页做准备。
(3)编写代码,爬取信息。
import re
from fake_useragent import UserAgent
import requests
def find_str(start, end, str):
partten = r'(?<=%s).*?(?=%s)'%(start,end)
list = re.findall(partten, str)
return list
ua = UserAgent()
head = {'User-Agent': ua.random}
web_url = 'http://www.zuihaodaxue.cn/zuihaodaxuepaiming2019.html'
req = requests.get(web_url, headers=head)
req.encoding = 'utf-8'
# 提取每一个学校的所有信息
list_tmp = find_str('', ' ', req.text)
# 学校名字
name_list = find_str('','',str(list_tmp))
# 培养规模
out_list = find_str( ' ',str(list_tmp))
# 排名 位置 得分
temp_list = find_str('',' ',str(list_tmp))
list_r = []
list_l = []
list_s = []
i = 0
while i<len(temp_list):
list_r.append(temp_list[i])
list_l.append(temp_list[i+2])
list_s.append(temp_list[i+3])
i = i+4
print('排名 学校名称 省市 总分 培养规模')
for i in range(len(list_r)):
print(' '+list_r[i]+' '+name_list[i]+' '+
list_l[i]+' '+list_s[i]+' '+
out_list[i])
4.2任务二实验步骤:
(1)使用Google Chrome或其他浏览器打开下面的网址,然后在页面上右击,在弹出的菜单中选择“查看网页源代码”。
http://www.cae.cn/cae/html/main/col48/column_48_1.html
(2)分析网页源代码的,确定每个院士的姓名和链接所在的HTML标签,为编写正则表达式做准备。
(3)使用浏览器打开任意一位院士的链接,然后查看并分析网页源代码,确定简介信息和照片所以的HTML标签,为编写正则表达式做准备。
(4)编写代码,爬取信息并创建本地文件。
from time import sleep
import requests
import re
import os
import urllib.request
from fake_useragent import UserAgent
def find_something(start, end, text):
partten = r'(?<=%s).*?(?=%s)' % (start, end)
list1 = re.findall(partten, text)
return list1
def get_url_list():
name_url = 'http://www.cae.cn/cae/html/main/col48/column_48_1.html'
ua = UserAgent()
head = {'User-Agent': ua.random}
res = requests.get(name_url, headers=head)
res.encoding = 'utf-8'
url_list = find_something(', '" target="_blank">', res.text)
for i in range(len(url_list)):
url_list[i] = 'http://www.cae.cn' + url_list[i]
set1 = set(url_list)
return set1
def get_txt_pic(url):
ua = UserAgent()
head = {
'User-Agent': ua.random
}
res = requests.get(url, headers=head)
res.encoding = 'utf-8'
picture1 = find_something(', '" style="width:150px;height:210px;"/>', res.text)
picture = picture1[0]
picture = 'http://www.cae.cn/' + picture
list1 = find_something('', '', res.text)
name = list1[0]
list1 = find_something(''
, '', res.text)
str1 = ''
for i in range(1, len(list1)):
str1 = str1 + list1[i] + '\n'
str1 = str1.replace(" ", "")
str1 = str1.replace(" ", "")
f = open(name + '.txt', "w+", encoding='utf-8')
f.write(str1)
f.close()
if not os.path.exists(name + '.jpg'):
urllib.request.urlretrieve(picture, name + '.jpg')
list1 = get_url_list()
for li in list1:
get_txt_pic(li)
sleep(100)