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

  大家好,这是我的第一篇博客,写的不好请见谅。

小编是个多年的NBA观众,最近正值季后赛的比赛,闲来无事,突发奇想,想利用刚刚所学的python著名爬虫框架scrapy采集一下全NBA的球员基本信息。好了闲话不多说,让我们开始吧!

                                                                

一.环境配置

1.安装python3.6,并且配置环境变量,打开cmd,输入python 显示以下内容说明安装成功。


2.python安装好了,然后安装scrapy框架

可以直接去点击打开链接这里按Shift+f组合键打开搜索框,输入scrapy,下载最新版本的scrapy。

(1)

(2)  scrapy依赖twiste包,我们还是去点击这里去下载这个包。

  (3)     安装 lxml解析库,这个直接在cmd中输入pip install lxml即可。

3.然后不要着急启动,安装whl文件需要安装wheel库,这里直接打开cmd 输入pip install wheel安装即可。

4. 以上手动下载的包需要复制到你的python路径下面,我的是这个路径,找到Scripts这个文件夹,把刚才下载的 .whl 文件复制到里面。

5.然后打开cmd依次启动它们 例如 ,启动scrapy也是同理。

6.如果按照以上步骤完毕之后,在cmd中输入scrapy -h显示如下内容,则证明你终于安装成功了scrapy框架,可以正式开始了!

二 开始你的第一个scrapy项目

经过以上安装的痛苦,终于可以开始了。let's go! 打开你的cmd ,输入以下命令

         (XXX是项目的名字,可以自定义)

这里我建立了一个叫hupu的项目 执行完毕命令后你会发现相应路径下多了一个文件夹,错,这就是你的项目文件夹。你的目录结构应该是这样的。然后右键点击spiders新建一个.py文件,这个就是你的爬虫代码文件。我起了一个叫players.py文件

                                                                                 

下面来简单介绍一下各个文件作用:

     1、Items是将要装载抓取的数据的容器,它工作方式像python里面的字典。定义它的属性为scrpiy.item.Field对象,就像是一个对象关系映射(ORM). 

     2、Spider是用户编写的类,用于从一个域(或域组)中抓取信息

    3,  pipelines.py: 项目管道文件,用于提取Items内容 

    4、settings.py: 项目配置文件

    5、middlewares.py下载中间件。

说到scrapy不得不说下面这张图:



Scrapy Engine: 这是引擎,负责Spiders、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等等!(像不像人的身体?)

Scheduler(调度器): 它负责接受引擎发送过来的requests请求,并按照一定的方式进行整理排列,入队、并等待Scrapy Engine(引擎)来请求时,交给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spiders来处理,

Spiders:它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline:它负责处理Spiders中获取到的Item,并进行处理,比如去重,持久化存储(存数据库,写入文件,总之就是保存数据用的)

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spiders中间‘通信‘的功能组件(比如进入Spiders的Responses;和从Spiders出去的Requests)

参考于 详情看 这里   https://cuiqingcai.com/3472.html/comment-page-2#comments

三 编写你的爬虫代码

(1)首先,我们要明确我们的爬取站点和目标。之前说了,今天我们来爬去虎扑NBA的所有球员资料,来,直接上代码https://nba.hupu.com/players/rockets 从这里开始,这个页面有各个球队,各个球员的所有基本资料。目标站点明确了,接下来我们来明确一下我们需要爬的字段。在items.py里面定义要爬取的字段。(这是items.py)

import scrapy
class HupuItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    #球队
    playerteam = scrapy .Field ()

    #球员照片
    playerimg = scrapy .Field ()

    #球员姓名
    playername = scrapy .Field ()

    #球员号码
    playernumber = scrapy .Field ()

    #球员位置
    playerjob = scrapy .Field ()

    #球员身高
    playertall = scrapy .Field ()

    #球员体重
    playerweight = scrapy .Field ()

    #球员生日
    playerbirthday = scrapy .Field ()

    #球员合同
    playercont = scrapy .Field ()

    #球员年薪
    playersal = scrapy .Field ()

(2)然后,开始编写你的爬虫代码:(这是我的player.py)

import scrapy
import re
from hupu .items import  HupuItem

class Hupu(scrapy .Spider ):
    name = 'hupu'
    allowed_domains=['hupu.com']
    start_urls = ['https://nba.hupu.com/players/rockets']

导入scrapy模块,re模块是正则模块,后面要用到的,导入刚才配好的items文件。

