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统计列表中的重复项出现的次数的方法
Aug 18 Python
python使用tkinter实现简单计算器
Jan 30 Python
python 读取DICOM头文件的实例
May 07 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
Python数学形态学实例分析
Sep 06 Python
用Python画小女孩放风筝的示例
Nov 23 Python
python中count函数简单用法
Jan 05 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
Django filter动态过滤与排序实现过程解析
Nov 26 Python
使用pandas模块实现数据的标准化操作
May 14 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
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
PHP链表操作简单示例
2016/10/15 PHP
一个符号插入器 中用到的js代码
2007/09/04 Javascript
Jqyery中同等与js中windows.onload的应用
2011/05/10 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
JS实现同时搜索百度和必应的方法
2015/01/27 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
浅谈JS继承_寄生式继承 & 寄生组合式继承
2016/08/16 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
JavaScript实现简单的双色球(实例讲解)
2017/07/31 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
微信小程序使用车牌号输入法的示例代码
2019/08/20 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
Python 调用DLL操作抄表机
2009/01/12 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
python三方库之requests的快速上手
2019/03/04 Python
python实现支付宝转账接口
2019/05/07 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
Python venv虚拟环境配置过程解析
2020/07/08 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
html5指南-1.html5全局属性(html5 global attributes)深入理解
2013/01/07 HTML / CSS
专家推荐信模板
2014/05/09 职场文书
未婚证明范本
2015/06/15 职场文书
校运会宣传稿大全
2015/07/23 职场文书
python numpy中setdiff1d的用法说明
2021/04/22 Python
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏
vue实现简易音乐播放器
2022/08/14 Vue.js