爬取步骤
-
获取网页响应 网页地址为(NBA赛程表|NBA总决赛赛程表|最全的2021-2022NBA赛程表—虎扑NBA)
-
解析网页
-
存储数据
爬取方法
-
通过requests库来请求网页
-
解析网页通过lxml库中的etree方法
-
存储数据到csv文件中
代码实现
import csv import requests from lxml import etree class nba(object): """创建封装类""" def __init__(self): # 初始化类 # 获取要爬取的球队名 self.team_name = input("请输入想要获取的球队 :") # 获取要爬取的url地址 self.url = self.get_url(self.team_name) # 获取内容 self.content = self.get_content(self.url) # 将获取到的内容写入到文件中 self.write_file(self.content,self.team_name) # print(self.content) def get_url(self, team_name): """定义获取url地址函数 url地址为’https://nba.hupu.com/schedule/‘+球队名 """ # 拼接url地址 url = 'https://nba.hupu.com/schedule/' + team_name return url def get_content(self,url): """定义获取内容函数""" # 将爬虫代码伪装成浏览器 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x6S4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36 Edg/99.0.1150.46'} # 获取网页响应 response = requests.get(url=url, headers=headers).text # 解析网页内容 res = etree.HTML(response) content = res.xpath('/html/body/div[3]/div[4]/table/tbody/tr[@class="left"]') a = [ ] # 遍历比赛总场数|获取每场比赛状况 for tr in content: # 获取主客场球队名 name = tr.xpath('./td/a/text()') name.pop(-1) # 获取比分 score = tr.xpath('./td[2]/text()')[ 0 ].replace('\n', '') score = score.replace('\xa0', '') # 获取比赛结果 result = tr.xpath('./td[3]/text()')[ 0 ].replace('\n', '') # 将每场比赛的主客场球队名|比分以及比赛结果加入进一个列表 name.append(score) name.append(result) # 将每场比赛状况加入进一个大列表|方便之后写入csv文件 a.append(name) return a def write_file(self, content,team_name): """将数据写入csv文件""" with open('./%s.csv' % team_name, 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) # 写入列名 writer.writerow([ '主场', '客场', '比分', '结果' ]) # 写入多行数据 writer.writerows([ day_detail for day_detail in content ]) if __name__ == '__main__': a = nba()
数据存储
数据存储到csv文件中去
主场 | 客场 | 比分 | 结果 |
---|---|---|---|
篮网 | 湖人 | 123-97 | 负 |
湖人 | 太阳 | 105-117 | 负 |
湖人 | 勇士 | 114-121 | 负 |
太阳 | 湖人 | 123-94 | 负 |