一、爬取网站大学排名Top500
1、选择要爬取目标网站
2、分析网站所需数据的源码
3、编写python爬虫程序
# -*- codeing = utf-8 -*-
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配`
import urllib.request, urllib.error # 制定URL,获取网页数据
import xlwt # 进行excel操作
class SchoolSorting:
def __init__(self, baseUrl, savePath):
self.baseUrl = baseUrl
self.savePath = savePath
self.findName = re.compile(r'<td>([\u4e00-\u9fa5]+)</td>')
self.findScore = re.compile(r'<td>(\d+\.{0,1}\d*)</td>')
self.html = "" # 网页原始数据
self.nameLink = [] # 大学名称
self.scoreLink = [] # 大学排名和评分
self.dataList = []
def run(self):
self.askURL() # 爬取网页,得到网页原始数据
self.getData() # 处理,获取大学名称、大学排名和评分s
self.getListData() # 集成大学名称、大学排名和评分
self.saveData() # 保存数据到表格
# 爬取网页,得到网页原始数据
def askURL(self):
head = {
# 模拟浏览器头部信息,向服务器发送消息
"User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122 Safari / 537.36"
}
# 用户代理,表示告诉服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)
request = urllib.request.Request(self.baseUrl, headers=head)
html = ""
try:
response = urllib.request.urlopen(request)
html = response.read().decode("utf-8")
except urllib.error.URLError as e:
if hasattr(e, "code"):
print(e.code)
if hasattr(e, "reason"):
print(e.reason)
self.html = html
# 处理,获取大学名称、大学排名和评分
def getData(self):
soup = BeautifulSoup(self.html, "html.parser")
item = soup.find('div', class_="u-body") # 查找符合要求的字符串
item = str(item)
self.nameLink = re.findall(self.findName, item) # 通过正则表达式查找
self.scoreLink = re.findall(self.findScore, item)
print(self.nameLink)
print(self.scoreLink)
# 集成大学名称、大学排名和评分
def getListData(self):
j = 0
z = 3
try:
for i in range(len(self.nameLink) + len(self.scoreLink)):
if i % 3 == 0:
self.dataList.append(self.scoreLink[j])
j = j + 1
elif i % 3 == 1:
self.dataList.append(self.nameLink[z])
z = z + 1
elif i % 3 == 2:
self.dataList.append(self.scoreLink[j])
j = j + 1
except Exception