这段代码是一个Python网络爬虫,用于从指定的NBA球员页面抓取球员信息,并将这些信息保存到Excel文件中。以下是对代码各部分的详细介绍:
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
# -*- coding = utf-8 -*-
from bs4 import BeautifulSoup # 网页解析,获取数据
import re # 正则表达式,进行文字匹配
import urllib.request, urllib.error # 制定URL,获取网页数据
import xlwt # 进行excel操作
首先,我们导入了一些必要的Python库,包括BeautifulSoup(用于解析HTML),re(用于使用正则表达式进行文本匹配),urllib(用于获取网页数据),以及xlwt(用于操作Excel文件)。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
# 创建正则表达式对象,标识规则
findName = re.compile(r'<div class="name">(.*?)</div>')
findPosition = re.compile(r'<div class="position">(.*?)</div>')
findHeight = re.compile(r'<div class="height">(.*?)</div>')
findWeight = re.compile(r'<div class="weight">(.*?)</div>')
findNumber = re.compile(r'<div class="number">(.*?)</div>')
findBirthday = re.compile(r'<div class="birthday">(.*?)</div>')
findExperience = re.compile(r'<div class="experience">(.*?)</div>')
findPreNBA = re.compile(r'<div class="pre-nba">(.*?)</div>')
findNationality = re.compile(r'<div class="nationality">(.*?)</div>')
接下来,我们定义了一些正则表达式,用于从HTML中提取我们感兴趣的信息,如球员的姓名、位置、身高、体重、球号、生日、经验、进入NBA之前的情况以及国籍。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
def main():
baseurl = "https://china.nba.cn/teams/roster/#!/grizzlies" # 要爬取的网页链接
datalist = getData(baseurl)
savepath = "NBA_players.xls" # 当前目录新建XLS,存储进去
saveData(datalist, savepath)
在main()
函数中,我们定义了要爬取的网页链接,然后调用getData()
函数来获取数据,并将这些数据保存到Excel文件中。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
# 爬取网页
def getData(baseurl):
datalist = [] # 用来存储爬取的网页信息
html = askURL(baseurl) # 保存获取到的网页源码
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all('div', class_="player"): # 查找符合要求的字符串
data = [] # 保存一部电影所有信息
item = str(item)
name = re.findall(findName, item)[0]
data.append(name)
position = re.findall(findPosition, item)[0]
data.append(position)
height = re.findall(findHeight, item)[0]
data.append(height)
weight = re.findall(findWeight, item)[0]
data.append(weight)
number = re.findall(findNumber, item)[0]
data.append(number)
birthday = re.findall(findBirthday, item)[0]
data.append(birthday)
experience = re.findall(findExperience, item)[0]
data.append(experience)
pre_nba = re.findall(findPreNBA, item)[0]
data.append(pre_nba)
nationality = re.findall(findNationality, item)[0]
data.append(nationality)
datalist.append(data)
return datalist
在getData()
函数中,我们首先打开网页并获取其HTML源码,然后使用BeautifulSoup来解析这个HTML。我们查找所有的div
元素,其类名为player
,然后对于每一个这样的元素,我们使用之前定义的正则表达式来提取我们感兴趣的信息,并将这些信息添加到数据列表中。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
# 得到指定一个URL的网页内容
def askURL(url):
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(url, 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)
return html
askURL()
函数用于获取指定URL的网页内容。我们创建了一个请求,并在请求的头部信息中设置了用户代理,这样我们就可以模拟浏览器向服务器发送请求。然后我们尝试打开这个URL并读取其内容。如果在这个过程中发生任何错误,我们会打印出错误的代码和原因。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
# 保存数据到表格
def saveData(datalist, savepath):
book = xlwt.Workbook(encoding="utf-8", style_compression=0) # 创建workbook对象
sheet = book.add_sheet('NBA Players', cell_overwrite_ok=True) # 创建工作表
col = ("姓名", "位置", "身高", "体重", "球号", "生日", "经验", "进入NBA之前", "国籍")
for i in range(0, 9):
sheet.write(0, i, col[i]) # 列名
for i in range(0, len(datalist)):
data = datalist[i]
for j in range(0, 9):
sheet.write(i + 1, j, data[j]) # 数据
book.save(savepath) # 保存
最后,saveData()
函数将获取的数据保存到Excel文件中。我们创建了一个新的工作簿和工作表,然后将数据写入到这个工作表中。每一行代表一个球员,每一列代表一个属性(如姓名、位置等)。最后,我们保存这个工作簿到指定的路径。
PythonAI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
if __name__ == '__main__':
main()
这是Python程序的常见结构,当我们直接运行这个文件时,__name__
变量的值为__main__
,所以main()
函数会被调用。如果我们从另一个文件导入这个文件,__name__
变量的值为这个文件的名字,所以main()
函数不会被调用。
总的来说,这段代码是一个完整的Python网络爬虫程序,它展示了如何使用BeautifulSoup库和正则表达式来抓取网页信息,以及如何使用xlwt库将数据保存到Excel文件中。