Scrapy框架入门之爬取虎扑体育的新闻标题

时间:2024-05-19 10:49:32

下图是2018年5月25日火箭和勇士西决G5时,火箭赢下天王山之战,虎扑NBA的首页。

Scrapy框架入门之爬取虎扑体育的新闻标题

我这次做的爬虫项目的目的就是:爬取图片中红色边框里的文字,然后txt文本的方式保存到本地。

接下来我介绍一下我完成这个工作的全过程。

1.介绍怎么完成这个工作之前,我必须得介绍一下Scrapy框架的构成。

  Scrapy框架总的来说是由7个部分组成,即5+2的结构。

  其中5是指:SPIDERS、ENGINE、SCHEDULER、DOWNLOADER、ITEM_PIPELINES.

      2是指:Downloader Middlewares和Spider Middlewares.

   其结构图如下:

Scrapy框架入门之爬取虎扑体育的新闻标题

2.其实我们并不要了解它是怎么构成的。我们只需要掌握创建爬虫最主要的方法是什么就行了。

不同于一般的框架,比如Java中的SSM,SSH框架。它们都是在IDE中配置和使用的。Scrapy框架的使用一般是在CMD中,一般是在.py文件的编辑器中使用的。我用的文本编辑器是Sublime Text。

3.现在正式开始讲怎么利用scrapy的命令,创建一个爬虫程序的框架。

   首先,我们创建一个工程,我的工程名叫LOLMovie,在一个工程里可以有很多个爬虫程序。

         创建一个工程的命令为:scrapy startproject LOLMovie(请在一个自己熟悉的文件夹下创建,防止找不到) 

   其次,我们cd LOLMovie,进入工程,创建一个爬虫程序,我的名字叫heifei01MovieSpider.

          创建一个爬虫的命令为:scrapy genspider heifei01MovieSpider nba.hupu.com.

           然后你就能看见在文件夹下的结构如下:(我是在D:\pycode下创建工程 的)  

 Scrapy框架入门之爬取虎扑体育的新闻标题Scrapy框架入门之爬取虎扑体育的新闻标题

Scrapy框架入门之爬取虎扑体育的新闻标题

可能比较乱,大家将就着看一下。简单说一下这些文件的关系。我们需要关系的文件只有四个。就是items.py、settings.py、pipelines.py、hefei01MovieSpider.py文件。

其中items.py决定爬取哪些项目,settings.py决定由谁去爬,hefei01MovieSpider.py决定怎么爬,pipelines.py决定爬取后的内容怎么处理。 

   我们先配置items.py文件,如下图所示。

   Scrapy框架入门之爬取虎扑体育的新闻标题

  我们需要爬取名字,则命名一个变量movieName。如果需要爬取url连接,则可再命名一个urlName = scrapy.Field().这是配置文件给出的格式(在上面的注释部分)。

  再配置hefei01MovieSpider.py文件,如下图所示。

  Scrapy框架入门之爬取虎扑体育的新闻标题

          我这里用的是xpath选择器,也可以用其他的选择器。

   接下来配置pipelines.py文件,如下图所示。

Scrapy框架入门之爬取虎扑体育的新闻标题

最后我们配置settings.py文件。只用在原来的文件中找到一行如下所示的注释。去掉注释即可。

Scrapy框架入门之爬取虎扑体育的新闻标题

当有多个项目时,后面的数字越小,优先级越高。我们因为只有这一个项目,所以数字设成多少都可以。

最后我们回到命令行,在工程目录下输入,scrapy crawl hefei01MovieSpider,运行即可出结果。如下图所示。

Scrapy框架入门之爬取虎扑体育的新闻标题

至此,我们的爬虫项目结束。

其实也可以在命令行中对中间的结果进行调试,我们输入scrapy shell http://nba.hupu.com

然后输入:subSelector = response.xpath('//div[@class="listNews"]')

再输入:print(subSelector)(此处是python3的输出格式),看看subSelector是什么

在输入:print(subSelector[0].xpath('./dl/dd/a/text()').extract()),看看爬出来的东西是什么。