目錄
- 1.爬蟲文件
- 2.items.py
- 3.pipelines.py
- 4.進(jìn)行持久化存儲(chǔ)
之前我們使用lxml對(duì)梨視頻網(wǎng)站中的視頻進(jìn)行了下載,感興趣的朋友點(diǎn)擊查看吧。
下面我用scrapy框架對(duì)梨視頻網(wǎng)站中的視頻標(biāo)題和視頻頁中對(duì)視頻的描述進(jìn)行爬取
分析:我們要爬取的內(nèi)容并不在同一個(gè)頁面,視頻描述內(nèi)容需要我們點(diǎn)開視頻,跳轉(zhuǎn)到新的url中才能獲取,我們就不能在一個(gè)方法中去解析我們需要的不同內(nèi)容
1.爬蟲文件
- 這里我們可以仿照爬蟲文件中的parse方法,寫一個(gè)新的parse方法,可以將新的url的響應(yīng)對(duì)象傳給這個(gè)新的parse方法
- 如果需要在不同的parse方法中使用同一個(gè)item對(duì)象,可以使用meta參數(shù)字典,將item傳給callback回調(diào)函數(shù)
- 爬蟲文件中的parse需要yield的Request請(qǐng)求,而item則在新的parse方法中使用yield item傳給下一個(gè)parse方法或管道文件
import scrapy
# 從items.py文件中導(dǎo)入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']
# 回調(diào)函數(shù)接受響應(yīng)對(duì)象,并且接受傳遞過來的meata參數(shù)
def content_parse(self,response):
# meta參數(shù)包含在response響應(yīng)對(duì)象中,調(diào)用meta,然后根據(jù)鍵值取出對(duì)應(yīng)的值:item
item = response.meta['item']
# 解析視頻鏈接中的對(duì)視頻的描述
des = response.xpath('//div[@class="summary"]/text()').extract()
des = "".join(des)
item['des'] = des
yield item
# 解析首頁視頻的標(biāo)題以及視頻的鏈接
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()
+ "".join(href)
title = li.xpath('./div[1]/a/div[2]/text()').extract()
title = "".join(title)
item = BossprojectItem()
item["title"] = title
#手動(dòng)發(fā)送請(qǐng)求,并將響應(yīng)對(duì)象傳給回調(diào)函數(shù)
#請(qǐng)求傳參:meta={},可以將meta字典傳遞給請(qǐng)求對(duì)應(yīng)的回調(diào)函數(shù)
yield scrapy.Request(href,callback=self.content_parse,meta={'item':item})
2.items.py
要將BossprojectItem類導(dǎo)入爬蟲文件中才能夠創(chuàng)建item對(duì)象
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)重寫這兩個(gè)父類方法,且這兩個(gè)方法都只執(zhí)行一次在process_item方法中最好保留return item,因?yàn)槿绻嬖诙鄠€(gè)管道類,return item會(huì)自動(dòng)將item對(duì)象傳給優(yōu)先級(jí)低于自己的管道類
from itemadapter import ItemAdapter
class BossprojectPipeline:
def __init__(self):
self.fp = None
# 重寫父類方法,只調(diào)用一次
def open_spider(self,spider):
print("爬蟲開始")
self.fp = open('./lishipin.txt','w')
# 接受爬蟲文件中yield傳遞來的item對(duì)象,將item中的內(nèi)容持久化存儲(chǔ)
def process_item(self, item, spider):
self.fp.write(item['title'] + '\n\t' + item['des'] + '\n')
# 如果有多個(gè)管道類,會(huì)將item傳遞給下一個(gè)管道類
# 管道類的優(yōu)先級(jí)取決于settings.py中的ITEM_PIPELINES屬性中對(duì)應(yīng)的值
## ITEM_PIPELINES = {'bossProject.pipelines.BossprojectPipeline': 300,} 鍵值中的值越小優(yōu)先級(jí)越高
return item
# 重寫父類方法,只調(diào)用一次
def close_spider(self,spider):
self.fp.close()
print("爬蟲結(jié)束")
4.進(jìn)行持久化存儲(chǔ)
到此這篇關(guān)于python爬蟲scrapy框架的梨視頻案例解析的文章就介紹到這了,更多相關(guān)python爬蟲scrapy框架內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- Python爬蟲基礎(chǔ)講解之scrapy框架
- 簡(jiǎn)述python Scrapy框架
- Python Scrapy框架第一個(gè)入門程序示例
- Python爬蟲基礎(chǔ)之簡(jiǎn)單說一下scrapy的框架結(jié)構(gòu)