最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬蟲(chóng)scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析

 更新時(shí)間:2021年02月20日 11:02:42   作者:小王子愛(ài)上玫瑰  
這篇文章主要介紹了python爬蟲(chóng)scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、CrawlSpider類介紹

1.1 引入

使用scrapy框架進(jìn)行全站數(shù)據(jù)爬取可以基于Spider類,也可以使用接下來(lái)用到的CrawlSpider類?;赟pider類的全站數(shù)據(jù)爬取之前舉過(guò)栗子,感興趣的可以康康

scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取

1.2 介紹和使用

1.2.1 介紹

CrawlSpider是Spider的一個(gè)子類,因此CrawlSpider除了繼承Spider的特性和功能外,還有自己特有的功能,主要用到的是 LinkExtractor()rules = (Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),)

LinkExtractor()鏈接提取器
LinkExtractor()接受response對(duì)象,并根據(jù)allow對(duì)應(yīng)的正則表達(dá)式提取響應(yīng)對(duì)象中的鏈接

link = LinkExtractor(
# Items只能是一個(gè)正則表達(dá)式,會(huì)提取當(dāng)前頁(yè)面中滿足該"正則表達(dá)式"的url	
  allow=r'Items/'
)

rules = (Rule(link, callback='parse_item', follow=True),)規(guī)則解析器
按照指定規(guī)則從鏈接提取器中提取到的鏈接中解析網(wǎng)頁(yè)數(shù)據(jù)
link:是一個(gè)LinkExtractor()對(duì)象,指定鏈接提取器
callback:回調(diào)函數(shù),指定規(guī)則解析器(解析方法)解析數(shù)據(jù)
follow:是否將鏈接提取器繼續(xù)作用到鏈接提取器提取出的鏈接網(wǎng)頁(yè)

import scrapy
# 導(dǎo)入相關(guān)的包
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class TextSpider(CrawlSpider):
 name = 'text'
 allowed_domains = ['www.xxx.com']
 start_urls = ['http://www.xxx.com/']

# 鏈接提取器,從接受到的response對(duì)象中,根據(jù)item正則表達(dá)式提取頁(yè)面中的鏈接
	link = LinkExtractor(allow=r'Items/')
	link2 = LinkExtractor(allow=r'Items/')
# 規(guī)則解析器,根據(jù)callback將鏈接提取器提取到的鏈接進(jìn)行數(shù)據(jù)解析
# follow為true,則表示將鏈接提取器繼續(xù)作用到鏈接提取器所提取到的鏈接頁(yè)面中
# 故:在我們提取多頁(yè)數(shù)據(jù)時(shí),若第一頁(yè)對(duì)應(yīng)的網(wǎng)頁(yè)中包含了第2,3,4,5頁(yè)的鏈接,
# 當(dāng)跳轉(zhuǎn)到第5頁(yè)時(shí),第5頁(yè)又包含了第6,7,8,9頁(yè)的鏈接,
# 令follow=True,就可以持續(xù)作用,從而提取到所有頁(yè)面的鏈接
 rules = (Rule(link, callback='parse_item', follow=True),
 		Rule(link2,callback='parse_content',follow=False))
 # 鏈接提取器link使用parse_item解析數(shù)據(jù)
	def parse_item(self, response):
 item = {}
 
 yield item
 # 鏈接提取器link2使用parse_content解析數(shù)據(jù)
	def parse_content(self, response):
		item = {}
		
		yield item

1.2.2 使用

創(chuàng)建爬蟲(chóng)文件:除了創(chuàng)建爬蟲(chóng)文件不同外,創(chuàng)建項(xiàng)目和運(yùn)行爬蟲(chóng)使用的命令和基于Spider類使用的命令相同

scrapy genspider crawl -t spiderName www.xxx.com 

二、案例:古詩(shī)文網(wǎng)全站數(shù)據(jù)爬取

爬取古詩(shī)文網(wǎng)首頁(yè)古詩(shī)的標(biāo)題,以及每一首詩(shī)詳情頁(yè)古詩(shī)的標(biāo)題和內(nèi)容。
最后將從詳情頁(yè)提取到的古詩(shī)標(biāo)題和內(nèi)容進(jìn)行持久化存儲(chǔ)

2.1 爬蟲(chóng)文件

import scrapy
from scrapy.linkextractors import LinkExtractor

from scrapy.spiders import CrawlSpider, Rule
from gushiPro.items import GushiproItem,ContentItem

class GushiSpider(CrawlSpider):
 name = 'gushi'
 #allowed_domains = ['www.xxx.com']
 start_urls = ['https://www.gushiwen.org/']

 # 鏈接提取器:只能使用正則表達(dá)式,提取當(dāng)前頁(yè)面的滿足allow條件的鏈接
 link = LinkExtractor(allow=r'/default_\d+\.aspx')

 # 鏈接提取器,提取所有標(biāo)題對(duì)應(yīng)的詳情頁(yè)url
 content_link = LinkExtractor(allow=r'cn/shiwenv_\w+\.aspx')
 rules = (
 # 規(guī)則解析器,需要解析所有的頁(yè)面,所有follow=True
 Rule(link, callback='parse_item', follow=True),

 # 不需要寫(xiě)follow,因?yàn)槲覀冎恍枰馕鲈斍轫?yè)中的數(shù)據(jù),而不是詳情頁(yè)中的url
 Rule(content_link, callback='content_item'),
 )

 # 解析當(dāng)前頁(yè)面的標(biāo)題
 def parse_item(self, response):
 p_list = response.xpath('//div[@class="sons"]/div[1]/p[1]')

 for p in p_list:
 title = p.xpath('./a//text()').extract_first()
 item = GushiproItem()
 item['title'] = title
 yield item
 
 # 解析詳情頁(yè)面的標(biāo)題和內(nèi)容
 def content_item(self,response):
 # //div[@id="sonsyuanwen"]/div[@class="cont"]/div[@class="contson"]
 # 解析詳情頁(yè)面的內(nèi)容
 content = response.xpath('//div[@id="sonsyuanwen"]/div[@class="cont"]/div[@class="contson"]//text()').extract()
 content = "".join(content)
 # # 解析詳情頁(yè)面的標(biāo)題
 title = response.xpath('//div[@id="sonsyuanwen"]/div[@class="cont"]/h1/text()').extract_first()
 # print("title:"+title+"\ncontent:"+content)
 item = ContentItem()
 item["content"] = content
 item["title"] = title
 # 將itme對(duì)象傳給管道
 yield item

2.2 item文件

import scrapy

# 不同的item類是獨(dú)立的,他們可以創(chuàng)建不同的item對(duì)象
class GushiproItem(scrapy.Item):
 # define the fields for your item here like:
 # name = scrapy.Field()
 title = scrapy.Field()

class ContentItem(scrapy.Item):
 title = scrapy.Field()
 content = scrapy.Field()

2.3 管道文件

from itemadapter import ItemAdapter

class GushiproPipeline:
 def __init__(self):
 self.fp = None

 def open_spider(self,spider):
 self.fp = open("gushi.txt",'w',encoding='utf-8')
 print("開(kāi)始爬蟲(chóng)")

 def process_item(self, item, spider):
 # 從詳情頁(yè)獲取標(biāo)題和內(nèi)容,所以需要判斷爬蟲(chóng)文件中傳來(lái)的item是什么類的item
 # item.__class__.__name__判斷屬于什么類型的item
 if item.__class__.__name__ == "ContentItem":
 content = "《"+item['title']+"》",item['content']
 content = "".join(content) 
 print(content)
 self.fp.write(content)
 return item

 def close_spider(self,spider):
 self.fp.close()
 print("結(jié)束爬蟲(chóng)")

2.4 配置文件

在這里插入圖片描述

2.5 輸出結(jié)果

在這里插入圖片描述

到此這篇關(guān)于python爬蟲(chóng)scrapy基于CrawlSpider類的全站數(shù)據(jù)爬取示例解析的文章就介紹到這了,更多相關(guān)python爬蟲(chóng)scrapy數(shù)據(jù)爬取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例

    Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)線性鏈表(單鏈表)算法,結(jié)合實(shí)例形式分析了Python單鏈表的定義、節(jié)點(diǎn)插入、刪除、打印等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python中eval函數(shù)使用與異常處理詳解

    python中eval函數(shù)使用與異常處理詳解

    這篇文章主要給大家介紹了關(guān)于python中eval函數(shù)使用與異常處理的相關(guān)資料,eval()函數(shù)用來(lái)執(zhí)行一個(gè)字符串表達(dá)式,并返回表達(dá)式的值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • Python聚類算法之基本K均值實(shí)例詳解

    Python聚類算法之基本K均值實(shí)例詳解

    這篇文章主要介紹了Python聚類算法之基本K均值運(yùn)算技巧,結(jié)合實(shí)例形式較為詳細(xì)的分析了基本K均值的原理與相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • Matplotlib自定義坐標(biāo)軸刻度的實(shí)現(xiàn)示例

    Matplotlib自定義坐標(biāo)軸刻度的實(shí)現(xiàn)示例

    這篇文章主要介紹了Matplotlib自定義坐標(biāo)軸刻度的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 10個(gè)Python面試常問(wèn)的問(wèn)題(小結(jié))

    10個(gè)Python面試常問(wèn)的問(wèn)題(小結(jié))

    這篇文章主要介紹了10個(gè)Python面試常問(wèn)的問(wèn)題(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Python-OpenCV基本操作方法詳解

    Python-OpenCV基本操作方法詳解

    下面小編就為大家分享一篇Python-OpenCV基本操作方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實(shí)現(xiàn)innerhtml功能的方法

    python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實(shí)現(xiàn)innerhtml功能的方法

    今天小編就為大家分享一篇python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實(shí)現(xiàn)innerhtml功能的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • 詳解Django的model查詢操作與查詢性能優(yōu)化

    詳解Django的model查詢操作與查詢性能優(yōu)化

    這篇文章主要介紹了詳解Django的model查詢操作與查詢性能優(yōu)化,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • python讀取excel表格生成erlang數(shù)據(jù)

    python讀取excel表格生成erlang數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了python讀取excel表格生成erlang數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具

    詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具

    這篇文章主要介紹了詳解python實(shí)現(xiàn)可視化的MD5、sha256哈希加密小工具,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

宝鸡市| 凤凰县| 宁蒗| 呼伦贝尔市| 德令哈市| 远安县| 红安县| 孙吴县| 车险| 开平市| 亚东县| 沅陵县| 图木舒克市| 和林格尔县| 乌鲁木齐县| 炉霍县| 奉贤区| 镇远县| 耒阳市| 镇坪县| 当涂县| 保靖县| 敦化市| 昭通市| 明溪县| 会同县| 延川县| 土默特左旗| 桃园市| 朝阳市| 绥化市| 蒙山县| 济源市| 梓潼县| 唐河县| 石城县| 射洪县| 星座| 东城区| 洮南市| 罗田县|