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之玩转字符串(2)更新篇
Sep 28 Python
深入浅析python定时杀进程
Jun 06 Python
Python实现屏幕截图的两种方式
Feb 05 Python
使用Python读取大文件的方法
Feb 11 Python
在pycharm中python切换解释器失败的解决方法
Oct 29 Python
python实现关闭第三方窗口的方法
Jun 28 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
解决 jupyter notebook 回车换两行问题
Apr 15 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
python爬虫请求库httpx和parsel解析库的使用测评
May 10 Python
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 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
模拟OICQ的实现思路和核心程序(一)
2006/10/09 PHP
php实现单链表的实例代码
2013/03/22 PHP
php+Mysqli利用事务处理转账问题实例
2015/02/11 PHP
避免Smarty与CSS语法冲突的方法
2015/03/02 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jquery foreach使用示例
2013/09/12 Javascript
JS判断、校验MAC地址的2个实例
2014/05/05 Javascript
JavaScript中实现单体模式分享
2015/01/29 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
加速vue组件渲染之性能优化
2020/04/09 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Python坐标线性插值应用实现
2019/11/13 Python
python如何保存文本文件
2020/06/07 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
运动鞋中的劳斯莱斯:索康尼(SAUCONY)
2017/08/09 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
大学生活动总结怎么写
2014/04/29 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
粗暴解决CUDA out of memory的问题
2021/05/22 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript