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中的控制流语句的知识点
Apr 14 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
Python3实现抓取javascript动态生成的html网页功能示例
Aug 22 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python对象转换为json的方法步骤
Apr 25 Python
python内置模块collections知识点总结
Dec 19 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
python打开文件的方式有哪些
Jun 29 Python
python 常用日期处理-- datetime 模块的使用
Sep 02 Python
如何用用Python将地址标记在地图上
Feb 07 Python
彻底解决pip下载pytorch慢的问题方法
Mar 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
PHP数组排序之sort、asort与ksort用法实例
2014/09/08 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JS实现完全语义化的网页选项卡效果代码
2015/09/15 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
获取input标签的所有属性的方法
2016/06/28 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python 元组拆包示例(Tuple Unpacking)
2019/12/24 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
美国艺术和工艺品商店:Hobby Lobby
2020/12/09 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
药学专业毕业生求职信
2013/10/20 职场文书
单位办理社保介绍信
2014/01/10 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
学校运动会霸气口号
2014/06/07 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
Docker官方工具docker-registry案例演示
2022/04/13 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
2022/05/30 Servers