我们现在已经了解了 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 executeexecute(['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 干 货

      

Scrapy 爬取电影网站开发微信公众号相关推荐

  1. 微信公众号对接PHP电影网站,wxapi 微信公众号平台与电影类网站对接源码 wxapi 联合开发网 - pudn.com...

    wxapi 所属分类:微信小程序 开发工具:Java 文件大小:3KB 下载次数:0 上传日期:2019-02-16 23:41:01 上 传 者:lziccard 说明:  微信公众号平台与电影类网 ...

  2. python微信爬取教程_[python]微信公众号文章爬取

    [python]微信公众号文章爬取 需求 爬取一些微信公众号的文章 数据来源 1.搜狗微信搜索,可以搜索微信公众号文章,但只能显示该公众号最近十篇的文章 2.通过个人微信公众号中的素材管理,查看其他微 ...

  3. 增量爬取电影网站2级详情页面电影名称和下载链接

    增量爬取电影网站2级详情页面电影名称和下载链接 需求 步骤 需求 一级页面抓取:电影详情页链接 二级页面抓取:电影名称和电影下载链接 增量获取:网站中电影资源后将更新的数据爬取下来 步骤 确定响应内容 ...

  4. .Net6+Furion+Sqlsugar+SenparcSdk开发微信公众号系列之八:自定义菜单

    一.创建接口 1.1.注意事项 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜单最多4个汉字,二级菜单最多8个汉字,多出来的部分将会以"..."代替. ...

  5. NodeJs开发微信公众号(一)

    古话说: 万事开头难, 回头细想想还真是这样,在没有开始做微信公众号开发之前我以为它很复杂,但是学过之后只想说原来just so so~ 这里是我的项目的github地址: https://githu ...

  6. 教你如何用node.js开发微信公众号(一)

    内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...

  7. Spring Boot 开发微信公众号

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公众 ...

  8. 使用C# .net开发微信公众号之服务器URL配置

    服务器URL配置 是微信公众号开发里非常重要的一个步骤. 虽然微信公众平台已经给了我们很多 必要的功能 像:查看用户,查看用户消息,给用户回复消息,自动给用户回复消息,根据用户消息内容回复给用户图文消 ...

  9. wechatpy开发微信公众号(实现自定义菜单,翻译)

    今天来学习通过wechatpy 来开发微信公众号. 准备工作: 1.申请一个微信公众号 2.pip install wechatpy 如是自己没有服务器,下载ngrok :ngrok 是一个反向代理, ...

  10. Java开发微信公众号之被动回复用户消息-回复图片消息

    一.前言 hello小伙伴们,大家好,做微信开发两年了,最近看到微信方面的文章阅读量和关注量上升的比较快速,激发了我满满的动力啊,所以就滋生了一个想法,从头开始整理一下微信公众号开发,写一个简易的教程 ...

最新文章

  1. python3 List 中的字符串合并
  2. python计算n的32次方_获得用户输入的一个整数N,计算并输出N的32次方。_学小易找答案...
  3. [luogu3676]小清新数据结构题
  4. c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...
  5. 突发!联想被责令立即开展全面整改
  6. python网络爬虫学习笔记(十):数据存储
  7. SQL 2005数据库函数基本应用
  8. 'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  9. Android xml manifest属性详解
  10. python 表白程序代码_程序员如何实现表白代码
  11. idea 2018汉化包(附使用教程)
  12. 嵌入式 Linux 启动时间优化
  13. 查找网络计算机步骤,如何查找到局域网中指定IP地址的是哪一台电脑
  14. UE4 Pak相关:加载Pak内模型Mesh/SkMesh没有材质
  15. golang备忘录003: 使用waitgroup进行graceful shutdown
  16. 学号 20175212童皓桢 《Java程序设计》第8周学习总结
  17. EE308_lab1-2
  18. 企业短信防火墙应用-爱侬「北京市家政服务龙头企业」
  19. 1.2经济金融基础之金融基础知识
  20. 送给八年以前两年以后的自己

热门文章

  1. setlocale()函数的作用
  2. java代码复数包括虚部和实部,C++ complex复数类用法详解
  3. C# 给Excel添加水印
  4. 小程序如何发布体验版本
  5. app漏洞扫描原理_APP漏洞如何检测,如何检测出app有漏洞?
  6. Kinetics-400数据集分类名中英文对照汇总
  7. 计算机程序班搞笑口号,集搞笑自创的运动会口号?
  8. 用户登录和权限认证之 —— JWT
  9. 2006公务员考试-杂七杂八常识(1)
  10. SQL如何本地数据库连接服务器的数据库