scrapy 教程 MySQL_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

本文主要是介绍scrapy 教程 MySQL_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

获取要爬取的URL

773cecffaacae937b98c20e2c693ce8e.png

149ead1e9d9c6e6e99f45bfac9f5056d.png

432af78e253e3ca6efc9dd6c36391062.png

819a159bedcaf0a8f3303ecce2fd64e7.png

799afe868bc134b9840af2a081b7c019.png

d0f3bbb92a5996947732ff095ed4de8d.png

爬虫前期工作

c0906de3d638a492c6889a783383adbd.png

用Pycharm打开项目开始写爬虫文件

字段文件items

# Define here the models for your scraped items

#

# See documentation in:

# https://docs.scrapy.org/en/latest/topics/items.html

import scrapy

class NbaprojectItem(scrapy.Item):

# define the fields for your item here like:

# name = scrapy.Field()

# pass

# 创建字段的固定格式-->scrapy.Field()

# 英文名

engName = scrapy.Field()

# 中文名

chName = scrapy.Field()

# 身高

height = scrapy.Field()

# 体重

weight = scrapy.Field()

# 国家英文名

contryEn = scrapy.Field()

# 国家中文名

contryCh = scrapy.Field()

# NBA球龄

experience = scrapy.Field()

# 球衣号码

jerseyNo = scrapy.Field()

# 入选年

draftYear = scrapy.Field()

# 队伍英文名

engTeam = scrapy.Field()

# 队伍中文名

chTeam = scrapy.Field()

# 位置

position = scrapy.Field()

# 东南部

displayConference = scrapy.Field()

# 分区

division = scrapy.Field()

爬虫文件

import scrapy

import json

from nbaProject.items import NbaprojectItem

class NbaspiderSpider(scrapy.Spider):

name = 'nbaSpider'

allowed_domains = ['nba.com']

# 第一次爬取的网址,可以写多个网址

# start_urls = ['http://nba.com/']

start_urls = ['https://china.nba.com/static/data/league/playerlist.json']

# 处理网址的response

def parse(self, response):

# 因为访问的网站返回的是json格式,首先用第三方包处理json数据

data = json.loads(response.text)['payload']['players']

# 以下列表用来存放不同的字段

# 英文名

engName = []

# 中文名

chName = []

# 身高

height = []

# 体重

weight = []

# 国家英文名

contryEn = []

# 国家中文名

contryCh = []

# NBA球龄

experience = []

# 球衣号码

jerseyNo = []

# 入选年

draftYear = []

# 队伍英文名

engTeam = []

# 队伍中文名

chTeam = []

# 位置

position = []

# 东南部

displayConference = []

# 分区

division = []

# 计数

count = 1

for i in data:

# 英文名

engName.append(str(i['playerProfile']['firstNameEn'] + i['playerProfile']['lastNameEn']))

# 中文名

chName.append(str(i['playerProfile']['firstName'] + i['playerProfile']['lastName']))

# 国家英文名

contryEn.append(str(i['playerProfile']['countryEn']))

# 国家中文

contryCh.append(str(i['playerProfile']['country']))

# 身高

height.append(str(i['playerProfile']['height']))

# 体重

weight.append(str(i['playerProfile']['weight']))

# NBA球龄

experience.append(str(i['playerProfile']['experience']))

# 球衣号码

jerseyNo.append(str(i['playerProfile']['jerseyNo']))

# 入选年

draftYear.append(str(i['playerProfile']['draftYear']))

# 队伍英文名

engTeam.append(str(i['teamProfile']['code']))

# 队伍中文名

chTeam.append(str(i['teamProfile']['displayAbbr']))

# 位置

position.append(str(i['playerProfile']['position']))

# 东南部

displayConference.append(str(i['teamProfile']['displayConference']))

# 分区

division.append(str(i['teamProfile']['division']))

