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升级提示Tkinter模块找不到的解决方法
Aug 22 Python
Python 3.x 新特性及10大变化
Jun 12 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
May 17 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
对python函数签名的方法详解
Jan 22 Python
Python的高阶函数用法实例分析
Apr 11 Python
python3实现mysql导出excel的方法
Jul 31 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
详解Django CAS 解决方案
Oct 30 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
Python 文字识别
May 11 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加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
smarty内置函数foreach用法实例
2015/01/22 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
HTML复选框和单选框 checkbox和radio事件介绍
2012/12/12 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
iframe跨域通信封装详解
2015/08/11 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
js评分组件使用详解
2017/06/06 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
2019/05/13 Javascript
vue 实现超长文本截取,悬浮框提示
2020/07/29 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
python抓取京东价格分析京东商品价格走势
2014/01/09 Python
Python线程详解
2015/06/24 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
Html5新标签解释及用法
2012/02/17 HTML / CSS
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
UNIX特点都有哪些
2016/04/05 面试题
工会主席事迹材料
2014/06/03 职场文书
绿色环保标语
2014/06/12 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
Python面向对象编程之类的概念
2021/11/01 Python
用JS创建一个录屏功能
2021/11/11 Javascript
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript