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

小编是个多年的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  HupuItemclass 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 = urlyield 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_imgitem['playername'] = player_nameitem['playernumber'] =player_numberitem['playerjob'] = player_jobitem['playertall'] = player_tallitem['playerweight'] = player_weightitem['playerbirthday'] = player_birthdayif player_cont:item['playercont'] = player_contelse:item['playercont'] = 'NULL'item['playersal'] = player_salyield 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的球员数据都已经在你的数据库中了!!!

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

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

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

  2. 利用Python Scrapy框架爬取“房天下”网站房源数据

    文章目录 分析网页 获取新房.二手房.租房数据 新房数据 租房数据: 二手房数据 反反爬虫 将数据保存至MongoDB数据库 JSON格式 CSV格式 MongoDB数据库 分析网页 "房天 ...

  3. scrapy框架爬取虎扑论坛球队新闻

    目录 Scrapy 框架 制作 Scrapy 爬虫 一共需要4步: Scrapy的安装介绍 Windows 安装方式 一. 新建项目(scrapy startproject) 二.明确目标(mySpi ...

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

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

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

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

  6. 利用python与requests爬取猫眼上的电影数据

    @利用requests与pycharm爬取猫眼上排名前100的电影数据 首先是requests导包 源代码 import csv import reimport requests from reque ...

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

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

  8. scrapy框架爬取Boss直聘,数据存入mysql

    自从上次用了scrapy爬取豆瓣电影后,发现scrapy除了入门相对request较难外,各方面都挺好的,速度很快,还有各个功能模块,以及django类似的各种中间件组成一个完善的系统框架,需要一点一 ...

  9. Python网络爬虫——爬取和分析NBA球员排名及各项数据

    一.选题的背景介绍(15分) NBA受到世界各地极大多数人的喜爱,不分年龄,学生.员工.劳动工人等社会各界都有热爱篮球的人,也有各自喜欢信仰的球星,在NBA中国官方网站里他们更好的了解和清楚自己喜爱的 ...

最新文章

  1. 内核模式下的文件操作
  2. 欧洲安全研究人员:黑客是如何泄露加密电子邮件
  3. delphi数组问题
  4. 自动化机器学习(二)自动构建机器学习流水线
  5. VTK:帧率用法实战
  6. [Java基础]Lambda表达式的省略模式
  7. java .insert_Java StringBuffer.insert 插入字符
  8. 《xUnit Test Patterns》学习笔记2 - Goal Of Test Automation
  9. Solr进阶之Solr综合文本相似度的多因素权重排序实现
  10. L298N电机驱动模块的简单介绍
  11. PyQGIS开发者手册-4 使用栅格图层
  12. react引入静态图片的方式
  13. 8.12 腾讯大战360 2133
  14. 别头疼了,你要的算法和数据结构的学习路线来了!
  15. 三维坐标要建一个4*4的矩阵?
  16. React Native 实践之携程 Moles 框架
  17. ECCV 2022全奖项公布,两位华人学者摘得最佳论文奖,本科来自清华、浙大
  18. AWS免费套餐服务器部署NETCORE网站
  19. Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合
  20. 小游戏开发 小程序app游戏开发 H5小游戏开发

热门文章

  1. [内附完整源码和文档] 基于Java的员工培训管理系统
  2. JAVA将证件号打星号
  3. 按住说话 speex压缩
  4. 超市库存管理java sql_基于JAVA的超市管理(商店库存)系统的设计与实现(Eclipse,SQLServer)...
  5. java毕业设计星之语明星周边产品销售网站Mybatis+系统+数据库+调试部署
  6. tanner2019安装教程
  7. L-Edit 11.1-附资源包
  8. 机械一体化有包含计算机专业吗,机电一体化专业有哪些优势?
  9. MIT-BIH心律失常标注中文释义
  10. wine的乱码问题解决