# 创建item字段对象,用来存储信息 这里的item就是对应上面导的NbaprojectItem

item = NbaprojectItem()

item['engName'] = str(i['playerProfile']['firstNameEn'] + i['playerProfile']['lastNameEn'])

item['chName'] = str(i['playerProfile']['firstName'] + i['playerProfile']['lastName'])

item['contryEn'] = str(i['playerProfile']['countryEn'])

item['contryCh'] = str(i['playerProfile']['country'])

item['height'] = str(i['playerProfile']['height'])

item['weight'] = str(i['playerProfile']['weight'])

item['experience'] = str(i['playerProfile']['experience'])

item['jerseyNo'] = str(i['playerProfile']['jerseyNo'])

item['draftYear'] = str(i['playerProfile']['draftYear'])

item['engTeam'] = str(i['teamProfile']['code'])

item['chTeam'] = str(i['teamProfile']['displayAbbr'])

item['position'] = str(i['playerProfile']['position'])

item['displayConference'] = str(i['teamProfile']['displayConference'])

item['division'] = str(i['teamProfile']['division'])

# 打印爬取信息

print("传输了",count,"条字段")

count += 1

# 将字段交回给引擎 -> 管道文件

yield item

配置文件->开启管道文件

387a6b273abefb6342894be859cbf2b7.png

e8df7bdab48b4365a00c7213f92166cc.png

# Scrapy settings for nbaProject project

#

# For simplicity, this file contains only settings considered important or

# commonly used. You can find more settings consulting the documentation:

#

# https://docs.scrapy.org/en/latest/topics/settings.html

# https://docs.scrapy.org/en/latest/topics/downloader-middleware.html

# https://docs.scrapy.org/en/latest/topics/spider-middleware.html

# ----------不做修改部分---------

BOT_NAME = 'nbaProject'

SPIDER_MODULES = ['nbaProject.spiders']

NEWSPIDER_MODULE = 'nbaProject.spiders'

# ----------不做修改部分---------

# Crawl responsibly by identifying yourself (and your website) on the user-agent

#USER_AGENT = 'nbaProject (+http://www.yourdomain.com)'

# Obey robots.txt rules

# ----------修改部分(可以自行查这是啥东西)---------

# ROBOTSTXT_OBEY = True

# ----------修改部分---------

# Configure maximum concurrent requests performed by Scrapy (default: 16)

#CONCURRENT_REQUESTS = 32

# Configure a delay for requests for the same website (default: 0)

# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay

# See also autothrottle settings and docs

#DOWNLOAD_DELAY = 3

# The download delay setting will honor only one of:

#CONCURRENT_REQUESTS_PER_DOMAIN = 16

#CONCURRENT_REQUESTS_PER_IP = 16

# Disable cookies (enabled by default)

#COOKIES_ENABLED = False

# Disable Telnet Console (enabled by default)

#TELNETCONSOLE_ENABLED = False

# Override the default request headers:

#DEFAULT_REQUEST_HEADERS = {

# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

# 'Accept-Language': 'en',

#}

# Enable or disable spider middlewares

# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html

#SPIDER_MIDDLEWARES = {

# 'nbaProject.middlewares.NbaprojectSpiderMiddleware': 543,

#}

# Enable or disable downloader middlewares

# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html

#DOWNLOADER_MIDDLEWARES = {

# 'nbaProject.middlewares.NbaprojectDownloaderMiddleware': 543,

#}

# Enable or disable extensions

# See https://docs.scrapy.org/en/latest/topics/extensions.html

#EXTENSIONS = {

# 'scrapy.extensions.telnet.TelnetConsole': None,

#}

# Configure item pipelines

# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html

# 开启管道文件

# ----------修改部分---------

ITEM_PIPELINES = {

'nbaProject.pipelines.NbaprojectPipeline': 300,

}

# ----------修改部分---------

# Enable and configure the AutoThrottle extension (disabled by default)

