python爬虫scrapy框架的梨视频案例解析


Posted in Python onFebruary 20, 2021

之前我们使用lxml对梨视频网站中的视频进行了下载,感兴趣的朋友点击查看吧。

下面我用scrapy框架对梨视频网站中的视频标题和视频页中对视频的描述进行爬取

python爬虫scrapy框架的梨视频案例解析
python爬虫scrapy框架的梨视频案例解析

分析:我们要爬取的内容并不在同一个页面,视频描述内容需要我们点开视频,跳转到新的url中才能获取,我们就不能在一个方法中去解析我们需要的不同内容

1.爬虫文件

  • 这里我们可以仿照爬虫文件中的parse方法,写一个新的parse方法,可以将新的url的响应对象传给这个新的parse方法
  • 如果需要在不同的parse方法中使用同一个item对象,可以使用meta参数字典,将item传给callback回调函数
  • 爬虫文件中的parse需要yield的Request请求,而item则在新的parse方法中使用yield item传给下一个parse方法或管道文件
import scrapy

# 从items.py文件中导入BossprojectItem类
from bossProject.items import BossprojectItem

class BossSpider(scrapy.Spider):
 name = 'boss'
 # allowed_domains = ['www.xxx.com']
 start_urls = ['https://www.pearvideo.com/category_5']

 # 回调函数接受响应对象,并且接受传递过来的meata参数
 def content_parse(self,response):
 # meta参数包含在response响应对象中,调用meta,然后根据键值取出对应的值:item
 item = response.meta['item']

 # 解析视频链接中的对视频的描述
 des = response.xpath('//div[@class="summary"]/text()').extract()
 des = "".join(des)
 item['des'] = des

 yield item 

 # 解析首页视频的标题以及视频的链接
 def parse(self, response):
 li_list = response.xpath('//div[@id="listvideoList"]/ul/li')
 for li in li_list:
  href = li.xpath('./div/a/@href').extract()
  href = "https://www.pearvideo.com/" + "".join(href)

  title = li.xpath('./div[1]/a/div[2]/text()').extract()
  title = "".join(title)

  item = BossprojectItem()
  item["title"] = title

  #手动发送请求,并将响应对象传给回调函数
  #请求传参:meta={},可以将meta字典传递给请求对应的回调函数
  yield scrapy.Request(href,callback=self.content_parse,meta={'item':item})

2.items.py

要将BossprojectItem类导入爬虫文件中才能够创建item对象

import scrapy
class BossprojectItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 # 定义了item属性
 title = scrapy.Field()
 des = scrapy.Field()

3.pipelines.py

open_spider(self,spider)和close_spider(self,spider)重写这两个父类方法,且这两个方法都只执行一次在process_item方法中最好保留return item,因为如果存在多个管道类,return item会自动将item对象传给优先级低于自己的管道类

from itemadapter import ItemAdapter
class BossprojectPipeline:

 def __init__(self):
 self.fp = None

 # 重写父类方法,只调用一次
 def open_spider(self,spider):
 print("爬虫开始")
 self.fp = open('./lishipin.txt','w')

 # 接受爬虫文件中yield传递来的item对象,将item中的内容持久化存储
 def process_item(self, item, spider):
 self.fp.write(item['title'] + '\n\t' + item['des'] + '\n')

 # 如果有多个管道类,会将item传递给下一个管道类
 # 管道类的优先级取决于settings.py中的ITEM_PIPELINES属性中对应的值
  ## ITEM_PIPELINES = {'bossProject.pipelines.BossprojectPipeline': 300,} 键值中的值越小优先级越高
 return item

 # 重写父类方法,只调用一次
 def close_spider(self,spider): 
 self.fp.close()
 print("爬虫结束")

4.进行持久化存储

python爬虫scrapy框架的梨视频案例解析

到此这篇关于python爬虫scrapy框架的梨视频案例解析的文章就介绍到这了,更多相关python爬虫scrapy框架内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
Apr 24 Python
利用Python爬虫给孩子起个好名字
Feb 14 Python
windows系统下Python环境搭建教程
Mar 28 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
python机器学习之神经网络实现
Oct 13 Python
python tkinter canvas使用实例
Nov 04 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
使用豆瓣源来安装python中的第三方库方法
Jan 26 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 Python
Python面向对象编程之类的概念
Nov 01 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 #Python
TensorFlow2.0使用keras训练模型的实现
Feb 20 #Python
tensorflow2.0教程之Keras快速入门
Feb 20 #Python
在Pycharm中安装Pandas库方法(简单易懂)
Feb 20 #Python
Python3爬虫RedisDump的安装步骤
Feb 20 #Python
python爬取2021猫眼票房字体加密实例
Feb 19 #Python
Python之Sklearn使用入门教程
Feb 19 #Python
You might like
删除无限分类并同时删除它下面的所有子分类的方法
2010/08/08 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
PHP 类与构造函数解析
2017/02/06 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
学习jQuey中的return false
2015/12/18 Javascript
详解JavaScript的闭包、IIFE、apply、函数与对象
2016/12/21 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
React-router4路由监听的实现
2018/08/07 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
vue-cli3 配置开发与测试环境详解
2019/05/17 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
在vue中通过render函数给子组件设置ref操作
2020/11/17 Vue.js
对于Python装饰器使用的一些建议
2015/06/03 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
关于CSS Tooltips(鼠标经过时显示)的效果
2013/04/10 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
佳能德国网上商店:Canon德国
2017/03/18 全球购物
百度软件工程师职位
2013/02/14 面试题
大二学期个人自我评价
2014/01/13 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
给校长的建议书300字
2014/05/16 职场文书
公司任命书模板
2014/06/06 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
自主招生推荐信怎么写
2015/03/26 职场文书
迎新年主持词
2015/07/06 职场文书
学生会任命书范本
2015/09/21 职场文书