先统一引入本次爬取信息所需要的库文件

from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配
import urllib.request, urllib.error  # 制定url,获取网页数据
import sqlite3  # 进行SQLite数据库操作

URL的网页内容:通过在headers里面添加相关信息,以此来达到代码模拟浏览器向服务器发送的信息的目的

# URL的网页内容
def askURL(url):# 模拟浏览器头部信息,向服务器发送消息head = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.55 Safari/537.36 Edg/96.0.1054.34"}  # 用户代理:表示告诉目标服务器,我们是什么类型的机器;浏览器:本质上告诉服务器,我们能够接受什么水平的内容request = urllib.request.Request(url, headers=head)html = ""try:response = urllib.request.urlopen(request)html = response.read().decode("utf-8")# print(html)except urllib.error.URLError as e:if hasattr(e, "code"):print(e.code)if hasattr(e, "reason"):print(e.reason)return html

这里需要注意不同的网页的编码格式有可能不同,例如:‘utf-8’,‘gb2312’等相关类型

爬取网页

原始地址

选择不同队进行跳转

通过观察目标网址,当我们选择不同球队时,目标网址会在之前的网址前加上对应球队的英文名,以此来进行网页的跳转

def main():baseurl = "https://nba.hupu.com/players/"# 1、爬取网页datalist = getData(baseurl)

因此当我们需要爬取所有球队的全部球员时,只需要将所有队名放入在一个列表中,然后使用一个for循环对列表进行遍历,然后与原始URL进行拼接,以此来达到访问所有球队球员的目的

def getData(baseurl):datalist = []teamslist = ['grizzlies','mavericks','spurs','rockets','pelicans','warriors','suns','clippers','lakers','jazz','nuggets','timberwolves','blazers','thunder','nets','76ers','celtics','raptors','knicks','heat','wizards','hornets','hawks','magic','bulls','bucks','cavaliers','pacers','pistons']# teamslist = ['grizzlies']for i in teamslist:url = baseurl + str(i)html = askURL(url)

网页解析

目前就可以拿取到所有球队的网页源码(部分示例)

当我们拿到网页源码之后,对其进行分析,根据我们需要拿到的数据使用正则表达式和BeaytifulSoup相关规则进行提取

正则表达式代码示例:

# 获取球员详情数据的正则表达式规则
#球员图片
findImgSrc = re.compile(r'<img src="(.*?)"')
# 球员号码
findNum = re.compile(r'<td>(\d{1,2})</td>')
# 球员位置
findPosition = re.compile(r'<td>([A-Z-]+)</td>')
# 球员身高
findHeight = re.compile(r'<td>(.*?米/.*?)</td>')
# 球员体重
findWeight = re.compile(r'<td>(.*?公斤/.*?)</td>')
# 球员出生日期
findBirth = re.compile(r'<td>(\d{4}-\d{1,2}-\d{1,2})</td>')
# 球员薪资
findSalary = re.compile(r'<b>(本年薪金\:.*)</b>')

页面解析示例代码:

# 2、逐一解析数据soup = BeautifulSoup(html, "html.parser")for item in soup.find_all('table', class_="players_table"):   # 查找符合要求的字符串,形成列表print(item)   #测试:查看球员item全部信息data = []  # 保存每一位球员的所有信息item = str(item)# 获取到球员详情的链接link = []linkHtmllist = soup.find_all("td", class_="td_padding")  #使用bs4获取链接for linkHtmls in linkHtmllist:link.append(linkHtmls.find('a').get('href'))# print(link)data.append(link)  # 添加链接imgSrc = re.findall(findImgSrc, item)data.append(imgSrc)  # 添加图片names = []nameHtmls = soup. select("td[class='left']>b>a")for nameHtml in nameHtmls:names.append(nameHtml.text)# print(names)data.append(names)   #添加姓名num = []numlist = re.findall(findNum, item)for nums in numlist:#print(num)num.append(nums)# print(num)data.append(num)  # 添加号码position = []positionlist = re.findall(findPosition, item)for positions in positionlist:# print(position)position.append(positions)# print(position)data.append(position)  # 添加位置height = []heightlist = re.findall(findHeight,item)for heights in heightlist:#print(height)height.append(heights)data.append(height) # 添加身高weight = []weightlist = re.findall(findWeight,item)for weights in weightlist:#print(weight)weight.append(weights)data.append(weight)  # 添加体重birth = []birthlist = re.findall(findBirth,item)for births in birthlist:#print(birth)birth.append(births)data.append(birth)  # 添加出生日期salary = []salarylist = re.findall(findSalary,item)for salarys in salarylist:#print(salary)salary.append(salarys)# print(salary)sala = []sa = []for str1 in salary:str2 = str1.split(':')[1]money = str2.replace('万美元','')sala.append(money)for str4 in sala:if str4 == '':str4 = '0'sa.append(str4)data.append(sa)  # 添加本年薪金print(data)

此时我们爬取下来的数据是每一类放置在一个列表中

因为我们后面需要将爬取到的数据放置在数据库中,我们需要按照一个球员一个列表的形式进行存储,所以利用循环将每一个球员的信息遍历出来

        for d in range(len(data[0])):l =[]for s in range(len(data)):l.append(data[s][d])datalist.append(l)   # 把处理好的信息放入datalist

打印结果

到达这个阶段我们已经将所需要的信息爬取整理完毕,接下来就是存储到数据库中

使用sql语句创建数据表

def init_db(dbpath):sql = '''create table players(id integer primary key autoincrement,info_link text,pic_link text,name varchar,num int,position varchar ,height varchar ,weight varchar ,birth datatime,salary text)'''  # 创建数据表conn = sqlite3.connect(dbpath)cursor = conn.cursor()  # 创建游标cursor.execute(sql)  # 执行sql语句conn.commit()conn.close()         # 关闭连接

数据存储

# 保存数据
def saveData(datalist, dbpath):print("数据保存中...")init_db(dbpath)conn = sqlite3.connect(dbpath)cur = conn.cursor()for data in datalist:for index in range(len(data)):data[index] = '"' + data[index] + '"'sql = '''insert into players(info_link,pic_link,name,num,position,height,weight,birth,salary)values(%s)''' % ",".join(data)# print(sql)cur.execute(sql)conn.commit()cur.close()conn.close()print("保存数据成功!")

数据库中

Python爬取虎扑NBA球员信息相关推荐

  1. 利用python+scrapy+mysql爬取虎扑NBA球员数据存入数据库

      大家好,这是我的第一篇博客,写的不好请见谅. 小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息 ...

  2. 爬取虎扑nba球员得分榜信息并存储至MongoDB数据库

    Main.py: import re import requests from requests.exceptions import RequestException from config impo ...

  3. python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  4. python2爬取虎扑NBA的新闻标题和内容发送到QQ邮箱

    继之前分享了如何爬取虎扑新闻标题和内容,现在实现一下如何发送到QQ邮箱. 其实很简单啦,去自己的QQ邮箱账号设置里面开通一下SMTP.POP3啥的,然后生成一串只能你自己知道的授权码,使用这个授权码和 ...

  5. python爬取虎扑论坛帖子数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...

  6. python爬取虎扑评论_Python爬取NBA虎扑球员数据

    虎扑是一个认真而有趣的社区,每天有众多JRs在虎扑分享自己对篮球.足球.游戏电竞.运动装备.影视.汽车.数码.情感等一切人和事的见解,热闹.真实.有温度. 受害者地址 https://nba.hupu ...

  7. python爬取虎扑评论_python爬取网站数据

    编码问题 因为涉及到中文,所以必然地涉及到了编码的问题,这一次借这个机会算是彻底搞清楚了. 问题要从文字的编码讲起.原本的英文编码只有0~255,刚好是8位1个字节.为了表示各种不同的语言,自然要进行 ...

  8. python爬取虎扑评论_python爬去虎扑数据信息,完成可视化

    首先分析虎扑页面数据 如图我们所有需要的数据都在其中 ![image.png](1) 所以我们获取需要的内容直接利用beaitifulsoupui4 ``` soup.find_all('a',cla ...

  9. 爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷

    虎扑是广大jrs的家园,步行街是这个家园里最繁华的地段.据称广大jrs平均学历985,步行街街薪30w起步. 大学时经舍友安利,开始了解虎扑,主要是看看NBA的一些资讯. 偶尔也上上这个破街,看看jr ...

  10. python 爬取新浪网站 NBA球员最近2个赛季库里前20场数据

    1. 分析新浪网站中球员数据的获取方式(F12 开发者模式,调试网页): 一般网站保存数据的方式分为2种:1. 静态网页存储:2. 动态请求: 对于静态网页存储来说,就是打开浏览器中查看源码,就可以从 ...

最新文章

  1. String,StringBuffer与StringBuilder的区别??
  2. 一起学nRF51xx 8 -  Time
  3. 序列赋值引发的Python列表陷进
  4. MyEclipse使用总结——MyEclipse去除网上复制下来的来代码带有的行号
  5. 2分钟,我把网站性能优化了3倍!
  6. config.class.php,Config.class.php
  7. 【codevs1077】多源最短路
  8. Practical Machine Learning实用机器学习 章1
  9. 科多大数据_redis缓存的简单使用—科多大数据
  10. windows7安装openssh
  11. 自定义类加载器的父类为什么是AppClassLoader?
  12. 如何不用u盘将32位Windows转为64位Windows
  13. C语言链表详解附实例
  14. 九款免费轻量的 AutoCAD 的开源替代品推荐
  15. 使用rem,使字体大小自适应屏幕
  16. 在红帽linux创建目录,redhat linux建文件系统
  17. 【MySQL-设置定时任务】
  18. 如何对udp端口进行扫描
  19. 北京汽车摩托车年检查询指南(工作时间、最近检测厂、联系电话)
  20. python计算协方差矩阵_协方差矩阵、相关系数矩阵的EXCEL和python实现

热门文章

  1. 0-50A集成式霍尔电流传感器应用案例分享
  2. 如何用命令行去修改视频文件格式
  3. PDF文件太大,教你一个方法让PDF文件变小
  4. Google ptorobuf相关知识
  5. 什么叫单模光纤_单模光纤是什么?单模光纤有哪些分类?
  6. Hi3519V101 开发环境搭建
  7. ESP8266制作4G智能无人车按下前进松手即停和转弯调速的方案代码
  8. 开发者头条(一):导航页
  9. SEO与SEM的好处和区别
  10. 等比数列求和公式的推导