name 就是你自定义的爬虫名字,allowed_domains是该爬虫的允许作用域,start_urls 是起始的开爬的url地址。

然后重写parse这个方法,这里我用了xpath方法提取了球队的名字和球队的连接

    def parse(self, response):
        url_list = response.xpath('//span[@class="team_name"]/a/@href').extract()
        playerteam_list = response.xpath('//span[@class="team_name"]/a/text()').extract()


每个球队的链接都在这个标签下面,用xpath把它们提取成一个列表。球队名字也是如此。xpath的用法在这里就不细说了。

这里用了迭代的方法,zip打包了两个球队名字和球队链接列表,让它们平行的循环,把球队的链接传入到parse_detail函数去处理,meta传的是个字典类型。

        for url, playerteam in zip(url_list, playerteam_list):
            team_url = url
            yield scrapy.Request(url=team_url, meta={'playerteam': playerteam}, callback=self.parse_detail)

下面则是parse_detail函数的内容

    def parse_detail(self, response):
        print("开始下载...")
        item =HupuItem ()
        # 球队
        item['playerteam'] = response .meta['playerteam']
        #球员照片
        player_img_list = response.xpath('//td[@class="td_padding"]//img/@src').extract()
        # 球员姓名
        player_name_list = response.xpath('//td[@class="left"][1]//a/text()').extract()
        # 球员号码
        player_number_list = response.xpath('//tr[not(@class)]/td[3]/text()').extract()
        #球员位置
        player_job_list = response.xpath('//tr[not(@class)]/td[4]/text()').extract()
        # 球员身高
        player_tall_list = response.xpath('//tr[not(@class)]/td[5]/text()').extract()
        # 球员体重
        player_weight_list = response.xpath('//tr[not(@class)]/td[6]/text()').extract()
        # 球员生日
        player_birthday_list = response.xpath('//tr[not(@class)]/td[7]/text()').extract()
        # 球员合同
        player_cont_list = response.xpath('//td[@class="left"][2]/text()').extract()
        #球员年薪
        player_sal_list = response.xpath('//td[@class="left"][2]/b/text()').extract()

这个函数主要是对刚才传进来的请求url进行分析处理,我们仍然使用xpath来提取网页上的这些内容(如下)(包括之前传入的球队名字)

由于一支队伍有很多个球员,所以xpath提取的仍然是列表类型。然后再利用for迭代配合zip把每一位球员的信息遍历出来,并存入之前设置好的items字段中,最后yield item。

        zz = zip(player_img_list ,player_name_list,player_number_list,player_job_list,player_tall_list,player_weight_list,player_birthday_list,player_cont_list,player_sal_list)
        for player_img,player_name ,player_number,player_job ,player_tall,player_weight,player_birthday,player_cont,player_sal  in zz:
            item ["playerimg"]=player_img
            item['playername'] = player_name
            item['playernumber'] =player_number
            item['playerjob'] = player_job
            item['playertall'] = player_tall
            item['playerweight'] = player_weight
            item['playerbirthday'] = player_birthday
            if player_cont:
                item['playercont'] = player_cont
            else:
                item['playercont'] = 'NULL'
            item['playersal'] = player_sal

            yield item

这样我们就写完了自定义的爬虫代码了!

(3)运行你的爬虫程序 

打开cmd ,把路径导入到你spiders下面

输入  scrapy crawl hupu   即可以运行你的爬虫了!

输入这条命令   是在当前文件夹下面生成一个叫hupu的json文件。

可以看见类似以下内容

再看看文件夹下面有没有生成json文件


在json.cn 里解析json数据


如果以上都没有问题那么,接下来我们进行数据入mysql数据库的操作。

四 数据存入Mysql数据库

(1)首先要确保计算机上成功安装了mysql数据库,安装就略过了...

  (2)   在你的数据库中创建相应的表,这是我创建的表


(3)在你的settings文件中设置一下内容

注册管道文件。

ITEM_PIPELINES = {
   'hupu.pipelines.HupuPipeline': 300,
   'hupu.pipelines.DBPipeline': 10,
}
设置数据库名字,账号,密码 ,端口号等等。
MYSQL_HOST = 'localhost'
MYSQL_DBNMAE = 'hupu'
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'

(4)编写你的管道文件

