Scrapy 爬取电影网站开发微信公众号


我们现在已经了解了 Scrapy 框架的基本运作方式和怎么样使用 Xpath 语言来解析网站了,这次让我们来写一个真正的爬虫,并将它爬取到的数据分别保存到本地中,没错依旧是我们的老本行,利用爬取下的数据更新我们的微信公众号看电影的后台数据,现在就开始吧!


这次我们要爬取的网站是这个,我直接跳转到电影区域来了,所以会比较长:


http://nlook1.cn/index.php?s=/vod-type-id-1-type--area--year--star--state--order-addtime.html


我们要爬取的信息是:电影名称,电影图片,电影跳转链接。


Scrapy 框架的实施:


    创建 scrapy 项目和爬虫: 


创建项目,cmd 到终端里面,进入你需要放置项目的目录,使用下面的命令创建项目,你可以改变你的项目名称,我这里用的是 dingdian :


scrapy startproject dingdian

       

这样项目就创建完毕了,我用的是 Pycharm ,所以现在打开我们的 Pycharm 开始我们的爬虫之旅了,每个文件的作用在上一篇文章已经和大家详细的介绍过了,不怎么明白的可以再回去看看,这里我就不再啰嗦了! 

        

在开始之前给大家一个小技巧,Scrapy 默认是不能在 IDE 中调试的,我们在根目录中新建一个py文件叫:entrypoint.py 在里面写入以下内容:


from scrapy.cmdline import execute
execute(['scrapy''crawl''dingdian'])

    

注意!第二行中代码中的前两个参数是不变的,第三个参数请使用自己的spider 的名字也就是刚才你创建项目的名称,现在整个 Scrapy 框架是这样子的。


       

编写items.py:


现在我们来先编写 items.py ,十分的简单,只需要将希望获取的字段名填写进去,比如我们先要爬取的数据是,电影名称,电影图片,电影跳转链接,我们直接写进去就可以了,不用管其他的:

        


是不是特别的简单,下面开始重点了哦!编写 spider(就是我们用来提取数据的爬虫了)


编写 Spider:

        

在 spiders 文件中新建一个 dingdian.py 文件并导入我们需用的模块,并且将每一页的 url 存放在到一个列表之中,每一行我都有详细的解析,相信只要大家仔细看,是一定能够看明白的!


# -*- coding: utf-8 -*-
import scrapy #导入 scrapy 包
from dingdian.items import DingdianItem # 将 item 导入进来,这样数据才能在各个模块之间流转(导入 dingdian 项目中 items 文件中的 DingdianItem 类)

class Myspider(scrapy.Spider):
   name = 'dingdian'       # 请注意,这name就是我们在 entrypoint.py 文件中的第三个参数!
   base_url = 'http://nlook1.cn/index.php?s=/vod-type-id-1-type--area--year--star--state--order-addtime-p-'
   baseurl  = '.html'     # 这两个 url 是为了之后的爬虫翻页处理
   start_urls = []        # 建立需要爬取信息的 url 列表
   for i in range(160):   # 从第一页开始到 160 页,使用字符串拼接的方式实现了我们需要的全部 URL
       url = base_url + str(i) + baseurl
       start_urls.append(url)

    

 我们使用 Xpath 语法来提取我们所需的信息,不怎么清楚这个语法的也可以在公众号里查看我的上一篇介绍 Xpath 的文章,这里我就直接解析网站上手用了。


需要的信息我全部用箭头标记出来了,我们进行网站解析就可以了,请看代码内容,每一行我都有详细的代码解析。


# 刚上路的新手可能会想,这个函数到底是干嘛的,这个函数其实是 Scrapy 处理下载的 response 的默认方法,我们直接用就好了
   def parse(self, response):
       lists = []         #  先建立一个列表,用来保存每一页的信息
       
       # 通过观察我们看到该页面所有影片的信息都位于一个class属性为list-unstyled vod-item-img ff-img-215的 ul 标签内的 li 标签内。
       movies = response.xpath('//ul[@class="list-unstyled vod-item-img ff-img-215"]/li')      
       for movie in movies:
           list = DingdianItem() # 申请一个weatheritem 的类型来保存结果
           # 为什么要用.extract()[0],是因为.xpath 返回的是一个列表,我们是获取里面的内容
           list['name'] = movie.xpath('.//p[@class="image"]//img/@alt').extract()[0]
           list['img'] = movie.xpath('.//p[@class="image"]//img/@data-original').extract()[0]
           list['movie'] = 'http://nlook1.cn' + movie.xpath('.//p[@class="image"]/a/@href').extract()[0]
           lists.append(list)  # 添加到 lists 列表中
       return lists # 一定要有这个返回 lists ,因为之后我们要将数据下载到本地,没有的话,就下载保存不了的


编写 pipelines.py


我们编写 pipelines.py 来处理 spider爬到的内容,这里有几个非常重要的注意事项,请大家一定要注意,否则都会导致你的数据无法保存到本地。


1、爬虫文件 parse() 函数一定要有 return 语句 


2、pipelines.py 文件正确配置 


3、修改 settings.py 文件 

将下列部分的注释去掉:

#ITEM_PIPELINES = {
#    'dingdian.pipelines.DingdianPipeline': 300,
#}

ITEM_PIPELINES = {
   'dingdian.pipelines.DingdianPipeline'300,
}


现在我们就可以来写 pipelines.py 文件的代码了,非常的简单,但是一定要注意上面的注意事项,否则是无法保存成功的!



class
 DingdianPipeline(object):

   def process_item(self, item, spider):
       with open('C:\\Users\\lec\\Desktop\\456.txt','a'as f:
           f.write("{},,{},{}\n".format(item['name'],item['img'],item['movie']))
            


最后我们运行 entrypoint.py 文件就大功告成了,费了这么大劲搞这个 Scrapy  爬虫框架究竟有什么好处呢,没错,只有当你在运行的那一瞬间,你就会发现它是有多么的快,160 页的数据不到一分钟就采集完毕了,相比之前的方法,这个简直是不知道快了多少,这就是 Scrapy 异步框架的强大!


效果图:


  参考文章:静觅 » 小白进阶之Scrapy第一篇


PS: Scrapy 框架是真的强大,爬虫运行的时候我真想录下来与大家分享它的速度,就是可惜公众号不能随便插入视频。

如果觉得文章还不错的话,还请大家点赞分享下。算是对「fightjiang」最大的支持!



       每 天 分 享 Python 干 货

       

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值