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读写ini文件示例(python读写文件)
Mar 25 Python
Python读写文件方法总结
Jun 09 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
Python内置加密模块用法解析
Nov 25 Python
使用 Python 遍历目录树的方法
Feb 29 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
python给视频添加背景音乐并改变音量的具体方法
Jul 19 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP命名空间namespace及use的简单用法分析
2018/08/03 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JavaScript学习笔记之定时器
2015/01/22 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
微信JS-SDK自定义分享功能实例详解【分享给朋友/分享到朋友圈】
2016/11/25 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
浅谈vue中.vue文件解析流程
2018/04/24 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
JS实现百度网盘任意文件强制下载功能
2018/08/31 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
python的类变量和成员变量用法实例教程
2014/08/25 Python
python中的编码知识整理汇总
2016/01/26 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
对python遍历文件夹中的所有jpg文件的实例详解
2018/12/08 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
暇步士官网:Hush Puppies
2016/09/22 全球购物
凯普林包包西班牙官网:Kipling西班牙
2019/04/12 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
基层工作经历证明
2014/01/13 职场文书
人力资源管理专业自荐书
2014/07/07 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
临时租车协议范本
2014/09/23 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
十岁生日答谢词
2015/01/05 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书