import pymysql
from hupu import settings
from scrapy .conf import settings
class DBPipeline(object ):
    #连接数据库
    def __init__(self):
        self.conn = pymysql.connect(host='127.0.0.1', port=3306,
        user = 'root', password = '123456',db='hupu',charset='utf8')
        self.cursor = self.conn.cursor()
        self .conn .commit()

    def process_item(self, item, spider):
        try:
            self.cursor.execute(
                "insert into player_info( playerimg,playerteam,playername,playernumber,playerjob,playertall,playerweight,playerbirthday,playercont,playersal) "
                "values(%s ,%s, %s, %s ,%s ,%s, %s, %s, %s,%s)",
                (
                 item["playerimg"],
                 item['playerteam'],
                 item['playername'],
                 item['playernumber'],
                 item['playerjob'],
                 item['playertall'],
                 item['playerweight'],
                 item['playerbirthday'],
                 item['playercont'],
                 item['playersal'])
                )
            self.conn.commit()
        except pymysql .Error :
            print("插入错误")

        return item

这里利用了游标,向表中插入数据。

(5)观察你的数据库内容



到这里就大功告成了,我们可以看见全NBA的球员数据都已经在你的数据库中了!!!


  • 13
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 好的,我将尝试用中文回答你的问题。 将爬取内容进行数据清洗并存入 MySQL 数据库的基本流程如下: 1. 使用爬虫工具爬取网页内容,并将其存储到本地。 2. 对爬取的内容进行数据清洗,包括去除无用字符、空格和换行符,将数据转换为标准格式等。 3. 创建 MySQL 数据库,并在其中建立表来存储数据。 4. 使用 PythonMySQLdb 模块或者 PyMySQL 模块连接数据库,并将清洗后的数据插入到 MySQL 数据库中。 5. 在插入数据时,可以使用事务机制来保证数据的一致性和完整性。 6. 关闭数据库连接。 希望这些信息能帮到你。如果你还有其他问题,欢迎继续提问。 ### 回答2: 将爬取的内容进行数据清洗并存储到MySQL数据库中,可以通过以下步骤完成: 1. 爬取内容:使用Python的爬虫库(如BeautifulSoup、Scrapy等)编写爬虫程序,获取网页的源代码或API返回的数据。 2. 数据清洗:对爬取到的内容进行数据清洗,包括去除HTML标签、过滤无用信息、处理特殊字符等。可以使用Python的字符串处理函数、正则表达式等工具来实现。 3. 连接到MySQL数据库:使用PythonMySQL Connector等库连接到MySQL数据库,并建立与数据库的连接。 4. 创建表和字段:在MySQL数据库中创建一个表,定义需要存储的字段,包括爬取内容的标题、时间、正文等。 5. 数据插入:将清洗后的数据插入到MySQL数据库中的对应表中。可以使用SQL语句的INSERT INTO命令来实现,或者使用Python的ORM库(如SQLAlchemy)来简化操作。 6. 数据库管理:可以使用MySQL的管理工具(如phpMyAdmin、Navicat等)查看和管理数据库中的表和数据。 总结来说,将爬取内容进行数据清洗并存储到MySQL数据库中,包括爬取内容的清洗、数据库的连接、表和字段的创建、数据的插入等步骤,通过编写爬虫程序和使用相应的库来实现。这样可以方便地对爬取数据进行管理和分析。 ### 回答3: 将爬取的内容进行数据清洗并存入MySQL数据库是一个常见的数据处理任务。下面是一个简单的实现过程: 1. 首先爬取网页内容。使用Python的爬虫库(如BeautifulSoup、Scrapy等)获取需要的数据,并将其保存为一个数据集合(列表、字典等)。 2. 对获取的数据进行清洗。清洗数据的过程包括去除噪声数据、处理缺失值、处理重复值、进行数据类型转换等。通过Python数据处理库(如Pandas)可以方便地进行这些操作。 3. 连接MySQL数据库。使用PythonMySQL连接库(如PyMySQL)连接到MySQL数据库,创建一个数据库表来存储爬取的内容。 4. 创建数据库表。根据清洗后的数据集合的结构,在MySQL数据库中创建一个对应的表格,并定义各字段的类型。 5. 将清洗后的数据插入到MySQL数据库中。使用SQL语句构造插入数据的操作,并通过PythonMySQL连接库执行该语句。 6. 关闭MySQL连接。在完成数据插入后,使用PythonMySQL连接库关闭与MySQL数据库的连接。 使用这个流程,可以将爬虫获取到的内容进行数据清洗,并存入MySQL数据库中。这样可以方便地对数据进行后续的分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值