内容正文:
少儿编程课
1
爬取高校排名
本节课我们来编写一个爬虫案例,将高校信息爬取下来,并存入Excel表
3
课程案例
4
现在我们开始编写代码,首先使用Requests库获得页面信息
1
导入requests库,将要爬取的网站赋值给变量
2
编写获取整个网页数据的函数
import requests
# 要爬取的目标网站
start_url = 'https://tool.lu/school/index.html'
def get_text(url):
response = requests.get(url)
return response.text
获得网页信息数据后,查看网页源代码,确定我们所需数据的位置
1
在网页中单击右键,然后点击查看网页源代码
2
通过查看分析,发现需要的数据被两个相同的标签包裹在其中
确定了所需信息的位置之后,我们使用字符串相关知识来获取目标信息
1
通过源代码中的标签将整个页面数据拆分
2
继续查看源代码,发现每个高校信息被<tr>标签分割
# 使用字符串截取知识点获取所有高校数据
def get_item_by_str(text):
item_list = []
# 将整页数据拆为列表
list_1 = text.split('<table width="100%" cellspacing="0" cellpadding="0" class="tbl">')
# 将list_1的后半部分通过<tr>在拆一次
list_2 = list_1[1].split('<tr>')
3
通过索引获得包含高校数据的部分,并通过<tr>标签在拆分一次
1
输出list_2,观察得到的数据
2
以下是一部分数据
去除脏数据
# 使用字符串截取知识点获取所有高校数据
def get_item_by_str(text):
……
print(list_2)
content = get_text(start_url)
get_item_by_str(content)
列表第一项为空数据,之后的每一项都包含了高校的信息,但是有很多我们不需要的脏数据
1
通过切片,去除list_2列表中的第一项
2
替换每一项中的脏数据,只保留<td>
现在,我们去除列表中的脏数据
3
输出替换过后的数据
4
通过<td>标签再次将每一条数据进行拆分
for i in list_2:
# 去除脏数据
for tag in ['
', ' ', '</td>', '<span style="color: #009A61;">', '</span>', '</tr>', '<tr>',
'<th width="40%">', '<th width="20%">', '</th>', '<span style="color: #E74C3C;">',
'</table>', '<p>注:<p>', '<spanstyle="color:#009A61;">', '<spanstyle="color:#E74C3C;">']:
i = i.replace(tag, '')
list_2 = list_1[1].split('<tr>')[1:]
print(i)
little_item = i.split('<td>')
第一条数据是我们不需要的,我们暂时先不管它
1
输出little_item,结果如下:
2
通过切片去除空数据
接着观察处理后的数据,对数据进行进一步处理
3
将处理之后的小列表添加到之前创建的空列表中
4
将完整的高校信息表作为返回值返回,同时去除第一条我们不需要的数据
可以看到,第一个列表是我们不需要的数据,剩下的每一个高校信息列表中的第一项数据都为空数据
little_item = i.split('<td>')[1:]
# 将每个小列表添加到item_list中
item_list.append(little_item)
return item_list[1:]
正则表达式
11
正则表达式也能够索引数据
以下是正则表达式中常用的一些规则:
语法 说明 语法 说明
. 匹配除换行符以外的所有字符 * 匹配前一个字符0次或多次
\ 转义字符,例如想要匹配 . ,使用\. + 匹配前一个字符1次或多次
[…] 字符集 ? 匹配前一个字符0次或一次
\d 数字,也可写作[0-9] {m} 匹配前一个字符m次
\D 非数字,[^\d] {m,n} 匹配前一个字符m到n次
\s 空白字符 ^ 字符串以什么开头
\S 非空白字符[^\s] $ 字符串以什么