# See https://docs.scrapy.org/en/latest/topics/autothrottle.html

#AUTOTHROTTLE_ENABLED = True

# The initial download delay

#AUTOTHROTTLE_START_DELAY = 5

# The maximum download delay to be set in case of high latencies

#AUTOTHROTTLE_MAX_DELAY = 60

# The average number of requests Scrapy should be sending in parallel to

# each remote server

#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0

# Enable showing throttling stats for every response received:

#AUTOTHROTTLE_DEBUG = False

# Enable and configure HTTP caching (disabled by default)

# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings

#HTTPCACHE_ENABLED = True

#HTTPCACHE_EXPIRATION_SECS = 0

#HTTPCACHE_DIR = 'httpcache'

#HTTPCACHE_IGNORE_HTTP_CODES = []

#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

管道文件 -> 将字段写进mysql

# Define your item pipelines here

#

# Don't forget to add your pipeline to the ITEM_PIPELINES setting

# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

# useful for handling different item types with a single interface

from itemadapter import ItemAdapter

import pymysql

class NbaprojectPipeline:

# 初始化函数

def __init__(self):

# 连接数据库 注意修改数据库信息

self.connect = pymysql.connect(host='域名', user='用户名', passwd='密码',

db='数据库', port=端口号)

# 获取游标

self.cursor = self.connect.cursor()

# 创建一个表用于存放item字段的数据

createTableSql = """

create table if not exists `nbaPlayer`(

playerId INT UNSIGNED AUTO_INCREMENT,

engName varchar(80),

chName varchar(20),

height varchar(20),

weight varchar(20),

contryEn varchar(50),

contryCh varchar(20),

experience int,

jerseyNo int,

draftYear int,

engTeam varchar(50),

chTeam varchar(50),

position varchar(50),

displayConference varchar(50),

division varchar(50),

primary key(playerId)

)charset=utf8;

"""

# 执行sql语句

self.cursor.execute(createTableSql)

self.connect.commit()

print("完成了创建表的工作")

#每次yield回来的字段会在这里做处理

def process_item(self, item, spider):

# 打印item增加观赏性

print(item)

# sql语句

insert_sql = """

insert into nbaPlayer(

playerId, engName,

chName,height,

weight,contryEn,

contryCh,experience,

jerseyNo,draftYear

,engTeam,chTeam,

position,displayConference,

division

) VALUES (null,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)

"""

# 执行插入数据到数据库操作

# 参数(sql语句,用item字段里的内容替换sql语句的占位符)

self.cursor.execute(insert_sql, (item['engName'], item['chName'], item['height'], item['weight']

, item['contryEn'], item['contryCh'], item['experience'], item['jerseyNo'],

item['draftYear'], item['engTeam'], item['chTeam'], item['position'],

item['displayConference'], item['division']))

# 提交,不进行提交无法保存到数据库

self.connect.commit()

print("数据提交成功!")

启动爬虫

87a84a0fb807dcf15ee87f453442fbab.png

屏幕上滚动的数据

9bb7b28c47e3e39fc891ceb046d71f1a.png

去数据库查看数据

7ef2cfb1fd6a41983bd7947c4f9ce3c1.png

简简单单就把球员数据爬回来啦~

到此这篇关于详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库的文章就介绍到这了,更多相关Scrapy爬虫员数据存放到Mysql内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题: 详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

本文地址: http://www.cppcns.com/shujuku/mysql/374912.html

这篇关于scrapy 教程 MySQL_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322859

相关文章

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python使用Matplotlib绘制3D曲面图详解

《Python使用Matplotlib绘制3D曲面图详解》:本文主要介绍Python使用Matplotlib绘制3D曲面图,在Python中,使用Matplotlib库绘制3D曲面图可以通过mpl... 目录准备工作绘制简单的 3D 曲面图绘制 3D 曲面图添加线框和透明度控制图形视角Matplotlib

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例