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 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 爬取电影网站开发微信公众号相关推荐
- 微信公众号对接PHP电影网站,wxapi 微信公众号平台与电影类网站对接源码
wxapi 联合开发网 - pudn.com...
wxapi 所属分类:微信小程序 开发工具:Java 文件大小:3KB 下载次数:0 上传日期:2019-02-16 23:41:01 上 传 者:lziccard 说明: 微信公众号平台与电影类网 ...
- python微信爬取教程_[python]微信公众号文章爬取
[python]微信公众号文章爬取 需求 爬取一些微信公众号的文章 数据来源 1.搜狗微信搜索,可以搜索微信公众号文章,但只能显示该公众号最近十篇的文章 2.通过个人微信公众号中的素材管理,查看其他微 ...
- 增量爬取电影网站2级详情页面电影名称和下载链接
增量爬取电影网站2级详情页面电影名称和下载链接 需求 步骤 需求 一级页面抓取:电影详情页链接 二级页面抓取:电影名称和电影下载链接 增量获取:网站中电影资源后将更新的数据爬取下来 步骤 确定响应内容 ...
- .Net6+Furion+Sqlsugar+SenparcSdk开发微信公众号系列之八:自定义菜单
一.创建接口 1.1.注意事项 自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单. 一级菜单最多4个汉字,二级菜单最多8个汉字,多出来的部分将会以"..."代替. ...
- NodeJs开发微信公众号(一)
古话说: 万事开头难, 回头细想想还真是这样,在没有开始做微信公众号开发之前我以为它很复杂,但是学过之后只想说原来just so so~ 这里是我的项目的github地址: https://githu ...
- 教你如何用node.js开发微信公众号(一)
内容简介 本文章简单介绍了如何用node.js开发微信公众号.主要内容包括微信公众平台的配置,signature的验证,以及用node.js去处理用户主动发起的行为. 准备工作 开发前需要安装好nod ...
- Spring Boot 开发微信公众号
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 在讲微信公众号开发之前,先来大概了解一下微信公众号.微信公众 ...
- 使用C# .net开发微信公众号之服务器URL配置
服务器URL配置 是微信公众号开发里非常重要的一个步骤. 虽然微信公众平台已经给了我们很多 必要的功能 像:查看用户,查看用户消息,给用户回复消息,自动给用户回复消息,根据用户消息内容回复给用户图文消 ...
- wechatpy开发微信公众号(实现自定义菜单,翻译)
今天来学习通过wechatpy 来开发微信公众号. 准备工作: 1.申请一个微信公众号 2.pip install wechatpy 如是自己没有服务器,下载ngrok :ngrok 是一个反向代理, ...
- Java开发微信公众号之被动回复用户消息-回复图片消息
一.前言 hello小伙伴们,大家好,做微信开发两年了,最近看到微信方面的文章阅读量和关注量上升的比较快速,激发了我满满的动力啊,所以就滋生了一个想法,从头开始整理一下微信公众号开发,写一个简易的教程 ...
最新文章
- python3 List 中的字符串合并
- python计算n的32次方_获得用户输入的一个整数N,计算并输出N的32次方。_学小易找答案...
- [luogu3676]小清新数据结构题
- c语言求树上节点的双亲,用非递归算法求二叉树叶子结点的c语言代码怎样写?...
- 突发!联想被责令立即开展全面整改
- python网络爬虫学习笔记(十):数据存储
- SQL 2005数据库函数基本应用
- 'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- Android xml manifest属性详解
- python 表白程序代码_程序员如何实现表白代码
- idea 2018汉化包(附使用教程)
- 嵌入式 Linux 启动时间优化
- 查找网络计算机步骤,如何查找到局域网中指定IP地址的是哪一台电脑
- UE4 Pak相关:加载Pak内模型Mesh/SkMesh没有材质
- golang备忘录003: 使用waitgroup进行graceful shutdown
- 学号 20175212童皓桢 《Java程序设计》第8周学习总结
- EE308_lab1-2
- 企业短信防火墙应用-爱侬「北京市家政服务龙头企业」
- 1.2经济金融基础之金融基础知识
- 送给八年以前两年以后的自己